Descripción

This lab uses a JWT-based mechanism for handling sessions. Due to implementation flaws, the server doesn’t verify the signature of any JWTs that it receives.

To solve the lab, modify your session token to gain access to the admin panel at /admin, then delete the user carlos.

You can log in to your own account using the following credentials: wiener:peter

JWT authentication bypass via unverified signature writeup

Al entrar en el laboratorio encontraremos un blog. Iremos a ‘My account’ e iniciaremos sesión con el usuario ‘wiener’ y la contraseña ‘peter’.

Al intentar entrar en ‘/admin’ obtendremos el error ‘Admin interface only available if logged in as an administrator’. Veremos las peticiones realizadas en el ‘Logger’ y encontraremos lo siguiente:

La cookie de sesión es un JWT (JSON Web Token). Esto lo sabemos porque está formada por tres partes separadas por dos ‘.’. Las tres partes se corresponden con:

  1. Encabezado: Compuesto por el tipo de firma.
  2. Contenido: Con la información del inicio de sesión.
  3. Firma: Compuesta por la codificación del encabezado y el contenido en Base64.

Tomamos ahora la petición GET a ‘/admin’ y la enviaremos al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater.

Si vemos la parte intermedia, del contenido, y la descodificamos de URL y de Base64, veremos el campo ‘sub’, que se identifica con el usuario ‘wiener’. Cambiaremos este usuario por ‘administrator’:

Ahora podremos entrar a ‘/admin’. Esto se debe a que el servidor no comprueba que el token esté bien firmado, sólo revisa el contenido. Si comprobara la firma tendríamos que rehacerla también.

Enviaremos una petición GET a ‘/admin/delete?username=carlos’, nos devolverá el código HTTP 302 y habremos completado el laboratorio.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *