Titanic WriteUp Hack The Box
Introducción
Hoy analizaremos la máquina Titanic de Hack The Box, que es una máquina fácil con sistema operativo Linux. En la fase de reconocimiento, identificaremos los puertos 22 (SSH) y 80 (HTTP). Posteriormente, realizaremos un path traversal en el directorio /download, lo que nos permitirá acceder a archivos sensibles, como por ejemplo /etc/passwd. Más adelante, descubriremos que hay una instancia de Gitea desplegada en un subdominio de la máquina, desde donde podremos extraer el archivo de configuración de Gitea, que nos llevará a una base de datos SQLite con los hashes de los usuarios. Utilizando hashcat, lograremos descifrar la contraseña del usuario “developer” y accederemos a través de SSH. Para el escalado de privilegios, encontraremos un proceso de ImageMagick ejecutándose como root. Finalmente, inyectaremos una librería maliciosa para obtener la flag de root.
Reconocimiento
Usando nmap, detectaremos dos puertos abiertos: SSH y HTTP.
El puerto 80 nos redirige a titanic.htb. Utilizaré ffuf para buscar subdominios, y solo encontraremos el subdominio dev.titanic.htb.
Por lo tanto, añadiremos estos dos dominios al archivo /etc/hosts.
titanic.htb
Al acceder al puerto 80 de la máquina, observaremos que se trata de una compañía de cruceros.
Ninguno de los enlaces de la página nos lleva a algún sitio útil, pero el botón de “Book Now” hace que aparezca una encuesta.
Si completamos la encuesta y pulsamos el botón de “Submit”, se nos devolverá un archivo JSON.
Utilizando la extensión de navegador Wappalyzer, podremos identificar las tecnologías que están funcionando en el sitio web.
dev.titanic.htb
Al acceder, veremos que tiene instalado Gitea.
Explorando, encontraremos dos repositorios públicos: docker-config y flask-app.
docker-config
En el repositorio, podremos encontrar una contraseña de la base de datos en el código sin cifrar.
flask-app
Este repositorio contiene el código fuente de titanic.htb.
Lo interesante de este repositorio es que nos muestra el funcionamiento del dominio. El directorio /book realiza una petición POST, guarda los datos en un archivo y redirige a /download utilizando ese nombre.
El directorio /download pasa una constante TICKETS_DIR (que se establece en “tickets” al principio del archivo) y el parámetro de entrada del usuario a os.path.join, luego verifica si el archivo resultante existe y lo envía.
Explotación
Cuando hacemos una petición a /book, nos redirige a /download. Este directorio utiliza el parámetro ticket para devolvernos el archivo JSON. Como he resuelto varias máquinas, sé que este tipo de parámetros puede llevar a una vulnerabilidad de lectura de archivos.
Como se puede observar en la siguiente imagen, si cambiamos el valor por un archivo interno de la máquina, podremos leer el archivo /etc/passwd. Poder acceder a este archivo es peligroso, ya que nos permite listar todos los usuarios que existen en la máquina.
Sabiendo esto y revisando el código fuente que encontramos anteriormente, podremos listar la base de datos.
Ahora simplemente podemos descargarla utilizando curl y analizarla después con la herramienta sqlite3.
Si listamos todos los datos de la tabla user, obtendremos los hashes de los usuarios.
Con hashcat, podremos crackear los hashes obtenidos anteriormente para acceder al SSH con el siguiente comando:
hashcat basedatos.db /usr/share/wordlists/rockyou.txt --user
![[23.png]]
Escalado de privilegios
Una vez conectados por SSH a la máquina como “developer”, encontraremos en su directorio la primera flag.
Realizando un reconocimiento básico de la máquina con los privilegios del usuario “developer”, encontraremos un script llamado identify_images.sh. Con esto, descubriremos que la herramienta ImageMagick está instalada en la máquina. ImageMagick es un programa que permite editar imágenes digitales.
La versión instalada es 7.1.1-35, que presenta vulnerabilidades. Podemos buscar una prueba de concepto para escalar privilegios.
He encontrado esta prueba de concepto con una búsqueda rápida.
gcc -x c -shared -fPIC -o ./libxcb.so.1 - << EOF
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void init(){
system("id");
exit(0);
}
EOF
La modificamos para que nos proporcione una shell con los privilegios de administrador.
Si la ejecutamos, generará un archivo que nos otorgará la shell con los privilegios de administrador.
Finalmente, al acceder como administrador, podremos obtener la última flag en el directorio /root.
¿Como se puede securizar?
- Implementar controles de acceso para evitar que archivos sensibles como
/etc/passwdsean accesibles a través de la web. - Asegurarse de que todos los parámetros de entrada, como el ticket en el directorio
/download, sean validados y sanitizados para prevenir ataques de path traversal. - Mantener ImageMagick y otros paquetes de software actualizados a sus versiones más recientes para mitigar vulnerabilidades conocidas.
- Implementar políticas de contraseñas que requieran el uso de contraseñas fuertes y únicas para cada usuario.
Conclusión
La máquina Titanic de Hack The Box permite explorar vulnerabilidades a través de técnicas como el path traversal y la explotación de ImageMagick para escalar privilegios. Este ejercicio enseña la importancia de validar entradas, proteger archivos sensibles, mantener el software actualizado y deshabilitar funciones innecesarias.
Espero que os haya gustado la publicación, nos vemos en la siguiente!