Titanic

20250829164435.png

Titanic es una máquina Linux de fácil dificultad que cuenta con un servidor Apache escuchando en el puerto 80. El sitio web en el puerto 80 anuncia las comodidades del legendario barco Titanic y permite a los usuarios reservar viajes. También se identifica un segundo vHost tras el fuzzing, que apunta a un servidor Gitea. El servidor Gitea permite registros, y la exploración de los repositorios disponibles revela alguna información interesante, incluyendo la ubicación de una carpeta de datos montada Gitea, que se ejecuta a través de un contenedor Docker. Volviendo al sitio web original, la funcionalidad de reserva es vulnerable a un exploit de lectura arbitraria de archivos, y combinando el directorio identificado de Gitea, es posible descargar la base de datos SQLite de Gitea localmente. Dicha base de datos contiene credenciales hash para el usuario developer, que pueden ser crackeadas. Las credenciales se pueden utilizar para iniciar sesión en el sistema remoto a través de SSH. La enumeración del sistema de archivos revela que un script en el directorio /opt/scripts se ejecuta cada minuto. Este script ejecuta el binario magick para recopilar información sobre imágenes específicas. Se ha descubierto que esta versión de magick es vulnerable a un exploit de ejecución arbitraria de código asignado CVE-2024-41817arrow-up-right. La explotación exitosa de esta vulnerabilidad resulta en la elevación de privilegios al usuario root.

Reconocimiento

Iniciamos con el reconocimiento de puertos abiertos de la maquina victima

Luego de tener los puertos abiertos procederemos a enumerar los servicios que corren en dichos puertos

observamos que en el servicio web tenemos un dominio, por lo que lo agregaremos a /etc/hosts. Luego de agregarlo observamos el siguiente sitio web.

20250829164934.png

Enumerando los subdominios del sitio web, encontraremos que existe uno dev

Agregando al nuestro /etc/hosts y revisando desde nuestro navegador encontraremos con el servicio de gitea.

20250829170956.png

Ahora podemos registrarnos en http://dev.titanic.htb/user/sign_up

20250829171712.png

Explotación

una vez registrado, nos encontraremos con dos proyecto del usuario developer.

20250829171858.png
20250829171635.png

En una de ellas encontré credenciales para la base de datos.

Use estas credenciales para intentar logearme como el usuario developer por ssh pero no hubo resultado. Por lo que seguí enumerando un me encontré con otros posibles usuarios como jack y rose pero con ninguno pude ingresar.

20250829172204.png

LFI

En el proyecto flask app encontré el código de la aplicación, por lo que procedí a revisarlo

En esta parte del código podemos observar que al buscar y darnos el archivo no hace una validación y podemos leer un archivo que exista en la maquina atacante

Desde burpsuite podemos realizar la request para leer el archivo /etc/passwd y efectivamente la podemos leer.

20250829180130.png

Revisando la documentación de Giteaarrow-up-right encontramos que existe una ruta con credenciales o rutas sensibles custom/conf/app.ini

20250829223415.png

En el repositorio vemos que tenemos una ruta donde esta desplegado la app /home/developer/gitea/data. Teniendo en cuenta la documentación debería existir un archivo en /home/developer/gitea/data/[custom]/conf/app.ini, por lo que realizaremos fuerza bruta para poder encontrar el directorio.

Encontramos un directorio git en el cual iniciarnos a hacer fuerza bruta para seguir buscando directorios.

Aquí encontramos otro directorio .ssh y también seguiremos enumerando los directorios, luego encontraremos un archivo llamado evironment.

20250829223558.png

En este archivo encontraremos la ruta que custom que es /data/gitea y podemos leer el archivo sensible. /download?ticket=/home/developer/gitea/data/gitea/conf/app.ini

20250829223741.png

En este archivo encontraremos un .db en la ruta /data/gitea/gitea.db donde encontraremos credenciales.

shell - Developer

Para descargar el archivo .db debemos ir a la ruta: http://titanic.htb/download?ticket=/home/developer/gitea/data/gitea/gitea.db

En este archivo encontraremos credenciales para el usuario administrator, developer y el usuario que creamos.

Luego de investigar un poco sobre el hash y como crackearla, encontré una maquina similar para poder crackear el hash.

Revisamos el articulo y encontraremos un script que nos ayudara a crackear la contraseña.

Para nuestro caso tendremos:

  • Hash: e531d398946137baea70ed6a680a54385ecff131309c0bd8f225f284406b7cbc8efc5dbef30bf1682619263444ea594cfb56

  • Salt: 8bf3e3452b78544f8bee9400d6936d34

Así reemplazaremos el Hash y Salt en el script

Ejecutamos el script:

20250830001823.png

Nuestra contraseña para developer :

Usando esta contraseña podemos iniciar sesión por ssh.

20250830001940.png

shell - root

Enumerando el servidor encontraremos un archivo identify_images.sh el que usa magick

20250830003912.png

Al ver la versión de magick podemos observar que este tiene la versión 7.1.1-35

20250830003929.png

ImageMagick 7.1.1-35

Luego de investigar encontraremos que esta aplicación en esta versión tiene una vulnerabilidad.

El anterior script nos permitirá escalar privilegios como root, ejecutando el siguiente comando para copilar nuestro exploit.

20250830005515.png

Luego de esperar un tiempo observamos que nuestro exploit fue ejecutado, y tenemos nuestro binario con permisos suid y así poder escalar a root.

20250830005604.png

Last updated