2FA broken logic

SUMMARY

Debemos autenticarnos con la cuenta del usuario carlos a traves del mecanismo 2FA de un sitio web. Además, el enunciado del laboratorio nos provee las credenciales del usuario wiener. Primero, analice la lógica utilizada por el 2FA. Para ello capture la respuesta HTTP de la solicitud POST realizada en la autenticación del login con las credenciales de wiener, dándome cuenta de que el servidor web establecía dos cookies de sesión donde uno de ellos tomaba el valor del username por lo que cambia su valor a carlos. Luego, debido a que la respuesta tenía un código de estado HTTP igual a 302, fui redirigido a otra página web donde debía insertar el código de verificación de 4 dígitos. Luego, debido a que no había una medida preventiva que evitara o ralentizara el ataque de fuerza bruta sobre el código de verificación, es que realice un script en Python para automatizar el ataque de fuerza bruta sobre el código de verificación.

RESOLUCION

En este laboratorio tenemos que autenticarnos exitosamente en un login de un sitio web con el usuario carlos. Para ello la plataforma de PortSwigger (https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-account-lock ) nos afirma que se ha implementado el mecanismo de autenticación de dos factores o 2FA. Además, nos proveen de dos wordlists que contienen una lista de usernames y passwords. Ademas, nos proveen las credenciales de un usuario valido. ( wiener: peter)

Podemos observar que luego de autenticarnos con las credenciales de carlos, nos redirigen a una pagina web donde nos solicitan ingresar un codigo de verificacion de 4 digitos. Ademas, nos damos cuenta de que no se han implemetando ningun medida de seguridad para evitar el ataque de fuerza bruta sobre el codigo de verificacion debido a que hemos realizados varios intentos fallidos, pero no hemos obtenido ningun mensaje de restriccion, ni bloqueado nuestra dirrecion IP.

Luego, si analizamos la respuesta HTTP del servidor web, encontraremos la razon del porque nos redirige a otra pagina web, esto es debido a que el codigo de estado HTTP de la respuesta HTTP es 302 y la cabecera Location contiene la ruta hacia donde seremos redirigido. Ademas, otra cosa interesante es que el servidor web establece dos cookies de sesion en la respuesta HTTP, donde una de ellas contiene el valor del username.

Ahora crearemos un script en Python que capturara la respuesta HTTP con el fin de modifcar el username de una de las cookies de sesion. Luego, realizara fuerza bruta sobre el codigo de verificacion. Para ello crearemos un wordlist con todos los numeros de 4 cifras.

Podemos observar que el script logro obtener el codigo de verificación de 4 dígitos de Carlos.

De esta manera logramos resolver el laboratorio. Además, los scripts utilizados en el desarrollo del laboratorio lo puedes encontrar en mi repositorio Github.