Entrada

Authentication Lab 7

Authentication Lab 7

Skills

  • Username enumeration via account lock

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio es vulnerable a la enumeración de nombres de usuario. Utiliza bloqueo de cuentas, pero contiene un fallo lógico. Para resolver el laboratorio, debemos enumerar un nombre de usuario válido, realizar un ataque de fuerza bruta para obtener la contraseña de este usuario y luego acceder a la página de su cuenta. Tenemos a nuestra disposición un diccionario de usuarios Candidate usernames https://portswigger.net/web-security/authentication/auth-lab-usernames y el diccionario de contraseñas Candidate passwords https://portswigger.net/web-security/authentication/auth-lab-passwords


Resolución

Al acceder a la web nos sale esto

En el login de My account si introducimos varias veces un usuario válido con contraseña incorrecta nos bloqueará la cuenta, de esta forma podemos validar si el usuario existe

Con este script crearemos un nuevo diccionario a partir del diccionario Candidate usernames https://portswigger.net/web-security/authentication/auth-lab-usernames el cual tenga nombres de usuarios repetidos 5 veces

1
2
3
4
5
6
7
8
9
10
11
12
13
input_path = "usernames.txt"
output_path = "modified_usernames.txt"

with open(input_path, "r") as input_file:
    words = input_file.readlines()

result = ""
for word in words:
    word = word.strip()
    result += f"{word}\n" + (f"{word}\n" * 4)

with open(output_path, "w") as output_file:
    output_file.write(result)

El siguiente paso es capturar la petición de inicio de sesión con Burpsuite, mandarla al Intruder y marcar el campo username para bruteforcearlo

Cargamos como payload el diccionario nuevo que hemos creado

En el apartado Resource pool creamos una nueva pool para enviar las peticiones de una en una, de esto modo nos aseguramos de que las peticiones vayan en orden

Hacemos el ataque, filtramos por Length y nos damos cuenta que el usuario info existe debido a que el servidor nos ha devuelto una repuesta con una longitud diferente

Ahora debemos hacer lo mismo para bruteforcear la contraseña

En la parte de Payloads pegamos las contraseñas del diccionario Candidate passwords https://portswigger.net/web-security/authentication/auth-lab-passwords

En Resource pool configuramos las peticiones para enviarlas de una en una

En Settings vamos a añadir una expresión regular para que nos reporte los errores

Hacemos el ataque y vemos que hay un petición con un Length diferente, lo cual quiere decir que no ha devuelto ningún error

El ataque de fuerza bruta funciona porque al loguearnos nosotros con un usuario existente y una contraseña inválida nos devuelve este mensaje Invalid username or password. o este otro You have made too many incorrect login attempts. Please try again in 1 minute(s)., sin embargo, aunque nosotros hayamos agotado el número de intentos para iniciar sesión si introducimos la contraseña adecuada, la web no nos devolverá ningún mensaje pero no nos dejará iniciar sesión hasta que pase el minuto. De esta forma podemos saber si nuestra contraseña es la correcta. Una vez ha pasado el minuto ya nos podemos loguear con las credenciales info:robert

Esta entrada está licenciada bajo CC BY 4.0 por el autor.