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

# 🟩 Elevator

## 🕵️ Reconocimiento

Comenzamos con un escaneo de puertos con `nmap`:

{% code overflow="wrap" %}

```bash
nmap -sC -sV -sS -Pn 172.17.0.2
```

{% endcode %}

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

Solo se encuentra abierto el puerto correspondiente al servicio web (HTTP 80).

Realizamos 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/428ivMPUAukBxIOnevvJ" alt=""><figcaption></figcaption></figure>

Realizamos un escaneo de directorios recursivo para comprobar si encontramos información adicional (utilizando `-recursion`):

{% code overflow="wrap" %}

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

{% endcode %}

<figure><img src="/files/12kDq5FDruY7tvIsCiiP" alt=""><figcaption></figcaption></figure>

En `themes/archivo.html` encontramos un panel donde poder subir archivos. Se puede comprobar si la comprobación de la extensión del fichero (solo se permiten ficheros `.jpg`) es vulnerable.

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

Podemos cambiar la extensión del archivo por `.php.jpg` y añadir en `Content-Type: image/jpg` para hacer parecer que es un fichero `jpg`, cuando realmente es una reverse shell en `php`.

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

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

El archivo se ha subido correctamente.

## 🚪 Ganando acceso

Nos ponemos a la escucha con `netcat` y ejecutamos la reverse shell que hemos subido:

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

## 💥 Escalada de privilegios

Comprobamos los permisos con `sudo` del usuario `www-data`:

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

Podemos ejecutar el binario `/usr/bin/env` como `daphne` sin necesidad de introducir la contraseña. Podemos explotar esta configuración utilizando env para crear un entorno con `/bin/sh` (encontrado en [gtfobins](https://gtfobins.org/)).

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

A partir de aquí el proceso es igual: mirar los privilegios que tenemos como sudoer y explotar la configuración. En este caso, ejecutar el binario `ash` como `vilma`.

<figure><img src="/files/1XMPwZjWvLgQKSU9FmH5" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/77nMdOt54O4iBPr8ePKF" alt=""><figcaption></figcaption></figure>

Ahora, el binario `ruby` como `shaggy`:

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

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

Después, el binario `lua` como `fred`:

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

Una vez conseguida la shell como el usuario `fred`, podemos obtener acceso a otra shell como `scooby` utilizando la configuración de `sudo` para el binario `gcc`:

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

Y, por último, para llegar a `root` podemos ejecutar desde el usuario `scooby` el binario `sudo` como `root`. Importante poner `sudo` dos veces.

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