TL;DR #
- Le challenge impose de respecter dix commandements, incluant l’accès à la page
/1337avec divers en-têtes HTTP, cookies, paramètres, etc. - On utilise curl et sa documentation pour construire une requête conforme à ces exigences
- En suivant les instructions à la lettre, on parvient à récupérer le flag
Informations du challenge #
| Auteur | Mika |
|---|---|
| Catégorie | Web/Serveur |
| Description | Vous n’avez qu’une seule chose à faire, suivre les instructions… |
| Difficulté | Très facile |
| Points | 50 |
| Résolutions | 114/118 |
| Sources | https://github.com/BreizhCTF/breizhctf-2025/tree/main/web/curlmania/ |
| URL | https://curlmania.ctf.bzh/ |
Résolution du challenge #
En se rendant sur curlmania.ctf.bzh, on y découvre une page avec les 10 commandements suivants :
- Accéder à la page
/1337 - Votre
User-Agentdoit êtreJ'aime la galette saucisse - Votre requête doit utiliser la méthode
GETet compter 3 paramètresGETdont un ayant pour valeur35 - Un header HTTP
LIBEREZ-GCC: OUIdoit être présent - Un cookie
jaiplustropdinspiest obligatoire - Le
Content-Typedoit êtreapplication/json - Nul autre payload de data que
enbretagne(JSON) ne doit être présent - La valeur du paramètre de la règle 7 ne peut être que
il fait toujours beau - Le
Content-Lengthdoit être de1337 - Votre
Refererdoit êtreJe jure solennellement que mes intentions sont mauvaises mais je ne vais pas taper sur l'infra
Ce challenge semble relativement abordable au premier coup d’œil, d’autant plus que sa description indique qu’il suffit de suivre les instructions à la lettre, mais je vais tout de même présenter sa résolution étape par étape.
Pour commencer, la véritable première étape avant d’accéder à la page /1337 serait de comprendre qu’on devra utiliser l’outil curl grâce au titre du challenge CurlMania.
Grâce à son manuel d’utilisation, il va être relativement facile de déterminer les arguments à utiliser pour résoudre ce challenge.
# 1. Accéder à la page /1337
curl "https://curlmania.ctf.bzh/1337"
# 2. Votre User-Agent doit être "J'aime la galette saucisse"
curl "https://curlmania.ctf.bzh/1337" \
-H "User-Agent: J'aime la galette saucisse"
# 3. Votre requête doit utiliser la méthode GET et compter 3 paramètres GET dont un ayant pour valeur "35"
curl "https://curlmania.ctf.bzh/1337?a=35&b=&c=" \
-H "User-Agent: J'aime la galette saucisse" \
-X GET
# 4. Un header HTTP "LIBEREZ-GCC: OUI" doit être présent
curl "https://curlmania.ctf.bzh/1337?a=35&b=&c=" \
-H "User-Agent: J'aime la galette saucisse" \
-X GET \
-H "LIBEREZ-GCC: OUI"
# 5. Un cookie "jaiplustropdinspi" est obligatoire
curl "https://curlmania.ctf.bzh/1337?a=35&b=&c=" \
-H "User-Agent: J'aime la galette saucisse" \
-X GET \
-H "LIBEREZ-GCC: OUI" \
-b "jaiplustropdinspi=0"
# Information supplémentaire : Il est nécessaire de réaliser ces 3 étapes ensemble sans quoi le serveur répondra par une erreur 400 Bad Request
# 6. Le Content-Type doit être "application/json"
# 7. Nul autre payload de data que "enbretagne" (JSON) ne doit être présent
# 8. La valeur du paramètre de la règle 7 ne peut être que "il fait toujours beau"
curl "https://curlmania.ctf.bzh/1337?a=35&b=&c=" \
-H "User-Agent: J'aime la galette saucisse" \
-X GET \
-H "LIBEREZ-GCC: OUI" \
-b "jaiplustropdinspi=0" \
-H "Content-Type: application/json" \
--data-binary '{"enbretagne":"il fait toujours beau"}'
# 9. Le Content-Length doit être de 1337
curl "https://curlmania.ctf.bzh/1337?a=35&b=&c=" \
-H "User-Agent: J'aime la galette saucisse" \
-X GET \
-H "LIBEREZ-GCC: OUI" \
-b "jaiplustropdinspi=0" \
-H "Content-Type: application/json" \
--data-binary '{"enbretagne":"il fait toujours beau" }'
# Informations supplémentaires : Il y a 1299 espaces dans la valeur de la clé enbretagne afin d'obtenir un Content-Length de 1337. Utiliser -H "Content-Length: 1337" ne fonctionne pas, car curl calcule automatiquement le Content-Length, cela va donc générer l'envoi de 2 valeurs au serveur qui ne saura pas comment traiter cette requête
# 10. Votre Referer doit être "Je jure solennellement que mes intentions sont mauvaises mais je ne vais pas taper sur l'infra"
curl "https://curlmania.ctf.bzh/1337?a=35&b=&c=" \
-H "User-Agent: J'aime la galette saucisse" \
-X GET \
-H "LIBEREZ-GCC: OUI" \
-b "jaiplustropdinspi=0" \
-H "Content-Type: application/json" \
--data-binary '{"enbretagne":"il fait toujours beau" }' \
-H "Referer: Je jure solennellement que mes intentions sont mauvaises mais je ne vais pas taper sur l'infra" \
-s \
| grep -oP 'BZHCTF{.+}'
On a respecté l’ensemble des commandements, on obtient donc le flag suivant BZHCTF{W0w_You_KnoW_H0w_To_FLLW_INSTRXCTIONS!!}.