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

# 🟩 File

## 🕵️ Reconocimiento

Comenzamos con un escaneo de puertos con `nmap`:

{% code overflow="wrap" %}

```bash
nmap -sC -sV -Pn $IPTARGET -oN nmap.txt
```

{% endcode %}

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

Tenemos servicios FTP y HTTP en los puertos estándar. Realizamos un escaneo de directorios con `ffuf` sobre el servicio web:

{% 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/BiWguWZH3JgO6W4GvAR0" alt=""><figcaption></figcaption></figure>

Si accedemos al recurso `file_upload.php` en un navegador, vemos lo siguiente:

<div align="center"><figure><img src="/files/VAXBcrPgIxGBwJ6OnxNs" alt=""><figcaption></figcaption></figure></div>

Si accedemos al código HTML servido por esta página, vemos que el botón de subir archivo hace un POST al endpoint `subir_archivo.php`.

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

Solo con lo que hemos obtenido, pinta que los ficheros se almacenan en el directorio `/uploads` que hemos descubierto en el escaneo de directorios. Intentando subir un fichero `.php`, vemos que nos da un error al subir el archivo:

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

Probando extensiones con el intruder de burpsuite y la wordlist `extensions-most-common.fuzz.txt` de SecLists, vemos que podemos subir un fichero `.phar`:

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

Vemos el fichero que hemos subido en el fuzzing en el directorio `uploads`:

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

## 🚪 Ganando acceso

Ejecutamos el fichero `.phar` que hemos subido, ya que se trataba de una reverse shell en PHP y `.phar` es un formato de empaquetado de PHP, por lo que permitirá la ejecución del código que subimos.

Si nos ponemos a la escucha en nuestra máquina, obtenemos acceso a la máquina con el usuario `www-data`:

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

## 💥 Escalada de privilegios

Enumeramos los usuarios que contiene la máquina:

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

Como la máquina no tiene abierto el puerto SSH, podemos hacer fuerza bruta con su mediante un script que se encuentra en el siguiente [repositorio](https://github.com/carlospolop/su-bruteforce). Utilizamos también la wordlist que viene en el repositorio (`top12000.txt`).

Con el usuario `fernando`, tenemos un acierto con la contraseña `chocolate`:

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

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

Una vez dentro como `fernando`, vemos que en su directorio personal hay una imagen. Iniciamos un python server y nos la llevamos a nuestra máquina.

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

Con `stegseek` hacemos fuerza bruta para probar si contiene un fichero embebido con alguna contraseña.

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

Había un fichero embebido con la contraseña `secret`. El fichero embebido se llama `pass.txt`, y contiene un hash.

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

Con `hashid` vemos se trata de un hash SHA-1.

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

Utilizamos `hashcat` con `-m 100` que corresponde a SHA-1 y la wordlist `rockyou.txt`:

{% code overflow="wrap" %}

```bash
hashcat -m 100 cbfdac6008f9cab4083784cbd1874f76618d2a97 /usr/share/wordlists/rockyou.txt
```

{% endcode %}

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

Probamos esta contraseña con `mario`:

<figure><img src="/files/0Hy39hpwG1F2MTu6ZhKh" alt=""><figcaption></figcaption></figure>

Revisamos los permisos con `sudo -l` para el usuario `mario`:

<figure><img src="/files/3PKUQ98NWskgrWbaAFyu" alt=""><figcaption></figcaption></figure>

Podemos ejecutar el binario `/usr/bin/awk` como el usuario `julen` sin necesidad de introducir su contraseña. En [gtfobins](https://gtfobins.org/gtfobins/awk/) encontramos una forma de aprovechar esta configuración para obtener una shell como `julen`:

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

Ahora revisamos los permisos de sudo para `julen`. Podemos ejecutar `/usr/bin/env` como `iker` sin necesidad de introducir su contraseña. De nuevo, mirando en [gtfobins](https://gtfobins.org/gtfobins/env/) obtenemos una vía para atacar esta configuración y obtener acceso al usuario.

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

Ahora miramos los permisos con `sudo` para el usuario `iker`. Esta vez, tenemos permisos para ejecutar `/usr/bin/python3 /home/iker/geo_ip.py` como cualquier usuario (lo usaremos para `root`) sin necesidad de introducir contraseña.&#x20;

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

Vemos el script y observamos que utiliza la libreria `requests`. Podemos aprovecharnos de esto para hacer library hijacking.

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

Creamos nuestra librerira `requests.py` modificando el método utilizado en el script (`get`) para que ejecute `/bin/bash` y poder obtener una shell como `root`.

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

Ahora ejecutamos el script con `sudo` y obtenemos acceso al usuario `root`.

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