Ga naar content
HackIndex.io
Tools

Laravel-cookie smeden en decoderen

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 versleutelt en ondertekent automatisch alle cookies die via Cookie::make() of de cookie-helper worden gezet (tenzij uitgesloten via $except in de EncryptCookies-middleware). De sessiecookie (standaard laravel_session) gebruikt de cookie-sessiedriver alleen wanneer SESSION_DRIVER=cookie; anders bevat hij enkel een versleutelde sessie-ID-pointer. In CTF-challenges gebruiken apps vaak de cookie-driver om de volledige sessie-payload direct in de cookie op te slaan.

iv

Initialisatievector. Willekeurig gegenereerd voor elke encryptie-operatie. Base64-gecodeerd binnen de JSON-payload.

value

De AES-versleutelde ciphertext. Base64-gecodeerd. openssl_encrypt() met flags=0 (standaard) geeft direct base64 terug.

mac

HMAC-SHA256 van base64(iv) samengevoegd met base64(value), met de ruwe APP_KEY-bytes als sleutel. Afwezig bij GCM-ciphers.

tag

GCM-authenticatietag. Gebruikt in plaats van HMAC voor AES-256-GCM- en 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.