Authentication bypass via encryption oracle writeup

Descripción

This lab contains a logic flaw that exposes an encryption oracle to users. To solve the lab, exploit this flaw to gain access to the admin panel and delete the user carlos.

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

Authentication bypass via encryption oracle writeup

Al entrar al laboratorio veremos un blog. Entraremos en ‘My account’ e iniciaremos sesión con el usuario ‘wiener’ y la contraseña ‘peter’. También pulsaremos la nueva opción de este laboratorio ‘Stay logged in’. El servidor nos devolverá la siguiente petición, donde en base a nuestros datos proporcionados nos da la cookie ‘stay-logged-in’:

Ahora crearemos un comentario en un post, y pondremos en el campo de ‘email’ ‘test’. Esto genera dos peticiones. Una de cifrado email -> cookie ‘notification’:

Y otra de descifrado ‘notification’-> Texto:

Llevaremos ambas peticiones al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater. Allí descifraremos nuestra cookie de ‘stay-logged-in’ poniendo su valor en la de ‘notification’. El resultado es el siguiente:

Ahora sabemos que el formato para cifrar es ‘username:timestamp’. Intentaremos cifrar el usuario ‘administrator’ poniendo en el valor de ‘email’ de la petición que cifra, junto con el timestamp de ‘wiener:

La cookie de notification ahora tiene el valor: ‘T18aSFr0uYjSxJ8KmTVO0lPLD7dYgqBLtMqaPujyaoaQbn6y8C2QWzrPYCMV%2b8kCBsnkC1BY0MDDyEyq8IFTRw%3d%3d’.

El problema es que si la pegamos en la cookie de ‘notification’ de la petición que descifra, veremos el siguiente mensaje:

Nótese la diferencia respecto a una cookie válida (como la de sesión que tenemos actualmente):

El servidor ha añadido ‘Invalid email address: ‘ a nuestra cookie en el proceso, por lo que debemos quitárselo, pero al hacer esto la cadena no será múltiplo de 16, por lo que antes la modificaremos:

Primero, poniendo 33 (32 + 1 al empezar notepad a contar por 1) caracteres delante (da igual cuáles, puesto que serán borrados):

Luego añadiendo detrás los suficientes espacios como para que la cadena sea múltiplo de 64 (en este caso no es 65 porque se añadirá automáticamente el fin de línea):

Ciframos esta cadena de caracteres y nos la llevamos al ‘Decoder’. Allí primero decodificaremos de URL y luego de Base64. Luego borraremos las 2 primeras filas (32 huecos) con Click derecho-> Delete selected bytes. Volveremos a codificar a Base 64 y a URL:

Nota: Ahora descifrando la cadena podremos comprobar que es correcta:

Encenderemos el proxy e iniciaremos sesión. Cuando veamos la cookie de ‘stay-logged-in’ la cambiaremos por la nueva generada y borraremos la de sesión:

Al apagar el ‘Proxy’ se completará el inicio de sesión y nos aparecerá en el menú la opción de ‘Admin panel’, donde podremos borrar al usuario ‘carlos’ y acabar este laboratorio:

Deja una respuesta

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