Post

Devvortex

Writeup de la máquina Devvortex de Hackthebox.

Devvortex

Reconocimiento

En primer lugar, debemos desplegar la máquina para poder obtener la Dirección IP todo ello desde la web de HackTheBox y luego desde la terminal debemos conectarnos a la VPN usando el fichero correspondiente de la siguiente forma:

1
openvpn lab_trr0r.opvn

Después le lanzaremos un ping para ver si se encuentra activa dicha máquina, además de ver si acepta la traza ICM. Comprobamos que efectivamente nos devuelve el paquete que le enviamos por lo que acepta la traza ICMP, gracias al ttl podremos saber si se trata de una máquina Linux (TTL 64 ) y Windows (TTL 128), y vemos que se trata de una máquina Linux pues cuenta con TTL próximo a 64 (63), además gracias al script **whichSystem.py** podremos conocer dicha información.

El motivo por el cual el TTL es de 63 es porque el paquete pasa por unos intermediarios (routers) antes de llegar a su destino (máquina atacante). Esto podemos comprobarlo con el comando ping -c 1 -R 10.10.11.242.

Nmap

En segundo lugar, realizaremos un escaneo usando Nmap para ver que puertos de la máquina víctima se encuentra abiertos.

1
nmap -p- --open --min-rate 5000 -sS -v -Pn -n 10.10.11.242 -oG allPorts

Observamos como nos reporta que se encuentran abiertos los puertos 22 y 80.

Ahora, gracias a la utilidad getPorts definida en nuestra .zshrc podremos copiarnos cómodamente todos los puerto abiertos de la máquina víctima a nuestra clipboard.

A continuación, volveremos a realizar un escaneo con Nmap, pero esta vez se trata de un escaneo más exhaustivo pues lanzaremos unos script básicos de reconocimiento, además de que nos intente reportar la versión y servicio que corre para cada puerto.

1
nmap -p22,80 -sCV 10.10.11.242 -oN targeted

Observamos que en la captura de Nmap no encontramos ninguna información relevante.

___

Explotación

Al tener tan pocas opciones sabremos que la intrusión a la máquina irá a través de la página web alojada en puerto 80. Al realizar un whatweb sobre la página web veremos que nos da un error el cual nos está indicando que es incapaz de redireccionar a la página devvortex.htb.

1
whatweb http://10.10.11.242

Para solucionar este problema tenemos que aplicar Virtual Hosting para ello abrimos el /etc/hosts y añadimos la siguiente línea: 10.10.11.242 devvortex.htb.

Ahora veremos que al correr de nuevo el comando de whatweb sobre la página web no nos dará ningún error, al igual que si accedemos a través del navegador no tendremos ningún problema.

El aspecto de la página web es el siguiente, en primer lugar navegaremos por la página y como no vemos nada interesante realizaremos fuzzing de directorios con Gobuster o cualquier otra herramienta, aunque finalmente no encontraremos nada en la página web.

Como haciendo fuzzing de directorios no encontramos nada pasaremos a realizar fuzzing de subdominios usando Wfuzz de la siguiente forma:

1
wfuzz -c -u http://devvortex.htb -H 'Host: FUZZ.devvortex.htb' -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -t 100 --hh 154

Observamos un subdominio

Una vez hemos encontrado el subdominio volveremos a aplicar Virtual Hosting para ello abrimos el /etc/hosts y lo actualizamos a: 10.10.11.242 devvortex.htb dev.devvortex.htb.

La página web alojada en el subdominio es simular a la del dominio principal.

Realizaremos fuzzing de directorios usando Gobuster gracias al siguiente comando:

1
gobuster dir -u http://dev.devvortex.htb/ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html,js,txt -t 100

Observamos que nos reporta un montón directorios:

Tras estar un rato navegando por ello nos damos cuenta que el fichero README.txt nos está indicando que estamos ante un Joomla.

