---
# System prepended metadata

title: OWASP CHALLENGE BRUTEFORCE

---

# OWASP CHALLENGE BRUTEFORCE 👾

## Escenario
*Al iniciar el reto nos encontramos con la siguiente descripción:*
> As a security specialist for ComTech, you have been tasked with seeking out all the vulnerabilities in company-owned assets. ComTech recently launched a new internal website. While reviewing its code, you notice that no security controls have been implemented to prevent excessive requests to the web application.
> In this challenge, you will use a **brute force attack** to gain access to an **admin** account.

> ComTech's new website is hosted at login.lab. Use a brute force attack to gain access to the admin account. Once you know the admin user's credentials, you must log in to that account.

## Reconocimiento

Lo primero que hacemos es entrar en el dominio proporcionado **login.htb** y vemos lo siguiente:
![Screenshot 2023-12-13 125809](https://hackmd.io/_uploads/rkpL0Ww8T.png)

Tenemos un panel de autenticación en el cual se nos pide los clásicos *username y password*. Ya que el enunciado nos dice que no hay ninguna medida preventiva para bloquear las peticiones masivas, se nos podría ocurrir intentar hacer un ataque de fuerza bruta usando el usuario **admin** y un diccionario común como puede ser el **rockyou**.

Sin embargo, antes de ponernos a probar cosas, es muy importante descubrir todas las funcionalidades de la web. Tenemos un botón para registrar una nueva cuenta, por lo que vamos a intentar crear una para ver si podemos acceder a algún recurso:

![Screenshot 2023-12-13 130647](https://hackmd.io/_uploads/BJnUgMw86.png)

Podemos ver que se nos pide:
* Username
* Email
* Password
* Confirm Password

Donde en la contraseña se nos pide que al menos sea de 12 caracteres y contenga:
* Mayúscula
* Minúscula
* Carácter especial
* Símbolo

Una vez creada una cuenta, podemos ver lo siguiente:

![Screenshot 2023-12-13 131029](https://hackmd.io/_uploads/SkSNbfv8T.png)

### 

Una vez logueados, podemos ver un mensaje de bienvenida y un botón de *"Solve the challenge!"* donde al pulsarlo nos avisa de que no tenemos permisos suficientes. Por lo que se puede intuir que una vez que entremos como el usuario administrador se nos proporcionará algún tipo de **flag**.

Otra de las funcionalidades que tenemos en la web es la de recuperar la contraseña. Una vez entramos, podemos ver lo siguiente:

![Screenshot 2023-12-13 131555](https://hackmd.io/_uploads/Hk6dzMw8a.png)

Probamos a poner el usuario **admin** y pedimos el código de recuperación:

![Screenshot 2023-12-13 131803](https://hackmd.io/_uploads/Skh4QzvI6.png)

Esto tiene muy buena pinta, ya que podemos hacer todas las peticiones que queramos. Podemos probar a bruteforcear el PIN de 4 dígitos. Lo primero es ver el tipo de petición que hacemos, para ello vamos a probar con cualquier código y vamos a ver la petición en la ventana **Network**:

![Screenshot 2023-12-13 132251](https://hackmd.io/_uploads/Skz7VGwIT.png)
![Screenshot 2023-12-13 132327](https://hackmd.io/_uploads/B17SVGwIp.png)

Con esta información, podemos ver que la petición es del tipo **POST** y se hace contra http://login.lab:3000/check-recovery-code y como parámetros se pasan el username y el reset_token.

## Explotación

En este caso, no vamos a usar una herramienta típica de bruteforce como puede ser hydra. Para llevar a cabo la tarea, vamos a usar un FUZZER como **wfuzz**.

Este reto es muy simple, por lo que no hay que arrastrar ninguna cookie de sesión ni tampoco nos bloquean las peticiones asociadas a una IP con ningún firewall.

### Usando WFUZZ para bruteforcear el PIN

Haciendo un uso de 200 hilos y usando un payload del tipo range desde 0000-9999, le pasamos como data POST los parámetros mencionados y con la palabra FUZZ le decimos a la herramienta que nos sustituya el valor del rango en ese instante. Finalmente, le pasamos la dirección donde se valida el PIN.
> Hemos eliminado las respuestas con 26 caracteres que hacen referencia al error cuando el PIN no es correcto.
```
wfuzz --hh=26 -c -t 200 -z range,0000-9999 -d 'username=admin&reset_token=FUZZ' http://login.lab:3000/check-recovery-code
```
Ejecutamos la herramienta:

![Screenshot 2023-12-13 133707](https://hackmd.io/_uploads/rkEuPzwUT.png)

Como podemos ver, hemos tenido una respuesta exitosa (200) con el payload "6109". Vamos a comprobar si es válido introduciéndolo y ... voilà, ahora podemos cambiar la contraseña del usuario admin e iniciar sesión.

![Screenshot 2023-12-13 133840](https://hackmd.io/_uploads/HJOx_fvIp.png)

Una vez cambiada, podemos ver lo siguiente:

![Screenshot 2023-12-13 134122](https://hackmd.io/_uploads/HJzOuGv8a.png)

**¡Hemos completado el reto!**
