Titanic

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-41817. 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.

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.

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

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


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.

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.

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

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.

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

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:
e531d398946137baea70ed6a680a54385ecff131309c0bd8f225f284406b7cbc8efc5dbef30bf1682619263444ea594cfb56Salt:
8bf3e3452b78544f8bee9400d6936d34
Así reemplazaremos el Hash y Salt en el script
Ejecutamos el script:

Nuestra contraseña para developer :
Usando esta contraseña podemos iniciar sesión por ssh.

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

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

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.

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

Last updated