Ga naar content
HackIndex logo

HackIndex

Tools

Laravel Cookie Forge & Decoder

Decodeer Laravel AES versleutelde cookies of forge gesigneerde — voor CTF-uitdagingen en geautoriseerde tests.

Laravel versleutelt alle cookies met AES-256-CBC (of AES-256-GCM in Laravel 10+) via de APP_KEY uit je .env bestand. De versleutelde waarde is base64-gecodeerde JSON met een IV, de ciphertext en een HMAC-SHA256 handtekening. Dit hulpmiddel ontsleutelt de cookie om de sessiepayload te tonen — gebruikers-ID, rol, CSRF-token — verifieert de HMAC-handtekening en laat je een nieuwe geldige gesigneerde cookie forgen. Alle verwerking vindt server-side in PHP plaats. Niets wordt opgeslagen of gelogd.

Cookie Decoderen

Ontsleutel & verifieer een bestaande cookie

Accepteert: base64:xxx (standaard), hex-string of ruwe base64. Te vinden in de .env als APP_KEY.

Cookie Forgen

Genereer een geldige gesigneerde Laravel cookie

AES-256-CBC is de standaard voor Laravel 9 en lager. AES-256-GCM voor Laravel 10+.

Tip: decodeer eerst een echte cookie om het exacte geserialiseerde formaat te zien, pas dan aan en forge.

Hoe het werkt

Laravel versleutelt cookies met AES-256-CBC (of AES-128-CBC / GCM varianten) met de APP_KEY uit je .env bestand. De versleutelde waarde is base64-gecodeerde JSON met een IV, de ciphertext en een HMAC-SHA256 handtekening. Dit hulpmiddel ontsleutelt en verifieert de handtekening of forgt een nieuwe geldige cookie — beide bewerkingen vinden server-side in PHP plaats zonder invoer op te slaan.

  1. 1. Haal de cookie op: onderschep het doelverzoek in Burp Suite of browser DevTools en kopieer de laravel_session cookiewaarde.
  2. 2. Haal de APP_KEY op: zoek hem in de .env van het doel, een gelekte configuratie of crack hem van bekende plaintext.
  3. 3. Decoderen: plak beide hierboven en decodeer om de sessiepayload te onthullen (gebruikers-ID, CSRF-token, flashdata).
  4. 4. Aanpassen & forgen: pas de payload aan (bijv. user_id verhogen), plak de APP_KEY en forge een nieuwe geldige gesigneerde cookie.
  5. 5. Injecteren: vervang de originele cookie in je verzoek en verstuur opnieuw.

Wat zijn Laravel versleutelde cookies?

Laravel automatically encrypts and signs all cookies set via Cookie::make() or the cookie helper (unless excluded via $except in EncryptCookies middleware). The session cookie (laravel_session by default) uses the cookie session driver only when SESSION_DRIVER=cookie, otherwise it contains just an encrypted session ID pointer. In CTF challenges, apps frequently use the cookie driver to store the full session payload directly in the cookie.

iv

Initialisation Vector. Randomly generated for each encryption operation. Base64-encoded inside the JSON payload.

value

The AES-encrypted ciphertext. Base64-encoded. openssl_encrypt() with flags=0 (default) returns base64 directly.

mac

HMAC-SHA256 of base64(iv) concatenated with base64(value), keyed with the raw APP_KEY bytes. Absent for GCM ciphers.

tag

GCM authentication tag. Used instead of HMAC for AES-256-GCM and AES-128-GCM ciphers (Laravel 10+).

FAQ

Verzendt dit mijn cookie of APP_KEY ergens naartoe?

Nee. Ontsleuteling en versleuteling vinden beide server-side in PHP plaats met openssl_decrypt / openssl_encrypt. Er worden geen gegevens opgeslagen, gelogd of doorgestuurd aan derden.

Wat is de cookie sessiedriver?

Als SESSION_DRIVER=cookie in .env is ingesteld, serialiseert Laravel de volledige sessie-array, versleutelt deze en slaat deze direct op in de browsercookie. Dit is gebruikelijk in CTF-uitdagingen. De meeste productie-apps gebruiken file-, database- of Redis-drivers waarbij alleen een versleuteld sessie-ID in de cookie wordt opgeslagen.

Hoe werkt de HMAC-handtekening?

Laravel berekent hash_hmac("sha256", base64(iv) . base64(ciphertext), raw_key). Zowel de IV als de ciphertext die gebruikt worden in de MAC-berekening zijn de base64-gecodeerde versies opgeslagen in de JSON — niet de ruwe bytes.

Welke versleuteling moet ik kiezen bij forgen?

Kies de versleuteling die overeenkomt met die van de doelapp. Laravel 5–9 standaard is AES-256-CBC. Laravel 10+ ondersteunt AES-256-GCM. Je kunt het detecteren aan de aanwezigheid van het tag-veld in de gedecodeerde cookiestructuur (GCM heeft een niet-leeg tag-veld; CBC heeft in plaats daarvan mac).

Ontsleuteling mislukt zelfs met de juiste APP_KEY — waarom?

Controleer of je de ruwe cookiewaarde plakt en niet een URL-gecodeerde versie. Sommige frameworks coderen cookies dubbel. Verifieer ook het sleutelformaat: Laravel slaat het op als base64:xxx in .env — plak het precies zoals het daar verschijnt.