JWT Lab 2
Skills
- JWT authentication bypass via flawed signature verification
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
utiliza un mecanismo basado en JWT
para manejar las sesiones
. El servidor
está mal configurado
para aceptar JWTs
sin firma
. Para resolver
el laboratorio, debemos modificar nuestro token de sesión
para obtener acceso
al panel
de administración
en /admin
y eliminar al usuario
carlos
. Podemos iniciar sesión
en nuestra propia cuenta utilizando las credenciales wiener:peter
Resolución
Al acceder
a la web
nos sale esto
Pulsamos sobre My account
y nos logueamos
con credenciales wiener:peter
Recargamos
la página
y capturamos
la petición
mediante Burpsuite
Debemos tener instalado la extensión JWT Editor
, esta extensión
nos avisará si detecta
un token
Los JWT
pueden ser de dos tipos: JWS
(JSON Web Signature) y JWE
(JSON Web Encryption). Los JWS
se utilizan para garantizar la integridad
y la autenticidad
de los datos
mediante una firma digital
, pero no cifran la información
, por lo que los datos
pueden ser leídos
, aunque no modificados
sin invalidar la firma
. En cambio, los JWE
están diseñados para proteger la confidencialidad
de los datos
mediante cifrado
, asegurando que solo las partes autorizadas
puedan acceder a la información
, pero no garantizan la autenticidad
sin mecanismos adicionales
Modificamos
el nombre
de usuario
en el payload
Ejecutamos el ataque none Signing Algorithm
y usamos el primer payload, si no funcionara, deberíamos probar con los demás
Hacemos Ctrl + Shift + i
y pegamos el nuevo valor
en el parámetro session
Recargamos
la web
con F5
y nos aparece el panel
de administrador
, lo que quiere decir que nos hemos convertidos
en ese usuario
Esto ha sido posible debido a que Los JWTs
pueden ser firmados
utilizando una variedad de algoritmos
diferentes, pero también pueden ser dejados sin firma
. En este caso, el parámetro alg
se establece en none
, lo que indica un JWT
denominado unsecured JWT
. Debido a los obvios peligros de esto, los servidores
generalmente rechazan los tokens
sin firma
. Sin embargo, dado que este tipo de filtrado depende del análisis de strings
, en ocasiones podemos eludir
estos filtros utilizando técnicas clásicas de ofuscación
, como la capitalización mixta
y codificaciones
inesperadas