Soulmate WriteUp Hack The Box
Introducción
Soulmate es una máquina sencilla. Tendremos que acceder a una página web de citas, descubrir un subdominio para compartir archivos, utilizar un exploit para crear un usuario con privilegios de administrador, cambiar la contraseña de un usuario y acceder a él para establecer una conexión remota.
Una vez dentro, buscaremos en la máquina archivos que contengan la contraseña del usuario de SSH y escalaremos privilegios utilizando ssh_runner, ya que permite ejecutar comandos con permisos de administrador.
Reconocimiento
Comenzaremos nuestra etapa de reconocimiento con un nmap simple y encontraremos el puerto 22, que no nos interesa por el momento, ya que no tenemos ningún usuario ni contraseña. También encontraremos el puerto 80, al que podremos acceder desde el navegador.
Al añadir el dominio a nuestro /etc/hosts e intentar acceder al puerto 80, veremos la siguiente página.
No tiene mucha información, así que crearemos una cuenta para ver si podemos escalar a partir de ella.
Una vez dentro, no encontramos botones o funciones nuevas, así que realizaremos fuzzing para descubrir directorios o subdominios ocultos.
Utilizando la herramienta ffuf, enumeraremos los directorios de la página web, pero tampoco encontramos nada interesante al que podamos acceder.
Intentémoslo con subdominios. Al hacerlo de esta forma, descubriremos que existe ftp.soulmate.htb.
Cuando accedemos a este subdominio, veremos que utiliza la aplicación CrushFTP.
Explotación
Al analizar el HTML de la página, encontraremos que la aplicación usa la versión 11.W.657, que es vulnerable a este payload
Este payload nos permite crear un nuevo usuario administrador, así que crearemos uno para acceder sin las credenciales de administrador.
Una vez dentro, encontraremos un FTP para compartir archivos y también accederemos al panel de administrador.
En el panel de administrador, encontraremos varias secciones, pero nos centraremos en la sección “User Manager”. Allí estarán todos los usuarios creados en el sistema. Lo más interesante es que podremos ver los archivos que tienen guardados los usuarios. En este caso, el usuario ben tiene una carpeta llamada “webProd”, que sugiere que allí se almacena toda la página web que hemos visto antes.
Como somos administradores, podemos cambiar la contraseña del usuario ben. Nos copiaremos su nueva contraseña e intentaremos acceder con ella en el sistema.
Una vez dentro, podemos acceder a la carpeta de la página web en producción y añadir archivos.
Dentro de la raíz de la web, añadiremos un script para que, al ejecutarlo desde el navegador, podamos recibir una conexión remota.
Preparamos nuestro netcat y ejecutaremos el script desde el navegador. Ahora hemos escalado como el usuario www-data.
Si realizamos un reconocimiento a todos los archivos de la máquina, encontraremos un login de Erlang. Si abrimos los scripts de configuración, encontraremos las credenciales del usuario ben para el SSH. Además, podemos ver que hay un ssh_runner dentro del sistema por el puerto 2222.
Para investigar esa parte de la máquina, primero tendremos que acceder al SSH de la máquina como el usuario ben y obtener la primera flag.
Escalada de privilegios
Ya estamos dentro, así que investiguemos ese puerto oculto. Con este comando, listaremos todos los puertos que se están utilizando en la máquina, y el puerto 2222 está funcionando con el ssh_runner.
Como hemos visto en el script anterior, tenemos las credenciales para acceder, así que entraremos como el usuario ben.
La aplicación ssh_runner nos permite ejecutar comandos desde el sistema, así que podemos obtener la flag desde aquí utilizando el comando os:cmd(cat /root/flag.txt), o de la forma que se muestra en la siguiente imagen, que creo que es la forma intencionada: creando una conexión remota que nos permita acceder como el usuario root.
Al ejecutar el comando, deberíamos poder ver el contenido de la flag en la terminal. Esto nos permitirá confirmar que hemos escalado correctamente los privilegios y que ahora tenemos acceso completo al sistema.
Conclusión
La identificación de la aplicación CrushFTP y su vulnerabilidad nos permitió crear un usuario administrador, lo que facilitó el acceso a información sensible y la posibilidad de manipular archivos en el servidor. Además, el uso de herramientas como Ffuf y ssh_runner ha demostrado ser esencial para descubrir directorios ocultos y ejecutar comandos con privilegios elevados.