Iench2Rue
Cycom 2024 - Iench2Rue - Web - 300 points⌗
Énoncé⌗
J’ai une mission urgente et d’ordre personnel pour toi. Mon chien, Tobby, s’est fait enlever il y a une semaine par deux hommes cagoulés.
J’ai fait ma petite enquête, et j’ai trouvé pourquoi ils font ca: ils kidnappent des chiens de race dans la rue et ils les revendent par l’intermédiaire d’un site internet.
J’ai pu identifier l’adresse du site, mais je n’y vois pas grand chose à part la liste des chiens à vendre.
Aide-moi à retrouver mon Tobby, c’est dans tes cordes non ?
Solution⌗
Pour trouver la solution de ce challenge, il faut déjà identifier la stack techno employée par le site, car la vulnérabilité se trouve dans l’implémentation du framework.
En générant une erreur 404, j’obtiens une erreur stylysée, et en faisant une recherche sur son texte, j’en conclus qu’il s’agit d’une erreur du framework Symfony.
Il existe plusieurs vulnérabilités autour du framework Symfony, mais celle qui va nous intéresser est la RCE _fragment
Lorsque l’endpoint _fragment
est activé, il est possible, moyennant de connaître le APP_SECRET
de l’application, d’obtenir une execution de code à distance sur le serveur.
Si l’on requête l’endpoint _fragment
, nous recevons 403
en réponse, ce qui prouve qu’il est bien activé.
On cherche donc un APP_SECRET
, que l’on peut trouver.
En effectuant un peu de fuzzing sur l’app, on arrive à trouver une page phpinfo.php
.
Et coup de bol, le token APP_SECRET
figure parmi les variables d’environnement exposées sur le PHPInfo.
Avec ces infos, on peut maintenant utiliser l’endpoint /_fragment
pour obtenir une execution de commande sur l’application. Il existe des scripts qui font pratiquement tout à notre place, comme par exemple symfony-secret-fragments-v2.py
On peut vérifier que notre exploitation fonctionne :
python ./symfony-secret-fragments-v2.py https:/iench2rue.challengecyber.fr/_fragment -s 'mcPYaKwbvD2YVje5akrBKGPcYKVIKwqT'
Et on vient ensuite tester une commande système :
python ./symfony-secret-fragments-v2.py https:/iench2rue.challengecyber.fr/_fragment -s 'mcPYaKwbvD2YVje5akrBKGPcYKVIKwqT' --function 'system' --arguments 'command:id' -m 1
En visitant le lien donné par le script, notre commande d’execute.
Il ne nous reste plus qu’a récupérer le flag !
ls /
:
cat /flag.txt
:
FLAG : CYCOM{sYm*******}
Auteur⌗
Lyne