Topology - Hack The Box
Índice
- Introducción
- Reconocimiento - Enumeración
- Análisis de Vulnerabilidades
- Explotación
- Escalada de Privilegios
- Conclusión Final
- Apéndice I Links de Referencia
Introducción 📄 #
En el presente Write Up explicare los pasos para resolver la máquina Topology de la plataforma HackTheBox. Topology se trata de una máquina basada en el Sistema Operativo Linux, donde a través de Local File Inclusion (LFI) via LaTeX Injection se obtiene un archivo que contiene credenciales que luego se utilizan para entablar conexión por SSH. Finalmente, para la escalada de privilegios, se debe crear un archivo con extensión .plt para el programa gnuplot, con el fin de convertir la BASH en permisos SUID.
Alcance 🎯 #
El alcance de esta máquina fue definida como la siguiente.
Servidor Web / Direcciónes IPs / Hosts / URLs | Descripción | Subdominios |
---|---|---|
10.129.16.121 | Dirección IP de la máquina Topology | Todos |
Metodologia Aplicada 📦📚 #
- Enfoque de prueba: En el proceso de pruebas de seguridad, se optó por un enfoque gray-box, lo que significó que se tenía un nivel de acceso parcial a la infraestructura y el sistema objetivo.
- Las etapas aplicadas para esta auditoria fueron las siguientes:
Reconocimiento - Enumeración 🔍 #
Uso de la Herramienta Nmap 👁️ #
Primeramente realizamos un escaneo con ayuda de la herramienta nmap en búsqueda de puertos abiertos.
# Primer escaneo.
--------------------------------------------------------------
nmap -p- --open -sV --min-rate 5000 10.129.16.121
Parámetro | Descripción |
---|---|
-p- | Escanea los 65535 puertos. |
--open | Muestra solo los puertos abiertos. |
-sV | Determina la versiones de los servicios que se ejecutan en los puertos encontrados. |
--min-rate 5000 | Establece la velocidad mínima de envío de paquetes a 5000 paquetes por segundo. |
El resultado que nos arrojó este primer escaneo fue que la máquina tiene el puerto 22 que pertenece al servicio SSH y el puerto 80 que pertenece al protocolo HTTP.
Se procedió a realizar otro escaneo con los scripts default de nmap, también especificando la versión nuevamente.
# Segundo escaneo.
--------------------------------------------------------------
nmap -sC -sV -p22,80 10.129.16.121
Parámetro | Descripción |
---|---|
-sC | Realiza un escaneo con los scripts por defecto. |
-sV | Determina la versiones de los servicios que se ejecutan en los puertos encontrados. |
-p | Especifica los puertos que se escanearán. |
Lo único interesante que obtenemos es el título de la página web **Miskatonic University | Topology Group**. |
Aplicación Web 🌐 #
Luego del segundo escaneo, se ingresó a la aplicación web, donde en el código fuente se encontró un subdominio http://latex.topology.htb/equation.php
Antes de ingresar al subdominio, se agregó el mismo al archivo /etc/hosts
# Agregando subdominio al archivo /etc/hosts.
--------------------------------------------------------------
sudo nano /etc/hosts
10.129.16.121 latex.topology.htb
Análisis de Vulnerabilidades 🔬 #
Al ingresar al subdominio, vemos que cosiste en una generador de ecuaciones mediante sintaxis en LaTeX.
Realizamos un PoC, para ver más en detalle la funcionalidad de la aplicación web.
Una vez que enviamos el comando de LaTeX para generar la ecuación, nos envia a una ruta con la ecuación generada en formaato de imagen.
Muy interesante el funcionamiento de la aplicación y de como se genera la ecuación.
Local File Inlcusion (LFI) via LaTeX Injection 📄💉 #
Al entender como funciona la aplicación, se me ocurrió realizar una prueba que consiste en incluir el archivo /etc/passwd, ingresando código de LaTeX arbitrario.
Para realizar esta prueba se utilizó en siguiente recurso https://book.hacktricks.xyz/v/es/pentesting-web/formula-csv-doc-latex-ghostscript-injection de HackTricks
Realicé una prueba para incluir el archivo /etc/passwd con el siguiente comando.
# Comando utilizado.
--------------------------------------------------------------
$input/etc/passwd$
Como resultado la apliación detecta que se están ingresando comandos arbitrarios.
Después de varios intentos, el comando que me funcionó para obtener lectura del archivo /etc/passwd, fue el siguiente:
Como resultado genera la imagen del archivo /etc/passwd
Explotación 💣 #
Enumeración de Archivos del Sistema 📌 #
Al obtener lectura del archivo, se confirma que la aplicación web es vulnerable a Local File Inclusion via LaTeX Injection.
Utilizaremos esta vulnerabilidad para conseguir posibles datos que nos interesen o sean útiles.
Como la app web tiene un servidor web apache, procedemos a leer el archivo de configuración predeterinado del servidor web, que se encuentra en esta ruta /etc/apache2/sites-available/000-default.conf
Obtenemos el resultado, donde se aprecia la ruta de la landing page de la universidad y las demas rutas de los aplicativos.
Además se encuentran otros aplicativos con sus respectivas rutas.
Para ingresar a los subdominios encontrados, debemos nuevamente agregarlos al archivo /etc/hosts
# Agregando subdominios al archivo /etc/hosts.
--------------------------------------------------------------
sudo nano /etc/hosts
10.129.16.121 latex.topology.htb dev.topology.htb stats.topology.htb
Lo único interesante es el subdominio dev.topology.htb, que tiene un formulario de login, pero no podemos ingresar por falta de credenciales.
Nuevamente utilizaremos el LFI para acceder al archivo .htpasswd, donde se supone que se guardan las credenciales de autenticación del servidor HTTP Apache.
Como resultado obtenemos un usuario y una contraseña cifrada, aparentemente con el algoritmo de hashing que usa Apache por defecto, que es APR1.
Uso de la Herramienta John the Ripper 🕵️♂️ #
Con el uso de la herramienta John the Ripper desciframos la contraseña.
La contraseña obtenida es calculus20 y la utilizaremos en el formulario de login junto al usuario vdaisley que obtuvimos anteriormente.
Al entrar no encontramos nada interesante, solo un software desarrollado por el personal de la universidad Miskatonic.
Acceso al Sistema via SSH 🖥️ #
Al haber escaneado los puertos anteriormente y obtener información de que el puerto 22 que corresponde al servicio SSH esta abierto, procedemos a conectarnos por dicho servicio, utilizando las credenciales obtenidas.
Al conectarnos exitosamente, podemos leer la flag del user.
Listamiento de Directorios Interesantes 🤔 #
Una vez dentro, vemos en el directorio opt que se encuentra un directorio llamado gnuplot, el cual tiene permisos de escritura y ejecución, y cuyo propietario es root.
Investigando un poco encontre que gnuplot es un programa de interfaz de línea de comandos para generar gráficas de dos y tres dimensiones de funciones, datos y ajustes de datos.
Escalada de Privilegios 👨💻 #
Uso de la Herramienta pspy ⚙️ #
Para seguir enumernado la máquina victima utilizaré pspy, que es una herramienta de monitoreo de procesos para sistemas Linux. Esta herramienta permitira enumerar procesos de la máquina victima.
Antes debo saber cuál es la arquitectura y la cantidad de bits del sistema Linux de la máquina víctima, para poder descargar el ejecutable de pspy para la arquitectura correspondiente.
Para eso ejecuto el comando uname -m, en el cual obtengo que la arquitectura de la máquina victima es de 64 bits.
Una vez teniendo este dato me descargo el ejecutable de pspy y creo en el servidor python en el puerto 80, para luego desde la máquina victima realizar una petición wget y pasarme el archivo de la herramienta.
Realizamos una petición wget en la máquina victima.
Le asignamos permisos de ejecución al ejecutable de pspy.
Una vez asignados los permisos de ejecución, procedemos a ejecutarlo y observamos que el usuario con UID=0, o sea el usuario root, ejecuta el comando find sobre el directorio /opt/gnuplot, donde busca todos los archivos con extensión .plt (que es la extensión que corresponde al programa gnuplot) y luego los ejecuta.
Luego ejecuta una serie de scripts y por ultimo ejecuta un archivo networkplot.plt
Nos damos cuenta en el directorio /opt/gnuplot tenemos permisos de escritura pero no de listamiento.
Creación del Exploit 👾 #
Lo que se me ocurre es crear un archivo asignando permisos SUID para convertir la BASH del sistema, de modo que luego root ejecute el script habilitando el Bit SUID y enlace una BASH con altos privilegios.
# Exploit.
--------------------------------------------------------------
nano root.plt
system "chmod u+s /bin/bash"
Una vez creado el archivo, ejecutamos de vuelta pspy para saber cuando root ejecuto el archivo.
Para confirmar hacemos un ls -la de la bash y vemos que tiene el Bit SUID activado.
Simplemente ahora hacemos bash -p y conseguimos escalar privilegios y obtener la flag de root.
Conclusión Final 💬 #
Esta máquina resultó muy entretenida, ideal para aquellos que recién comienzan en el pentesting resolviendo máquinas. La verdad es que fue bastante sencilla, en mi caso nunca había explorado ni explotado un Local File Inclusion (LFI) a través LaTeX Injection. Si no fuera por eso, la habría terminado antes. Después de eso, la parte de explotación y priv-esc no me dio problemas.
Apéndice I Links de Referencia 📎 #
Herramientas Utilizadas en la Auditoria 🛠️ #
- Nmap: https://nmap.org - https://www.kali.org/tools/nmap —> Uso de nmap para el escaneo de puertos.
- John the Ripper: https://www.openwall.com/john - https://www.kali.org/tools/johnhttps://github.com/openwall/john —> Uso de John the Ripper para descifrar contraseña.
- pspy - unprivileged Linux process snooping: https://github.com/DominicBreuker/pspy —> Uso de pspy para monitorear procesos.