Topology

Topology es una máquina Linux de dificultad fácil que muestra una aplicación web LaTeX susceptible a una vulnerabilidad de inclusión de archivos locales (LFI). La explotación de la falla LFI permite la recuperación de un archivo .htpasswd que contiene una contraseña en hash. Al descifrar el hash de la contraseña, se obtiene acceso SSH a la máquina, lo que revela un cronjob root que ejecuta archivos gnuplot. La creación de un archivo .plt malicioso permite la escalada de privilegios.


Reconnaissance

Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina Topology. Este resultado lo almacenaremos en un archivo llamado allPorts.

A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.

Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentran abierta una página web de Apache.

Transformaremos el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.

Accederemos a http://localhost y verificaremos el resultado en un formato más cómodo para su análisis.

Añadiremos la siguiente entrada en nuestro archivo /etc/hosts.

Web Enumeration

Realizaremos una comprobación de las tecnologías que utiliza el sitio web.

Realizaremos una enumeración de directorios y páginas web de la aplicación web, no logramos obtener ningún resultado interesante.

Accederemos a http://topology.htb y nos encontraremos con la siguiente página web.

Al inspeccionar el sitio web, nos encontramos que haciendo hovering, se nos muestra un subdominio llamado latex.topology.htb.

Añadiremos esta nueva entrada en nuestro archivo /etc/passwd.

Al ingresar directamente a http://latex.topology.htb y nos encontramos con la siguiente página web en la que podemos realizar Directory Listing.

Accederemos a http://latex.topology.htb/equation.php y nos encontramos con la siguiente aplicación web en la cual nos permite introducir código LaTeX. Con lo cual, podríamos posteriormente comprobar si es vulnerable a LaTeX Injection.

Subdomain Enumeration

Realizamos una enumeración de subdominios del dominio principal de la página web. Al finalizar el análisis, nos encontramos con dos nuevos subdominios: stats.topology.htby dev.topology.htb.

Añadiremos estas nuevas entradas en nuestro archivo /etc/hosts.

Al acceder a http://stats.topology.htb nos encontramos con el siguiente contenido, el cual no parece tener contenido importante en él.

Al acceder a la página web de http://dev.topology.htb, nos encontramos con la siguiente página web en la cual requiere ingresar credenciales que no disponemos.

Dado que nos encontramos ante una página web montada en un servidor de Apache, y por el tipo de autenticación que nos requiere ingresar, podemos pensar en que quizás esté utilizando Basic Auth y existan archivos de .htaccess o .htpasswd el cual contengan credenciales de usuarios.

Los . htaccess se utilizan para indicar al servidor web que se comporte de una determinada manera, añadiendo, limitando o modificando funcionalidades por defecto. Entre las utilidades de uso más frecuente se encuentran las configuraciones de acceso a la web, las restricciones de seguridad, las redirecciones, etc. htpasswd es un archivo de texto que se usa para guardar los nombres de usuario y las contraseñas para la autenticación básica del Servidor HTTP Apache. El nombre del fichero se da en el fichero de configuración .

Initial Access

LaTeX Injection

Volveremos a la página de http://latex.topology.htb y probaremos de revisar si es vulnerable a LaTeX Injection el campo donde nos permite inyectar código LaTeX.

Interceptaremos la solicitud con BurpSuite, y comprobamos que la solicitud se tramita a través del método GET. Por otro lado, se verifica que la variable eqn es dónde podemos introducir código LaTeX.

En este ejemplo básico, introduciremos Gzzcoo y al enviar la solicitud, en la respuesta por parte del servidor se nos genera un PDF con el código LaTeX.

Reading Files with LaTeX Injection

Lo primero que intentaremos es intentar leer archivos arbitrarios del sistema mediante LaTeX Injection. A través de la siguiente inyección, trataremos de listar la primera línea del archivo /etc/passwd.

Verificamos que al inyectar el código, comprobamos que en el PDF generado se muestra la primera línea del archivo listado.

Al intentar listar todo el contenido de /etc/passwda través de la siguiente inyección LaTeX, se nos mostraba que había detectado un comando ilegal, con lo cual mediante el bucle, no podíamos listar el contenido entero del archivo.

Probamos de intentar ejecutar el comando id mediante la siguiente inyección LaTeX para intentar obtener un RCE. pero tampoco obtuvimos el resultado esperado.

En la siguiente página web,s e nos menciona un paquete de code listing en donde podemos importar código desde un archivo.

En este caso, tratamos de incluir una imagen del contenido del archivo /etc/passwd, pero nos dio mensajes de error.

Para explotar la vulnerabilidad de LaTeX Injection, necesitamos inyectar código malicioso en un contexto donde LaTeX lo interprete y ejecute.

En este caso, el sitio parece encerrar automáticamente la entrada entre símbolos $ ... $, lo que significa que cualquier comando que intentemos inyectar quedará dentro del modo matemático de LaTeX. Para romper esa estructura y ejecutar nuestros propios comandos, podemos intentar cerrar la expresión con $ y luego insertar nuestra carga útil, finalizando con otro $ para restaurar el formato esperado.

Por ejemplo, la siguiente inyección nos permitiría leer el contenido de /etc/passwd:

Si la inyección es exitosa, el contenido del archivo debería aparecer renderizado dentro del documento generado por LaTeX, tal y como se muestra en este caso.

Por lo tanto, tenemos una manera de listar el contenido de archivos arbitrarios del sistema.

Information Leakage

