> For the complete documentation index, see [llms.txt](https://propus.gitbook.io/hackbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://propus.gitbook.io/hackbook/writeups/dockerlabs/whoiam.md).

# 🟩 Whoiam

## 🕵️ Reconocimiento

Comenzamos con un escaneo de puertos con `nmap`:

```bash
nmap -sC -sV -Pn $IPTARGET | tee nmap
```

<figure><img src="/files/9d8AFDnWpNWdiFj7LmH0" alt=""><figcaption></figcaption></figure>

Vemos que solo está abierto el puerto 80 con un WordPress. Hacemos un escaneo de directorios con `ffuf`:

{% code overflow="wrap" %}

```bash
ffuf -w /usr/share/wordlists/SecLists-2025.2/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://$IPTARGET/FUZZ" -e .html,.php,.txt,.xml,.js
```

{% endcode %}

<figure><img src="/files/uuzvUEih77H3Uj0dWlsQ" alt=""><figcaption></figcaption></figure>

Vemos un directorio que nos llama la atención: `/backups`.&#x20;

<figure><img src="/files/mO0PYGkVAKdACQakARUR" alt=""><figcaption></figcaption></figure>

Descargamos el zip y lo extraemos en nuestra máquina. Vemos que contiene un fichero con credenciales.

<figure><img src="/files/dOjyjM9rfijezEHUtY1q" alt=""><figcaption></figcaption></figure>

Probamos estas credenciales en el panel de WordPress y obtenemos acceso al panel de administrador.

<figure><img src="/files/TWNJCW7UVcmloJDZ1A9Q" alt=""><figcaption></figcaption></figure>

Si echamos un vistazo a la versión de los plugins, encontramos un plugin que es vulnerable (`Modern Events Calendar 5.16.2`):

<figure><img src="/files/a6h0hHhY5IcEm96dxzGk" alt=""><figcaption></figcaption></figure>

Vemos un RCE que necesita autenticación (la tenemos).

## 🚪 Ganando acceso

Configuramos metasploit para usar el exploit.

<figure><img src="/files/fAq0vKZXnI4HKlPTH3Sk" alt=""><figcaption></figcaption></figure>

Una vez tenemos todo configurado, conseguimos una sesión de meterpreter y abrimos una shell.

<figure><img src="/files/Y0BxkwcfKI9EwjjTlOrz" alt=""><figcaption></figcaption></figure>

## 💥 Escalada de privilegios

Una vez dentro de la máquina, vemos los permisos que tenemos con sudo con el usuario `www-data`:

<figure><img src="/files/geUiPhRtgS5peeHbQg0u" alt=""><figcaption></figcaption></figure>

Podemos usar el binario `/usr/bin/find` como `rafa` sin necesidad de contraseña para conseguir una shell con el parámetro `-exec`:

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

<figure><img src="/files/bfq32aDv95Du7cUwVvcn" alt=""><figcaption></figcaption></figure>

Como `rafa` volvemos a ver los permisos con `sudo`:

<figure><img src="/files/XcjOUm8d6sPxhWIQV9dw" alt=""><figcaption></figcaption></figure>

Tenemos permisos para ejecutar `/usr/sbin/debugfs` como `ruben` sin contraseña. En [gtfobins](https://gtfobins.org/gtfobins) vemos un exploit que podemos usar para conseguir una shell.

<figure><img src="/files/hsEPXuBrcJQADYp279Ub" alt=""><figcaption></figcaption></figure>

De nuevo, vemos los permisos que tenemos con `ruben`. Podemos ejecutar `/bin/bash /opt/penguin.sh` como `root` sin necesidad de contraseña. El script no lo podemos modificar porque no tenemos permisos de escritura en él.

<figure><img src="/files/n2PAgfHiAdKDOZJ3Aejj" alt=""><figcaption></figcaption></figure>

Si introducimos como variable `a[$(/bin/bash >&2 1>&2)]`, lo que va a hacer el intérprete es intentar calcular la dirección de un array (el array `a[]`). Para ello, va a evaluar lo que hay dentro de la expresión `$()`, que corresponde a un bash.

<figure><img src="/files/TDipe8K66BwhmDGwN4N8" alt=""><figcaption></figcaption></figure>
