Saltar al contenido
HackIndex logo

HackIndex

Herramientas

Flask Cookie Forge & Decoder

Decodifica cookies de sesión Flask itsdangerous o forja firmadas — para CTF challenges y pruebas autorizadas.

Flask firma las cookies de sesión usando la biblioteca itsdangerous con HMAC-SHA1 o HMAC-SHA512. El formato de cookie es PAYLOAD.TIMESTAMP.SIGNATURE — todos los segmentos están codificados en base64url. Los payloads comprimidos comienzan con un punto como prefijo. Esta herramienta decodifica cualquier cookie de sesión Flask para revelar el payload JSON (sin necesidad de clave), verifica la firma HMAC cuando proporcionas la SECRET_KEY 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

Decodificar y verificar una cookie Flask existente

Se encuentra en la configuración de la app objetivo como SECRET_KEY. Se usa para verificar la firma HMAC.

Flask-Session usa "cookie-session" por defecto. Cambiar solo si la app objetivo usa un salt personalizado.

Forjar Cookie

Generar una cookie Flask firmada válida

Flask usa HMAC-SHA1 por defecto. Algunas apps configuran HMAC-SHA512.

Dejar en blanco para el predeterminado de Flask "cookie-session".

Consejo: decodifica primero una cookie real para ver la estructura JSON exacta, luego modifica y forja.

Cómo funciona

Flask usa la biblioteca itsdangerous para firmar las cookies de sesión con HMAC. El formato de cookie son tres segmentos base64url separados por puntos: PAYLOAD.TIMESTAMP.SIGNATURE. La derivación de clave es HMAC-{algo}(key=secret, msg=salt) — la clave derivada se usa para calcular HMAC-{algo}(key=derived, msg=PAYLOAD.TIMESTAMP). Esta herramienta decodifica y opcionalmente verifica cualquier cookie de sesión Flask, luego te permite forjar una nueva — todo del lado del servidor en PHP sin almacenar ninguna entrada.

  1. 1. Get the cookie: intercepta la solicitud objetivo en Burp Suite o DevTools del navegador y copia el valor de la cookie de sesión.
  2. 2. Decode: pega la cookie para revelar el payload JSON sin necesitar una clave — las cookies Flask están firmadas, no cifradas.
  3. 3. Obtener la SECRET_KEY: encuéntrala en la configuración de la app objetivo, un .env filtrado, historial de git, o crackéala a partir de la firma conocida.
  4. 4. Modify & forge: cambia el payload JSON (p.ej. establece user_id o is_admin), ingresa la SECRET_KEY y forja una nueva cookie firmada válida.
  5. 5. Inject: reemplaza la cookie de sesión en tu solicitud y reenvía.

¿Qué son las cookies de sesión Flask?

Flask almacena el diccionario de sesión completo directamente en la cookie del navegador — no hay almacén de sesión del lado del servidor por defecto. El objeto de sesión se serializa en JSON, opcionalmente se comprime con zlib, se codifica en base64url y se firma con HMAC usando la SECRET_KEY de la app. La firma previene la manipulación, pero como el payload no está cifrado, cualquiera puede leer los datos de sesión sin la clave. Esto convierte a las cookies de sesión Flask en un objetivo habitual en CTF web challenges.

payload

Objeto JSON codificado en base64url (comprimido con zlib si tiene un punto como prefijo). Contiene los datos de sesión — user_id, roles, token CSRF, etc.

timestamp

Época Unix big-endian de 4 bytes empaquetada en base64url. Presente en cookies con tiempo (URLSafeTimedSerializer). Usada para comprobaciones de expiración de cookies.

signature

base64url(HMAC-{algo}(derived_key, PAYLOAD.TIMESTAMP)). Clave derivada = HMAC-{algo}(secret_key, salt). El salt predeterminado es "cookie-session".

compression

itsdangerous comprime el payload con zlib deflate cuando la compresión ahorra espacio. Los payloads comprimidos tienen un punto como prefijo antes de la codificación base64url.

Preguntas frecuentes

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

No. Toda la decodificación y firma ocurre del lado del servidor en PHP. No se almacena, registra ni transmite ningún dato a terceros.

¿Puedo leer el payload sin la SECRET_KEY?

Sí — las cookies Flask están firmadas pero no cifradas. Pega la cookie sin una clave para ver instantáneamente los datos de sesión JSON. Solo necesitas la SECRET_KEY para verificar o forjar una firma válida.

¿Cómo funciona la derivación de clave de itsdangerous?

itsdangerous deriva una clave de firma como HMAC-{algo}(key=secret_key, msg=salt). La firma es entonces HMAC-{algo}(key=derived_key, msg=PAYLOAD.TIMESTAMP). Esto difiere de un HMAC directo — el salt añade separación de dominio entre diferentes usos de la misma clave secreta.

¿Qué algoritmo debo elegir al forjar?

HMAC-SHA1 es el predeterminado de Flask/itsdangerous. Usa HMAC-SHA512 solo si la app objetivo lo configura explícitamente. Puedes detectar el algoritmo probando ambos durante la decodificación — esta herramienta prueba sha1 primero, luego sha512.

La decodificación falla o la firma es inválida — ¿por qué?

Asegúrate de pegar el valor de cookie en bruto sin codificación URL (%3D etc). La herramienta gestiona la entrada URL-codificada automáticamente. Para la verificación de firma, comprueba que la SECRET_KEY es correcta y que el salt coincide con la app objetivo (el predeterminado es "cookie-session").