Saltar al contenido
HackIndex.io
Herramientas

Laravel Cookie Forge & Decodificador

Decodifica cookies cifradas AES de Laravel o forja firmadas — para retos CTF y pruebas autorizadas.

Laravel cifra todas las cookies con AES-256-CBC (o AES-256-GCM en Laravel 10+) usando la APP_KEY de tu archivo .env. El valor cifrado es JSON codificado en base64 que contiene un IV, el texto cifrado y una firma HMAC-SHA256. Esta herramienta descifra la cookie para revelar el payload de sesión — ID de usuario, rol, token CSRF — verifica la firma HMAC y te permite forjar una nueva cookie firmada válida. Todo el procesamiento ocurre del lado del servidor en PHP. Nada se almacena ni se registra.

Decodificar Cookie

Descifrar y verificar una cookie existente

Acepta: base64:xxx (estándar), cadena hex o base64 en crudo. Se encuentra en el .env objetivo como APP_KEY.

Forjar Cookie

Generar una cookie de Laravel firmada válida

AES-256-CBC es el predeterminado para Laravel 9 e inferior. AES-256-GCM para Laravel 10+.

Consejo: decodifica primero una cookie real para ver el formato serializado exacto, luego modifica y forja.

Cómo funciona

Laravel cifra las cookies con AES-256-CBC (o las variantes AES-128-CBC / GCM) usando la APP_KEY de tu archivo .env. El valor cifrado es un JSON en base64 que contiene un IV, el texto cifrado y una firma HMAC-SHA256. Esta herramienta descifra y verifica la firma, o falsifica una cookie válida desde cero. Ambas operaciones ocurren en el servidor, en PHP, sin almacenar ninguna entrada.

  1. 1. Obtén la cookie: intercepta la petición en Burp Suite o en las DevTools del navegador y copia el valor de la cookie laravel_session.
  2. 2. Obtén la APP_KEY: encuéntrala en el .env del objetivo, en una configuración filtrada, o crackéala a partir de texto plano conocido.
  3. 3. Decodificar: pega ambos arriba y decodifica para revelar el payload de sesión (ID de usuario, token CSRF, datos flash).
  4. 4. Modificar y falsificar: cambia el payload (por ejemplo, elevando user_id), pega la APP_KEY y falsifica una nueva cookie firmada válida.
  5. 5. Inyectar: sustituye la cookie original en tu petición y vuelve a enviarla.

¿Qué son las cookies cifradas de Laravel?

Laravel cifra y firma automáticamente todas las cookies establecidas mediante Cookie::make() o el helper cookie (salvo que se excluyan con $except en el middleware EncryptCookies). La cookie de sesión (laravel_session por defecto) usa el driver de sesión cookie solo cuando SESSION_DRIVER=cookie; de lo contrario, solo contiene un puntero de ID de sesión cifrado. En los retos CTF, las apps suelen usar el driver cookie para almacenar todo el payload de sesión directamente en la cookie.

iv

Vector de inicialización. Se genera aleatoriamente en cada operación de cifrado. Codificado en Base64 dentro del payload JSON.

value

El texto cifrado con AES. Codificado en Base64. openssl_encrypt() con flags=0 (por defecto) devuelve base64 directamente.

mac

HMAC-SHA256 de base64(iv) concatenado con base64(value), con la clave de los bytes en bruto de APP_KEY. Ausente en cifrados GCM.

tag

Etiqueta de autenticación GCM. Se usa en lugar de HMAC para los cifrados AES-256-GCM y AES-128-GCM (Laravel 10+).

Preguntas frecuentes

¿Envía mi cookie o APP_KEY a algún lugar?

No. El descifrado y cifrado ocurren del lado del servidor en PHP usando openssl_decrypt / openssl_encrypt. No se almacena, registra ni transmite ningún dato a terceros.

¿Qué es el driver de sesión cookie?

Cuando se establece SESSION_DRIVER=cookie en .env, Laravel serializa todo el array de sesión, lo cifra y lo almacena directamente en la cookie del navegador. Esto es común en configuraciones de retos CTF. La mayoría de las apps de producción usan los drivers file, database o Redis, donde solo se guarda un ID de sesión cifrado en la cookie.

¿Cómo funciona la firma HMAC?

Laravel calcula hash_hmac("sha256", base64(iv) . base64(ciphertext), raw_key). Tanto la IV como el texto cifrado usados en el cálculo del MAC son las versiones codificadas en base64 almacenadas en el JSON, no los bytes en bruto.

¿Qué cifrado debo elegir al forjar?

Haz coincidir el cifrado con el que usa la app objetivo. El valor por defecto en Laravel 5-9 es AES-256-CBC. Laravel 10+ admite AES-256-GCM. Puedes detectarlo por la presencia del campo tag en la estructura de la cookie decodificada (GCM tiene un campo tag no vacío; CBC tiene mac en su lugar).

El descifrado falla incluso con la APP_KEY correcta — ¿por qué?

Verifica que estás pegando el valor en crudo y no una versión codificada en URL. Algunos frameworks codifican las cookies dos veces. También verifica el formato de la clave: Laravel lo almacena como base64:xxx en .env — pégalo exactamente como aparece allí.