
Chemistry – Hack The Box
Bienvenidos a un nuevo writeup. En esta ocasión vamos a resolver la máquina Chemistry de Hack The Box. Este es un reto muy interesante que nos enseñará a investigar vulnerabilidades en el procesamiento de archivos de datos y a abusar de servicios internos mal configurados para lograr nuestro objetivo.
1. Reconocimiento
Como es habitual en nuestra metodología, iniciamos el proceso realizando un escaneo de puertos con Nmap para descubrir qué servicios tiene expuestos la máquina objetivo.
Los resultados nos muestran dos puertos abiertos:
- Puerto 22 (SSH): OpenSSH 8.2p1
- Puerto 5000 (HTTP): Werkzeug/3.0.3 Python/3.9.5
2. Análisis Web
De momento nos centramos en el puerto «5000«. Al acceder a través del navegador, nos encontramos con una aplicación web llamada «CIF Analyzer«, diseñada para interpretar y mostrar información sobre moléculas a partir de archivos CIF (Crystallographic Information Files).
Explorando la aplicación web, vemos que nos permite registrarnos y subir nuestros propios archivos «.cif«, además, nos da un modelo de cómo ha de ser la estructura.
Al subir el propio archivo de ejemplo, nos muestra la información pasada, esto de inmediato nos hace pensar en cómo el servidor procesa estos archivos.
3. Acceso Inicial
Investigando en internet si estos tipos de archivos tienen alguna vulnerabilidad a la hora de ser procesados, descubrimos un fallo crítico de seguridad reciente «CVE-2024-23346«. Se trata de una vulnerabilidad de ejecución remota de código (RCE) provocada por una deserialización insegura al parsear archivos CIF manipulados.
Para explotar esta vulnerabilidad, inyectamos un payload malicioso dentro de un archivo CIF legítimo. Al subir el archivo a la plataforma, el analizador lo procesa y ejecuta nuestro código, lo que nos permite entablar una reverse shell y obtener acceso a la máquina con los privilegios del usuario del servicio web.
4. Escalada Lateral
Ahora que ya tenemos acceso al sistema, comenzamos nuestra fase de enumeración interna, revisando los archivos de la aplicación web, localizamos la base de datos que almacena la información de los usuarios registrados, de los cuales, uno aparece en el directorio «/home«.
Ahora que ya tenemos el hash, primero hemos de identificar el tipo, así luego podremos crackearlo y así poder acceder al sistema de forma legítima y obtener la «user_flag«.
5. Escalada de Privilegios
Para este paso, si miramos las conexiones activas, podemos percatarnos de una bastante llamativa «127.0.0.1:8080«, pero como la conexión solo es permitida desde la máquina local, lo que haremos será crear un túnel para poder acceder a este servicio desde nuestra propia máquina local aprovechando que tenemos unas credenciales legítimas, de lo contrario deberíamos realizar un túnel inverso.
Al investigar sobre dicho panel, revisando los procesos nos damos cuenta de que quien ejecuta este panel es el usuario «root» y además a cuantos niveles de la ruta raíz del sistema está alojada la web, luego, tras investigar un poco en el código, nos podemos dar cuenta de que en el directorio «assets» se nombra mucho a la hora de llamar a los recursos, por otro lado, tras investigar en internet sobre Python aiohttp 3.9.1, encontramos el CVE-2024-23334, un fallo de Traversal Path ocasionado por una mala configuración en el manejo de rutas estáticas, obteniendo así el archivo que queremos «/root/root.txt» obteniendo así la root_flag.