Gare au gorille (Web) - FCSC 2022

Gare au gorille (Web) - FCSC 2022

Fichiers du challenge Principe:
Exploiter une XSS sur un admin fictif pour récupérer son token de login

Le challenge

Le challenge est similaire à Chapristi

Deux challenges non-liés (chapristi/gorille) n'utilisent souvent pas les mêmes failles, donc, on peut s'attendre à tout sauf à une injection SQL

La page de flag et un token

Le site, similaire à chapristi
En cherchant dans les sources, on trouve un lien vers /flag
… qui nous dit qu'on n'est pas admin: le cookie "token" du site n'est pas le bon
Le token ne veut rien dire, et semble aléatoire quand on ré-ouvre une navigation privée, donc, impossible de l'attaquer directement

Signaler un meme

Le site propose une fonction pour signaler un meme à l'admin: cette page contient une valeur "URL" qui sera surement affichée à cet administrateur
En cherchant un faux-tag HTML dans la page de recherche, on s'aperçoit qu'une XSS (reflected) existe

Exfiltration de notre propre token

On forge alors un code JS qui va faire une requete à un C2 (requestinspector.com) en passant le token de l'utilisateur

Tester sur soi-même, c'est toujours pratique!

Dans notre C2, on reçoit alors une requête vers une page et le (notre) token apparait

Forger le payload complet

On encode donc notre payload, qu'on va utiliser comme url à signaler à l'admin: la XSS se déclanchera, et on devrait récupérer le token de cet admin
On teste sur soi à nouveau
Ca marche comme attendu

Livraison à l'admin

On signale un meme au pif, histoire d'avoir la requete correspondante
On signale alors l'URL avec notre payload XSS (codes disponibles ici)
… et… quedale

Tester sur soi, c'est bien, mais cela suppose l'hypothèse "ma victime a le même navigateur que moi". Je soupçonne que cette hypothèse soit fausse

Nouvelle livraison

Je change alors de payload, et passe par une image: ça marche (mais cela n'exfiltrera pas le token)
Un autre payload cette fois, qui chargerait un JS distant: ça marche aussi

Avec mon propre C2

Je décide alors d'utiliser une URL vers mon propre C2: ça fonctionne, la requête est reçue
J'utilise alors un script JS perso avec plusieurs variantes de payloads: ça marche! (dispos, pour rappel, ici)

Usurpation

On utilise le token reçue dans notre propre navigateur
Et hop, /flag est accessible, et poof, voilà le flag:
FCSC{14b15680de4e305b89eaa2a07b137abf4e39b5773f39a4ea7155ca5387c6f59e}

Fichiers du challenge

↩ Retour à la liste des challenges

⇇ Retour à l'accueil