TL;DR #
- Le challenge impose de respecter dix commandements, incluant l’accès à la page
/1337
avec 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-Agent
doit êtreJ'aime la galette saucisse
- Votre requête doit utiliser la méthode
GET
et compter 3 paramètresGET
dont un ayant pour valeur35
- Un header HTTP
LIBEREZ-GCC: OUI
doit être présent - Un cookie
jaiplustropdinspi
est obligatoire - Le
Content-Type
doit ê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-Length
doit être de1337
- Votre
Referer
doit ê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!!}
.