Después de diferentes pruebas para intentar obtener información que nos pudiese servir y no obtener resultado ninguno, pensamos en que quizás exista el archivo .htpasswd y .htaccess de la página web dev.topology.htb que encontramos anteriormente que nos requería ingresar credenciales.

Por lo tanto, decidimos primero revisar la configuración de las páginas web de Apache que se encuentran habilitadas en el sistema objetivo, para tratar de revisar las rutas de configuración exacta de donde se encuentran los correspondientes archivos.

En el resultado obtenido, se nos mostró la configuración de las diferentes páginas web que llegamos a enumerar anteriormente.

Revisamos que la configuración de dev.topology.htb se encuentra en /var/www/dev.

Por lo tanto, sabiendo esta información podemos intentar listar el contenido del .htaccess de la página web indicada. Verificamos que en el PDF generado, se nos muestra el contenido del archivo que queríamos listar.

Tal y como mencionábamos anteriormente, se estaba utilizando un Basic Authpara acceder a dev.topology.htb. También se nos confirma la ruta en donde se encuentra almacenada el archivo .htpasswd el cual debería contener credenciales de acceso a la página web.

Decidimos listar el contenido del .htpasswd en el resultado obtenido, se nos muestra las credenciales del usuario vdaisley en formato hash, probablemente Apache MD5.

Verificamos que el tipo de hash encontrado es Apache MD5. A través de hashcat, finalmente logramos crackear el hash y obtener las credenciales en texto plano.

Probamos de autenticarnos con las credenciales encontradas en http://dev.topology.htb, logramos acceder a la página web, pero no obtenemos información interesante que nos pueda servir.

Probamos de autenticarnos al SSH con las credenciales del usuario vdaisley, finalmente logramos el acceso remoto a la máquina y visualizar la flag de user.txt.

Bypass Restrictions LaTeX Injection to perform Remote Code Execution

ippSec, nos muestra también una manera de poder llegar a acceder al equipo mediante LaTeX Injection logrando realizar un Bypass de las restricciones que se nos indicaba anteriormente.

En el siguiente ejemplo, creamos un archivo llamado gzzcoo.php que contenía una webshell.

Este archivo al parecer, es subido en http://latex.topology.htb/tempfiles/, en el cual comprobamos el archivo creado.

Probamos de utilizar la webshell subida, y se nos muestra la posibilidad de ejecutar comandos arbitrarios en el sistema objetivo.

En este caso, el usuario que ejecuta los comandos era www-data, con lo cual si utilizamos este método, deberíamos posteriormente ganar acceso como el usuario vdaisley.

Privilege Escalation

Basic Enumeration

Realizaremos una enumeración básica con el usuario vdaisleypara lograr verificar si disponemos de algún grupo interesante, permisos de sudoers o de algún binario con SUID. En este caso, no logramos obtener resultados interesantes para elevar nuestros privilegios.

Monitoring Processes (Pspy64)

Enumerando los directorios del sistema, nos encontramos con el directorio /opt el cual disponía de un directorio nombrado como gnuplot. Este directorio no disponemos del acceso correspondiente y verificamos que el propietario es el usuario root.

gnuplot es un programa de línea de comandos y GUI que puede generar gráficos bidimensionales y tridimensionales de funciones, datos y ajustes de datos .

Por lo tanto, probamos de enumerar los procesos que se encontraban en ejecución mediante pspy64. Este binario que disponemos en nuestro equipo local, lo compartiremos mediante un servidor web.

Desde el equipo comprometido, nos descargaremos el binario y le daremos los permisos de ejecución correspondientes.

Ejecutaremos el binario de pspy64 para analizar los procesos que se encontraban en ejecución en el sistema. Después de un breve tiempo, comprobamos que se están ejecutando mediante una tarea CRON, la ejecución de archivos con extensión .plt en el directorio /opt/gnuplot y posteriormente se ejecutan con gnuplot.

Lo primero que deberemos realizar, es comprobar que tenemos permisos de escritura en el directorio mencionado. Por lo tanto, crearemos un nuevo archivo .txt y le daremos los permisos de ejecución, esto para simular que podemos crear archivos.

Comprobamos que hemos logrado crear un archivo en el directorio /opt/gnuplot y también la capacidad de darle permisos de ejecución al archivo creado.

Pensando que la tarea CRON que realiza la ejecución de los archivos .plt en dicho directorio sea root, tenemos una vía potencial para poder escalar privilegios.

En esta primera comprobación crearemos un archivo gzzcoo.plt que ejecute el comando whoami y redirija el output al archivo /tmp/whoami. Le daremos los permisos correspondientes y comprobaremos de la existencia del archivo y de que se hayan asignado los permisos correspondientes.

Después de un breve tiempo, comprobamos en el directorio /tmp que aparece el archivo creado whoami. Revisando el archivo, comprobamos que el comando whoami ha dado como resultado el usuario root.

Con esto, se confirma que tenemos una vía potencial de abusar de un script creado con extensión .plten el directorio mencionado para que posteriormente sea ejecutado a través de la tarea CRON del usuario root.

En este caso, reemplazaremos el contenido de gzzcoo.plt para que en este caso asigne permisos de SUIDsobre el binario /bin/bash. Verificamos que se el script sigue estando en el directorio mencionado y dispone de los permisos de ejecución.

Después de un breve tiempo, revisamos el binario /bin/bash y comprobamos que se le han asignado los permisos de SUID, con lo cual finalmente logramos convertirnos en usuario root y visualizamos la flag root.txt

Última actualización

¿Te fue útil?