Flask Cookie Forge & Decoder
Decodeer Flask itsdangerous sessiecookies of forge gesigneerde exemplaren — voor CTF-uitdagingen en geautoriseerd testen.
Cookie Decoderen
Decodeer & verifieer een bestaande Flask cookieCookie Forgen
Genereer een geldige gesigneerde Flask cookieHoe het werkt
Flask gebruikt de itsdangerous bibliotheek om sessiecookies te signeren met HMAC. Het cookieformaat bestaat uit drie base64url-segmenten gescheiden door punten: PAYLOAD.TIMESTAMP.SIGNATURE. De sleutelafleiding is HMAC-{algo}(key=secret, msg=salt) — de afgeleide sleutel wordt vervolgens gebruikt om HMAC-{algo}(key=derived, msg=PAYLOAD.TIMESTAMP) te berekenen. Dit hulpmiddel decodeert en verifieert optioneel elke Flask sessiecookie en laat je dan een nieuwe forgen — alles server-side in PHP zonder invoer op te slaan.
- 1. Haal de cookie op: onderschep het doelverzoek in Burp Suite of browser DevTools en kopieer de sessiecookiewaarde.
- 2. Decode: plak de cookie om de JSON-payload te tonen zonder sleutel — Flask cookies zijn gesigneerd, niet versleuteld.
- 3. Haal de SECRET_KEY op: vind het in de doelapp-configuratie, een gelekt .env-bestand, git-geschiedenis of crack het via de bekende handtekening.
- 4. Aanpassen & forgen: wijzig de JSON-payload (bijv. stel user_id of is_admin in), voer de SECRET_KEY in en forge een nieuwe geldige gesigneerde cookie.
- 5. Injecteren: vervang de sessiecookie in je verzoek en verstuur opnieuw.
Wat zijn Flask sessiecookies?
Flask slaat het volledige sessiewoordenboek rechtstreeks op in de browsercookie — er is standaard geen server-side sessieopslag. Het sessieobject wordt JSON-geserialiseerd, optioneel zlib-gecomprimeerd, base64url-gecodeerd en gesigneerd met HMAC via de SECRET_KEY van de app. De handtekening voorkomt manipulatie, maar omdat de payload niet versleuteld is, kan iedereen de sessiegegevens lezen zonder de sleutel. Dit maakt Flask sessiecookies een veelvoorkomend doelwit in CTF-webuitdagingen.
payload
Base64url-gecodeerd JSON-object (zlib-gecomprimeerd als voorafgegaan door een punt). Bevat de sessiegegevens — user_id, rollen, CSRF-token, enz.
timestamp
4-byte big-endian Unix epoch verpakt in base64url. Aanwezig in getimede cookies (URLSafeTimedSerializer). Gebruikt voor verloopdatumcontroles van cookies.
signature
base64url(HMAC-{algo}(derived_key, PAYLOAD.TIMESTAMP)). Afgeleide sleutel = HMAC-{algo}(secret_key, salt). Standaard salt is "cookie-session".
compression
itsdangerous comprimeert de payload met zlib deflate wanneer compressie ruimte bespaart. Gecomprimeerde payloads worden voorafgegaan door een punt voor base64url-codering.
FAQ
Verstuurt dit mijn cookie of SECRET_KEY ergens naartoe?
Nee. Alle decodering en ondertekening vindt server-side in PHP plaats. Er worden geen gegevens opgeslagen, gelogd of naar derden verzonden.
Kan ik de payload lezen zonder de SECRET_KEY?
Ja — Flask cookies zijn gesigneerd maar niet versleuteld. Plak de cookie zonder sleutel om direct de JSON-sessiegegevens te zien. Je hebt de SECRET_KEY alleen nodig om een geldige handtekening te verifiëren of te forgen.
Hoe werkt de itsdangerous sleutelafleiding?
itsdangerous leidt een signeringsleutel af als HMAC-{algo}(key=secret_key, msg=salt). De handtekening is vervolgens HMAC-{algo}(key=derived_key, msg=PAYLOAD.TIMESTAMP). Dit verschilt van een directe HMAC — de salt voegt domeinscheiding toe tussen verschillende gebruiken van dezelfde geheime sleutel.
Welk algoritme moet ik kiezen bij het forgen?
HMAC-SHA1 is de Flask/itsdangerous standaard. Gebruik HMAC-SHA512 alleen als de doelapp het expliciet configureert. Je kunt het algoritme detecteren door beide te proberen tijdens het decoderen — dit hulpmiddel probeert eerst sha1, dan sha512.
Decodering mislukt of handtekening is ongeldig — waarom?
Zorg ervoor dat je de ruwe cookiewaarde plakt zonder URL-codering (%3D etc). Het hulpmiddel verwerkt URL-gecodeerde invoer automatisch. Controleer voor handtekeningverificatie of de SECRET_KEY correct is en de salt overeenkomt met de doelapp (standaard is "cookie-session").