La máquina Topology es una máquina fácil de HTB.
Resumen de conceptos trabajados en Topology:
Latex Injection to LFI SSH credentials Gnuplot exploitation |
A la hora de realizar la máquina aprenderemos a conseguir acceso a través de un Latex Injection to LFI, visualizaremos un archivo con credenciales y accederemos por SSH. A continuación escalaremos privilegios mediante la creación de un archivo PLT para el programa Gnuplot con el objetivo de que convierta la BASH a permisos SUID.
Si es tu primera máquina en Hack The Box y no sabes cómo conectarte a la máquina del laboratorio, te recomiendo que visites este post donde te cuento cómo introducirte en esta plataforma.
A continuación, para conectarte a la máquina, tendrás que establecer la conexión con la máquina víctima de HTB conectándote a la VPN desde la carpeta donde la tengas descargada, y desde ahí ejecutarás el comando «sudo openvpn NOMBRE_VPN.ovpn».
Estructura del contenido
ENUMERACIÓN -> ESCANEO DE PUERTOS
Para asegurarte que está conectado a la máquina víctima ejecuta este comando «nmap -sn IP».
Máquina activa – LINUX: TimeToLive 63 (64 son Linux -1 del nodo intermediario)
ping -c 1 10.10.11.217 -R (para ver el trace route con el nodo intermediario)
Ya establecida la conexión empezamos el análisis:
nmap -sCV 10.10.11.217
El comando -sC y -sV se puede unificar en -sCV con el que lanzamos unos scripts básicos de reconocimiento de nmap para ver los servicios y versiones que corren para esos puertos abiertos detectados en consola.
Dos puertos abiertos: puerto 20 ssh y 80 http web
BÚSQUEDA DIRECTORIOS INTERNOS
Vamos a profundizar en el puerto 80, y es que al ver el código fuente de la IP http://10.10.11.217 nos encontramos con algunos directorios visibles como /images/ o /portraits/ y un subdominio como es http://latex.topology.htb/equation.php
Para ir más allá del análisis por si con el código fuente no fuera suficiente, se recomienda aplicar fuerza bruta a nivel de directorios o subdominios con herramientas como WFUZZ o FFUF… que tiran contra un diccionario de posibles rutas.
En este caso vemos que, si añadimos al etc/hosts la url del subdominio para esa IP, la url nos devuelve contenido: http://latex.topology.htb/equation.php (*también se encuentran más subdominios como dev.topology.htb y stats.topology.htb que añadimos a etc/hosts).
LATEX INJECTION TO LOCAL FILE INCLUSION
El subdominio http://latex.topology.htb/equation.php nos permite crear imágenes a partir de ecuaciones matemáticas.
Vemos que la web habilita la opción de poder introducir código LaTeX, y analizando vemos que existe una opción para inyectar código malicioso LaTeX:
Si hacemos una búsqueda en Google para encontrar documentación sobre esta intrusión, vemos que en la web de hacktricks.xyz (muy recomendada) se habla de ella, en concreto en esta página https://book.hacktricks.xyz/pentesting-web/formula-doc-latex-injection
Filtramos lo que nos interesa y llegamos a esta parte de la página «Read File» y más a detalle vamos a probar esta línea de código:
sustituyendo la parte de {/usr/share/texmf/web2c/texmf.cnf} por $\lstinputlisting{/etc/passwd}$ de esta forma (con símbolo $ para evitar errores):
$\lstinputlisting{/etc/passwd}$
Al ejecutar ese inyección de comando, la url de consulta nos devuelve el listado de usuarios:
Obtenemos por tanto el archivo /etc/passwd pudiendo así leer el archivo completo.
Si navegamos al subdominio que encontramos/añadimos al inicio llamado http://dev.topology.htb nos llevará a un panel de autenticación para supuestamente desarrolladores de la web, por lo que tenemos una opción de entrada por autenticación de credenciales.
Si probamos a logarnos con admin/admin, nos devuelve un error de “No autorizado” para el servidor de Apache/2.4.41.
Viendo que no estamos autorizados para entrar en el servidor de Apache/2.4.41, buscamos por ejemplo con ChatGPT por qué ocurre esto y cómo podemos bypassearlo en una inyección de comandos para LateX dándonos esta respuesta:
Por tanto, si ahora modificamos nuestro comando de LateX anterior por este otro y ejecutamos:
$\lstinputlisting{/var/www/dev/.htpasswd}$
Podemos acceder a esta ubicación típica utilizada en servidores web Linux para almacenar archivos y recursos como contraseñas, etc.
Y en este caso se nos muestra estas credenciales en formato imagen (si la guardas como y luego con una herramienta online conviertes la imagen en texto, tendrás la contraseña en texto para usarla):
Asegúrate que está viene extraído porque pueden errar en algún carácter de la contraseña y te daría error:
Ahora, con esas credenciales identificamos si esa contraseña tiene algún hash, es decir que la contraseña original ha sido procesada mediante una función de hash para producir una representación de la contraseña en forma de cadena de caracteres alfanuméricos.
$apr1$10NUB/S2$58eeNVirnRDB5zAIbIxTYO
Para ello ponemos en la terminal lo siguiente, y nos detecta posible hash MD5(APR):
SSH CREDENTIAL
Si ahora aplicas un John de Ripper para crackear la contraseña que tenemos, nos dará este resultado, que será la contraseña final para autenticarnos por ssh con el usuario vdaisley:
?:calculus20
En mi caso el resultado de pasarle esa contraseña es que no había hashes por lo que no me sacaba la contraseña anterior…
Ya estaríamos entonces dentro como el usuario vdaisley
Accedemos al listado de archivos y archivos ocultos (ls -la) y podemos extraer la primera flag con un cat user.txt.
Ahora toca la fase de escalada de privilegios como usuario root de la máquina víctima, para ello vamos haciendo lo siguiente.
GNUT EXPLOITATION
En este caso vemos que nuestro usuario dev tiene todos los permisos para leer, escribir y ejecutar sobre el sistema “gnuplot” (Gnuplot es una herramienta versátil y poderosa para la creación de gráficos y visualización de datos en entornos de línea de comandos).
Nos vamos a la página de gnuplot info para la ver cómo se hace la ejecución de comandos en este sistema: http://www.gnuplot.info/docs_5.5/loc18483.html
Nos abrimos un servidor puerto 8000 nuestra máquina por Python y hacemos una petición WGET:
Vamos a hacer la escalada de privilegios a través de pspy64, que es una herramienta de línea de comandos utilizada para la monitorización y análisis de procesos en sistemas Linux de 64 bits.
Buscamos y descargamos el fichero pspy64 desde el github https://github.com/DominicBreuker/pspy/releases/tag/v1.2.1
Y una vez descargado, lo movemos a la carpeta de la máquina (desde Downloads) .
A continuación, hacemos una petición wget de ese fichero de esta forma:
El servidor nos da respuesta 200 OK:
Ahora pedimos permiso de ejecución al archivo con el comando chmod +x pspy64.
Vemos que se ejecuta gnuplot y como tenemos permisos para crear archivos creamos uno para que el programa nos convierta la BASH con permisos SUID.
Y así de esta forma podemos convertirnos en root y leer la flag.
FUENTES CONSULTADAS