> 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

🧠Dificultad: Fácil | 🔓17/07/2026

## 🕵️ 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FxxkZib1yZdb8FPbaRHW0%2Fimage.png?alt=media&amp;token=594ee547-3c3a-413b-a98a-df3ad13713cd" 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FiPjBigLYfV70V5EB0i1H%2Fimage.png?alt=media&amp;token=f290d5b7-8313-40a8-88c8-d3d0d640571d" 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FL1CN0EzbKXlVrWsWsv5d%2Fimage.png?alt=media&amp;token=7b79b226-3260-4447-9591-c2897c488ca2" 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2Fxb2PmLIDxmyPLdbyEhao%2Fimage.png?alt=media&amp;token=a96a6ef7-59ad-4021-9ef4-97a3f78d13ed" 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2Fi9XpC0HyKOP2tMQA8Yal%2Fimage.png?alt=media&amp;token=0fe67011-0124-4336-9236-9bf4816bc119" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FLCHHUbqmYFHdVeWkzpdl%2Fimage.png?alt=media&amp;token=6f4d89a3-0eef-412a-9366-a982d166b959" 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FyqmH8hiYLtBPSXn2JmzM%2Fimage.png?alt=media&amp;token=332440ad-16f4-4efc-932d-df57cfe26fe9" alt=""><figcaption></figcaption></figure>

## 💥 Escalada de privilegios

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

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FWN5n0klDlxCRDDPP5Fdg%2Fimage.png?alt=media&amp;token=82475d7c-6f5d-4700-a02c-a2fc7e423027" 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FWG0hjYH37uOicgfSL8VX%2Fimage.png?alt=media&amp;token=06e81a2b-d2c0-46a7-a27e-d10d634b1f86" 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FAgWjzDWhn7IUINiBvofU%2Fimage.png?alt=media&amp;token=e64f41fe-9680-43a0-8625-67cb5da0cb26" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FNd8IbGILJwmnlN0sL8NM%2Fimage.png?alt=media&amp;token=1084a811-4afd-49af-bd8b-3ca32784bab2" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FB5EP9xESszBZ6xfPVCw1%2Fimage.png?alt=media&amp;token=02e5692c-639f-4020-b613-02576cb18059" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FwY7FwUSC7RNoz96gvicS%2Fimage.png?alt=media&amp;token=4264d1a5-26cb-48d2-ae49-b4477ce55ade" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2Fk1TzoZp9Exipyyn5x65x%2Fimage.png?alt=media&amp;token=ca0ad24a-0f73-47a2-996f-8f5cf113d26f" 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FCIOA59NBVZ8DS6BZCW3H%2Fimage.png?alt=media&amp;token=c0b33c6e-a43b-42cd-b6e1-c07fb2a5bcbf" 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="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FslC2miM6cccl7zvR78U7%2Fimage.png?alt=media&amp;token=23080dff-3031-4941-ad29-974a9635c2e8" alt=""><figcaption></figcaption></figure>
