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

# 🟩 Library

🧠Dificultad: Fácil | 🔓13/10/2025

## 🕵️ Reconocimiento

Realizamos un escaneo de puertos con `nmap`:

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FscFfhKijg5eLuGjqiuPz%2FPasted%20image%2020251009160514.png?alt=media&amp;token=3ccf60cf-8aa5-4e74-81f8-30a8295f9d0d" alt=""><figcaption></figcaption></figure>

Vemos que están abiertos el puerto 22 (`ssh`) y 80 (`http`). Si accedemos al `/index.html`, vemos la página default de `apache`. Hacemos un fuzzing de directorios con `ffuf` para encontrar otras rutas interesantes:

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

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FC7qKZXSyTpcliIQUWT1s%2FPasted%20image%2020251013152033.png?alt=media&amp;token=12426bdf-55d7-4c48-b12d-eadc2bf50e2c" alt=""><figcaption></figcaption></figure>

Vemos la existencia de un `index.php`. En el navegador nos encontramos lo siguiente al acceder a dicha página:

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2F8104Ra58zi6STqJQ7nZh%2FPasted%20image%2020251013152220.png?alt=media&amp;token=41ad31fd-cc7b-499b-b4f3-bbf581834a91" alt=""><figcaption></figcaption></figure>

Nos encontramos con una cadena extraña. No es `base64`, ni ninguna otra codificación que se me haya ocurrido, por lo que puede ser una contraseña o un usuario para el `ssh`.&#x20;

## 🚪 Ganando acceso

Probamos con `hydra` y hacemos un ataque de fuerza bruta:

```bash
hydra -L /usr/share/wordlists/rockyou.txt -p "JIFGHDS87GYDFIGD" ssh://172.17.0.2
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FtGdiAXP07TEg4vU1VkXH%2FPasted%20image%2020251013153836.png?alt=media&amp;token=7e1d8472-c11b-4c3e-b7ff-7dfc38d738a6" alt=""><figcaption></figcaption></figure>

## 💥 Escalada de privilegios

Una vez dentro de la máquina, nos encontramos con un script curioso. Además, vemos que tenemos permisos para ejecutar ese script con `python` como cualquier usuario (`root` entre ellos).

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FEgiYkxfGxhQRUQ0N9Whf%2FPasted%20image%2020251013154603.png?alt=media&amp;token=7f961809-3d1f-4d0f-b7ae-6868d57d627d" alt=""><figcaption></figcaption></figure>

A partir de aquí, se me ocurrieron varias maneras de escalar privilegios en esta máquina.

## Ruta 1:

El script existente en `/opt/` lo que hace es copiar el fichero `/opt/script.py` a `/tmp/script_backup.py`. Si yo muevo este script a otra carpeta (o incluso lo elimino, pero lo necesito para explicar la siguiente ruta xd) y creo mi script malicioso en `/opt/script.py`, puedo ejecutarlo como `root`.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FBxh2FLTNNVTmuOlDCx9G%2FPasted%20image%2020251013160122.png?alt=media&amp;token=ae53d875-ece0-47b9-ab9f-5e691a970dbe" alt=""><figcaption></figcaption></figure>

El script original que había, lo he movido a la carpeta `/opt/hola`, y el script que he dejado en la carpeta `/opt/` nos abre una `shell`. Claro, si este script lo ejecutamos como `root`, nos abrirá una `shell` como `root`. Como tenemos permisos para ejecutar ese script en concreto como `root`, podemos escalar privilegios fácilmente.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FfGF2Gi3k3xZEU3tzrcJu%2FPasted%20image%2020251013160246.png?alt=media&amp;token=b18eb8a9-ada9-415c-84b5-4876807a26e5" alt=""><figcaption></figcaption></figure>

## Ruta 2:

La manera que creo que está diseñada para esta máquina (por el nombre te puedes hacer una idea) es hacer un `library hijacking`. El script utiliza la librería `shutil`, por lo que si creamos el archivo shutil.py detro de `/opt`, `python` va a usar este archivo antes de buscar en otras rutas.

Modificamos la función `copy` para que ejecute una `shell`. Después, ejecutamos con `sudo` el script.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FbZ7c6GaYa1byIVONcFbL%2FPasted%20image%2020251013161534.png?alt=media&amp;token=8424c4ba-f285-433d-8c9a-ff8e6c3dd7c1" alt=""><figcaption></figcaption></figure>