Además si accedemos a la ruta /administrator veremos que efectivamente estamos ante un Joomla.

En primer lugar lo que debemos de hacer cuando estamos ante un CMS es conocer la versión de dicho Gestor de Contenido, en este caso para Joomla contamos con la herramienta JoomlaScan la cual nos reporta la versión y muchas cosas más.

Para utilizar dicha herramienta nos clonaremos el siguiente repositorio: joomscan.

Para ejecutar el script usaremos perl de la siguiente forma:

1
perl joomscan.pl -u http://dev.devvortex.htb

Observamos que nos detecta que el Joomla se encuentra en la versión 4.2.6.

Además en la ruta /administrator/manifests/files/joomla.xml también es posible ver la versión de Joomla tal y como se aprecia en la captura.

Si buscamos por exploits en searchsploit veremos que no nos reporta ninguno por lo que pasaremos a buscar en internet.

Buscando en Google encontraremos muchos resultados relacionados con el CVE-2023-23752 por lo que entraremos al segundo repositorio.

Una vez en el repositorio nos descargaremos el exploit de python con wget de la siguiente forma:

1
wget https://raw.githubusercontent.com/0xNahim/CVE-2023-23752/refs/heads/main/exploit.py

Ejecutaremos dicho exploit pasando la URL donde está alojado el Joomla tal y como se muestra a continuación:

1
python3 exploit.py -u http://dev.devvortex.htb

Observamos que nos reporta un nombre de usuario y una contraseña pertenecientes a una base de datos.

Si nos fijamos en el script lo único que se encarga de hacer es mirar la Information Leakage que se produce en estas dos rutas:

1
2
curl -s -X GET "http://dev.devvortex.htb/api/index.php/v1/users?public=true"
curl -s -X GET "http://dev.devvortex.htb/api/index.php/v1/config/application?public=true"

