Broken brute-force protection, IP block
SUMMARY
Debemos encontrar el password del usuario carlos para poder autenticarnos en el login del sitio web. Para ello, primero probar diversos escenarios para observar los mensajes de error emitidos en la respuesta HTML, llegando a observar que el mecanismo de autenticacion no sigue la buena practica de emitir mensajes de error genericos. Luego, me doy cuenta que hay un limite de intento fallidos igual 2. Despues de exceder este numero, no me permite autenticarme en el login por un minuto.Ademas, no es posible omitir esta restriccion con la cabecera X-Forwarded-For. Luego, cree un script en Python teniendo en cuenta las condiciones del mecanismo de autenticaion, y logre encontrar la contraseña de carlos.
RESOLUCION
En este laboratorio tenemos que encontrar la contraseña del usuario carlos para poder autenticarnos en el login de un sitio web. Para ello la plataforma de PortSwigger (Broken brute-force protection, IP block) nos proveen las credenciales de un usuario (wiener:peter). Además, nos proveen de dos wordlists que contienen una lista de usernames y passwords.
Podemos observar que el mecanismo de autenticacion implementado en este login no siguie la buena practica de que genere mensajes de error genericos en sus respuestas HTTP en cualquier escaneario, ya sea el caso de que ingresemos un username valido con un password invalido, o un username invalido. Ademas, podemos observar que el mecanismo de autenticacion del login, solo admite dos intentos fallidos, despues de eso nos aparece un mensaje que nos dice, que no podemos intentar autenticarnos por durante un minuto.
Ahora intentaremos omitir esta restriccion, añadiendo la cabecera X-Forwarded-For en nuestra solicitud HTTP, y dandole una dirrecion IP diferente a la nuestra con el fin de que el servidor web lo interprete como otro sistema.
Podemos observar que en la respuesta HTTP del servidor web sigue apareciendo el mensaje con la restriccion. Por lo tanto, el servidor web no admite la cabecera X-Forwarded-For.
Ahora teniendo en cuenta toda las condiciones encontradas anteriormente, crearemos un script en Python para realizar la enumeracion de usernames.
Podemos observar que el script logro obtener la contraseña correcta de Carlos.
De esta manera logramos resolver el laboratorio. Además, el script, utilizado en el desarrollo de este laboratorio, lo puedes encontrar en mi repositorio Github.