CozyHosting
CozyHosting es una máquina Linux de nivel de dificultad fácil que cuenta con una aplicación Spring Boot. La aplicación tiene habilitado el punto final Actuator. Enumerar el punto final conduce al descubrimiento de la cookie de sesión de un usuario, lo que lleva al acceso autenticado al panel principal. La aplicación es vulnerable a la inyección de comandos, que se aprovecha para obtener un shell inverso en la máquina remota. Al enumerar el archivo JAR de la aplicación, se descubren las credenciales codificadas y se utilizan para iniciar sesión en la base de datos local. La base de datos contiene una contraseña en hash, que una vez descifrada se utiliza para iniciar sesión en la máquina como el usuario josh. El usuario puede ejecutar ssh como root, lo que se aprovecha para aumentar por completo los privilegios.

Reconnaissance
Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina CozyHosting. Este resultado lo almacenaremos en un archivo llamado allPorts.
A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.
Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentra expuesta una página web de Nginx y el servicio SSH.
Añadiremos en nuestro archivo /etc/hosts la siguiente entrada.
Web Enumeration
Al acceder a http://cozyhosting.htb, verificamos que se trata de una página en la cual a simple vista no logramos ver más páginas ni ningún tipo de información relevante.

Al realizar una enumeración de directorios y páginas, nos encontramos con el siguiente resultado.
Al intentar acceder a http://cozyhosting.htb/error, verificamos que nos aparece un mensaje de error peculiar.

Al buscar este mensaje de error por Internet, nos indica que se trata de Spring Boot. Por lo que podemos deducir que la página está basada en ese framework.

Information Leakage
Al verificar el siguiente sitio web http://cozyhosting.htb/actuator, nos encontramos con diferentes endpoints.
Revisando el contenido de http://cozyhosting.htb/actuator/sessions, verificamos que nos aparece lo que parece ser una cookie de sesión del usuario kanderson.
Buscando nuveamente directorios, nos encontramos con los directorios admin y login.
Al tratar de acceder a http://cozyhosting.htb/admin somos redirigidos a login.

Modificaremos nuestra cookie de sesión actual para indicar la que hemos encontrado del usuario kanderson. Probaremos de acceder nuevamente a http://cozyhosting.htb/admin

Verificamos que logramos acceder a un panel de administración que ofrece unos gráficos administrativos y un apartado para añadir hosts para analizarlos en el panel.

Initial Foothold
Command Injection on web panel
Interceptamos la petición con BurpSuite para verificar cómo funciona ese campo al añadir un nuevo host.
En la primera prueba realizada se indicaron los datos de nuestro equipo, por parte del servidor nos devolvió error de timed out.

Tratamos de ingresar localhost como host, pero se nos indicaba que había fallado la verificación de la clave. Esto nos hace pensar que por detrás probablemente el servidor lo que esté ejecutando es ssh -i [key] [username]@[hostname] para tratar de conectarse, por lo cual podríamos verificar si existen vulnerabilidades de inyección de comandos.

Probamos de inyectar código para ver si era vulnerable a Command Injection, pero el campo host parece ser que no era vulnerable.

Probamos de inyectar código en el campo de username y nos devolvió otro error distinto también.

Probamos de inyectar el comando -h y en la respuesta por parte del servidor, acabamos de confirmar por completo que lo que se está ejecutando por detrás por parte del servidor es el comando ssh mencionado anteriormente.

Tratamos de inyectar un comando con espacios, y se nos indica en la respuesta del servidor que no puede contener whitespaces.

Debido que no podemos utilizar espacios en blanco, podemos intentar utilizar ${IFS} como variable de entorno de Bash que se trata de un espacio.
La estructura de comando que ejecutará el servidor es la siguiente.
Para verificar si podemos ejecutar el comando, nos levantamos un servidor web con Python e inyectamos el código con el espacio a través de la variable indicada, verificamos que parece que se ha ejecutado debido que en nuestro servidor web hemos recibido una petición por GET.

Para tratar de conseguir una Reverse Shell, nos creamos un script en nuestro equipo para que la víctima ejecute el script a través del servidor web que levantamos para compartir este script.
Desde BurpSuite, enviaremos la siguiente inyección que lo que realizará es un cURL de nuestro script y lo ejecutará con una bash. Verificamos que logramos obtener acceso al equipo.

Otra de las maneras que nos encontramos, es a través de codificar el comando en base64.
En este caso, en un archivo llamado shell guardamos el contenido de la típica Reverse Shell, revisamos como sería el código codificado, en este caso nos mostraba carácteres como ==, lo cual posiblemente nos entraría en conflicto al no tratarse de un carácter común.
Por lo tanto, volvemos a editar el archivo añadiendo espacios en blanco en el comando, al verificar nuveamente el código en base64, verificamos que es una cadena de texto simple.
Desde BurpSuite, ejecutaremos la siguiente inyección, la cual ejecutará este comando en Base64, lo descodificará y el comando descodificado lo ejecutará a través de una bash.
Verificamos que logramos obtener acceso al equipo.

Initial Access
Analyzing a jar file (JADX-GUI)
Nos encontramos en el equipo como el usuario app. Verificamos los usuarios que disponen de bashy de los grupos a los cuales formamos parte. Al revisar los archivos que disponemos en el directori actual, nos encontramos con un archivo .jar.
Nos pondremos en escucha desde nuestra máquina atacante para recibir este archivo. Desde la máquina víctima, enviaremos el contenido a través del /dev/tcp.
Abriremos este nuevo archivo JAR a través de la herramienta de JADX-GUI en busca de información sensible en el código fuente.
Recordando que la página web utilizaba el framework de Spring Boot, intentamos buscar por Internet información sobre ficheros JAR de Spring Boot y nos encontramos sobre application.properties que debería contener información interesante.
Al analizar el binario, logramos visualizar credenciales de acceso a PostgreSQL.

Database Enumeration
Revisamos en la máquina víctima los puertos abiertos, y verificamos que el puerto de PostgreSQL se encontraba abierto internamente.
Accedeeremos al SQL a través de las credenciales obtenidas. Verificamos de la existencia de diferentes bases de datos, las cuales parece llamarnos más la atención la de cozyhosting.
Revisaremos las tablas de la base de datos mencionada, entre las tablas encontradas nos encontramos con una tabla users que disponía de usuarios y credenciales en formato hash.
Trataremos de crackear estos hashes obtenidos, verificamos que logramos obtener las credenciales en texto plano del usuario llamado admin.
Dado que únicamente josh era el usuario que disponía de bash, probamos de acceder con él para ver si esta contraseña se reutilizaba en este usuario. Logramos pivotar de usuario y verificar la flag de user.txt.
Privilege Escalation
Abusing sudoers privilege (ssh)
Revisando los permisos de sudoers que dispone el usuario josh, verificamos que puede ejecutar como root el binario de /usr/bin/ssh.
En GTFOBins nos encontramos con la siguiente página la cual nos menciona como aprovecharnos de este permiso enel binario de ssh. Ejecutamos el comando que se nos menciona, verificamos que nos convertimos en usuarioroot y logramos visualizar la flag de root.txt.
Última actualización
¿Te fue útil?