Probaremos a autenticarnos con las credenciales encontradas (lewis:P4ntherg0t1n5r3c0n##) en el panel de administrador de Joomla previamente encontrado.

Observamos que hemos podido logearnos correctamente por lo que ya estamos dentro del panel del administrador desde el cual debemos de ganar acceso a la máquina (debemos de usar unawebshell lo más seguro). Para proceder con la webshell debemos dirigirnos a System.

Posteriormente le daremos a Site Templates y en la siguiente página le daremos clic sobre el único template que tenemos (cassiopeia).

Finalmente, debemos de crear una webshell para ello tenemos dos opciones:

  • Crear un cmd.php ya que al subir un cmd.php nos dará error.
  • Modificar un archivo sobre el cual tengamos permisos (error.php).

Creamos un archivo de nombre cmd y con la extensión .php el cual nos va a permitir tener una webshell.

Pasaremos a editar el archivo cmd.php añadiéndole el siguiente contenido y le daremos a Save & Close.

Accedemos a la ruta donde se ha creado el archivo (/templates/cassiopeia/cmd.php) y observamos que tenemos una webshell por lo que ahora lo que tenemos que hacer es enviarnos una Reverse Shell.

Poniéndonos en escucha con NetCat (nc -nvlp 443) observamos que recibimos correctamente la Reverse Shell.

___

Escalada de privilegios

Una vez realizado el Tratamiento de la TTY podemos proceder con la escalada de privilegios, como en todas las máquina buscaremos los principales vectores para elevar nuestros privilegios como lo son Sudoers o SUID pero en está máquina la escalada no va por ahí.

Como tenemos credenciales correspondientes a una base de datos (lewis:P4ntherg0t1n5r3c0n##) probaremos a autenticarnos de la siguiente forma:

1
mysql -ulewis -p

Observamos que hemos podido conectarnos correctamente.

Vemos que existe una base de datos llamada joomla y dentro de ella nos llama la atención la tabla sd4fg_users.

Nos quedaremos con el hash correspondiente al usuario logan e intentaremos romperlo.

Nos quedaremos con el hash del usuario logan ya que dicho usuario existe en el sistema y la contraseña del usuario lewis ya la tenemos del Information Leakage anteriormente explotado.

Existen varias formas de crackear el hash, vía terminal con johntheripper / hashcat o las alternativas en la web como Crackstation o Hashes

En este caso nosotros usaremos la manera manual, identificando en primer lugar el tipo de hash y luego buscando en hashcat –example-hashes o en Hashcat - example-hashes el modo de hash asociado de dicho hash.

Una vez conocemos el modo (3200) ejecutaremos hashcat de la siguiente forma:

1
hashcat -m 3200 -a 0 -o cracked.txt hash /usr/share/wordlists/rockyou.txt

Al cabo de poco tiempo observamos como nos reporta que la contraseña crackeada es: tequieromucho:

Nos convertiremos en el usuario logan satisfactoriamente con la contraseña crackeada: tequieromucho.

Mirando los permisos de Sudoers nos daremos cuenta que podemos ejecutar el binario /usr/bin/apport-cli como cualquier usuario por lo que la escalada final irá por aquí.

Tras investigar por internet nos daremos cuenta que dicha herramienta cuenta con una vulnerabilidad la cual nos permite colar comandos de igual forma que comando el less gracias al signo de exclamación (!).

Existen 3 principales formas de invocarnos una /bin/bash y convertirnos en root gracias al permiso de Sudoers en apport-cli.

Crash Sleep

La primera de las formas consiste en crear un archivo crash intencionadamente para ello debemos de ejecutar un sleep en segundo plano: sleep 20 & y posteriormente matar dicho proceso con -ABRT o -6 y así generar un core dump es decir un .crash tal y como vemos en la captura.

Posteriormente ejecutaremos la herramienta apport-cli como el usuario administrador pasándole el Path donde se encuentra el crash con la opción -c, en definitiva debemos de ejecutar el siguiente comando y nos saltará el menú interactivo para elegir la opción de visualizar el reporte (V: View Report) y así colar un comando:

1
sudo -u root /usr/bin/apport-cli -c /var/crash/_usr_bin_sleep.1000.crash 

Con apport-cli

Con la segunda forma no necesitaremos generar ningún tipo de crash será todo con la herramienta apport-cli, en primer lugar lanzaremos la herramienta con el parámetro -f, es decir tal y como se observa a continuación:

1
sudo -u root apport-cli -f

Una vez ejecutado el anterior comando nos saltará el siguiente menú interactivo donde tendremos que escoger la primer opción, es decir escribir un 1.

Tras el anterior menú interactivo nos volverá a saltar otro parecido pero en cambio en este tendremos que seleccionar la segunda opción (escribir un 2), posteriormente debemos de pulsar cualquier letra, finalmente nos saltará el menú interactivo para elegir la opción de visualizar el reporte (V: View Report) y así colar un comando:

Fake Data

Como última opción podemos crear un falso archivo crash ya que observamos que al pasarle un archivo que no es un crash nos dice que falta el campo ProblemType.

Nos crearemos un archivo .crash con dicho campo tal y como se aprecia en la captura de pantalla:

Finalmente, ejecutaremos el binario /usr/bin/apport-cli con el parámetro -c al igual que en el primer caso (Crash Sleep), en resumen lanzaremos la siguiente instrucción y ya entraremos en el menú interactivo donde podemos seleccionar la opción V: View report.

1
sudo -u root /usr/bin/apport-cli -c /tmp/test.crash 

V: View report

Cuando consigamos que nos aparezca la opción V: View report debemos de seleccionarla pulsado la tecla V:

Posteriormente cuando la herramienta deje de sacar output por la pantalla escaparemos del visualizador del reporte gracias a la exclamación (!), es decir nos lanzaremos una bash con !/bin/bash.

Observamos que hemos conseguido convertirnos en el usuario root por lo que ya habríamos pwneado la máquina.

This post is licensed under CC BY 4.0 by the author.