Password brute-force via password change
SUMMARY
Debemos autenticarnos en el login de un sitio web siendo el usuario carlos. Luego, me di cuenta de que el sitio web tiene la funcionalidad Change Password. Además, su implementación consiste en ingresar la contraseña actual y dos veces la contraseña que se quiere cambiar. La vulnerabilidad de esta funcionalidad radica en que su formulario HTML cuenta con un campo escondido que toma el valor del username, pero el valor de este campo puede ser modificado al capturar la solicitud POST, y el sitio web no realiza una correcta validación del valor del campo al procesar la solicitud. Por lo que podemos realizar un ataque de fuerza bruta sobre el campo Current Password habiendo cambiado el valor del campo escondido a carlos. Además, una restricción que se había implementado es que, si ingresabas un valor incorrecto en el campo Current Password, se cerraba la sesión y no podías autenticarte por un minuto. Luego, cree un script en Python para automatizar el ataque, logrando encontrar la contraseña original de carlos, y modificarla a una de nuestra conveniencia.
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/other-mechanisms/lab-password-brute-force-via-password-change ) nos afirma que se ha implementado la funcionalidad Cambiar Contraseña. Además, nos proveen las credenciales de un usuario valido. (wiener: peter). Además, nos proveen un wordlist de posibles contraseñas.
Podemos observar que el formulario HTML, que le corresponde a la funcionalidad Change Passwrod, consta de 4 campos. Donde uno de los campos viene a ser oculto y toma el valor del username del usuario.
Lo mas probable es que el sitio web no realice una correcta validacion o verificacion del valor de este campo oculto al momento de procesar la soliicitud POST, por lo que podemos modificar su valor al username de carlos, y luego realizar un ataque de fuerza bruta sobre el campo current-password con el fin de encontrar la contraseña de la cuenta de carlos.
Ademas, otro detalle que debemos tener en cuenta es que si ingresamos una contraseña, que no le corresponde a la cuenta de carlos, en el campo current-password, se cierra automaticamente la sesion, por lo que tenemos que volver autenticarnos, pero si intentamos autenticarnos inmediatamente obtenemos un mensaje de error que nos notifica que no podemos autenticarnos por un minuto como se puede observar la siguiente imagen.
Ademas, el mensaje que obtenemos al lograr cambiar nuestra contraseña correctamente viene a ser el siguiente.
Ahora que conocemos todas las restricciones, construiremos un script en Python que nos ayude automatizar el ataque de fuerza bruta sobre el campo Current Password con el fin de encontrar la contraseña de carlos, y a la vez cambiar su contraseña a una de nuestra eleccion.
Podemos observar que el script en Python logro encontrar la contraseña original del usuario carlos. Ademas, logramos cambiar la contraseña de la cuenta de carlos a dina1.
De esta manera logramos resolver el laboratorio. El script utilizado en el desarrollo de este laboratorio lo puedes encontrar en mi repositorio Github.