Chill Hack
Última actualización
Última actualización
¡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:
Comprobamos que la máquina está activa y tenemos acceso a ella ejecutando un ping:
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:
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:
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:
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:
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
:
Iniciamos nuestro servidor http con Python:
Con wget nos descargamos el archivo en el directorio /tmp
de la máquina víctima:
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:
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:
¡Y ahora sí! Nuestra reverse shell se ejecuta y estamos dentro:
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:
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:
Para lanzar una shell interactiva bajo el usuario apaar podemos hacerlo utilizando Python con el siguiente comando:
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.
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:
Con wget nos traemos la imagen a nuestra máquina de atacante:
Utilizamos steghide para extraer información oculta de la imagen:
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:
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:
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...
¡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:
📝 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 💬 Discord ⮞ https://discord.gg/E4AjK2XsFm
¡Gracias por llegar hasta aquí!