Topology - Hack The Box

Download Write-Up


Índice

  1. Introducción
  2. Reconocimiento - Enumeración
  3. Análisis de Vulnerabilidades
  4. Explotación
  5. Escalada de Privilegios
  6. Conclusión Final
  7. 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.

Primer escaneo.

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**.
Resultado del segundo escaneo.

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

Código fuente.

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.

Aplicación web.

Realizamos un PoC, para ver más en detalle la funcionalidad de la aplicación web.

Realizando PoC.

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.

Ecuación generada.

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$
Comando ingresado.

Como resultado la apliación detecta que se están ingresando comandos arbitrarios.

Imagen generada.

Después de varios intentos, el comando que me funcionó para obtener lectura del archivo /etc/passwd, fue el siguiente:

Comando útil.

Como resultado genera la imagen del archivo /etc/passwd

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

Comando para obtener lectura del archivo de configuración.

Obtenemos el resultado, donde se aprecia la ruta de la landing page de la universidad y las demas rutas de los aplicativos.

Aplicativos con sus respectivas rutas.

Además se encuentran otros aplicativos con sus respectivas rutas.

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

Fomrulario de inicio de sesión.

Nuevamente utilizaremos el LFI para acceder al archivo .htpasswd, donde se supone que se guardan las credenciales de autenticación del servidor HTTP Apache.

LFI para el archivo .htpasswd

Como resultado obtenemos un usuario y una contraseña cifrada, aparentemente con el algoritmo de hashing que usa Apache por defecto, que es APR1.

Usuario y contraseña cifrada.

Uso de la Herramienta John the Ripper 🕵️‍♂️​ #

Con el uso de la herramienta John the Ripper desciframos la contraseña.

Contraseña descifrada.

La contraseña obtenida es calculus20 y la utilizaremos en el formulario de login junto al usuario vdaisley que obtuvimos anteriormente.

Iniciando sesión.

Al entrar no encontramos nada interesante, solo un software desarrollado por el personal de la universidad Miskatonic.

Software desarrollado por el personal de la universidad.

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.

Conexión por SSH.

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.

Directorio opt.

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.

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

Petición wget.

Le asignamos permisos de ejecución al ejecutable de pspy.

Asignando permisos de ejecución.

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

Procesos.

Nos damos cuenta en el directorio /opt/gnuplot tenemos permisos de escritura pero no de listamiento.

Permisos.

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.

Archivo ejecutado.

Para confirmar hacemos un ls -la de la bash y vemos que tiene el Bit SUID activado.

Bit SUID activado.

Simplemente ahora hacemos bash -p y conseguimos escalar privilegios y obtener la flag de root.

Flag.

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 🛠️​ #

Documentación ​📰​​ #