HackTheBox: Jab
Jab es una máquina de nivel medio que nos introduce al servicio Jabber e Ignite Openfire.
Jabber es un servicio público y gratuito de mensajería instantánea y presencia basado en XMPP. Openfire es un servidor de colaboración en tiempo real (RTC) que usa XMPP; es fácil de instalar y administrar, y ofrece buena seguridad y rendimiento.
Enumeración
Empezando con un escaneo de Nmap, vimos muchos servicios y puertos, con algunos interesantes como 88/tcp (kerberos), 445/tcp (smb), 389/636/3268 (ldap) y 5222/tcp (Ignite Realtime Openfire).
# nmap -sCV -n -Pn ... 10.129.176.229
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: jab.htb0.)
445/tcp open microsoft-ds?
5222/tcp open jabber Ignite Realtime Openfire Jabber server 3.10.0 or later
5269/tcp open xmpp Wildfire XMPP Client
7070/tcp open realserver?
| ssl-cert: Subject: commonName=DC01.jab.htb
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows Antes de interactuar con el servicio Jabber, quisimos enumerar el sistema AD. Usamos kerbrute por su velocidad de enumeración.
kerbrute userenum jsmith.txt --dc dc01 -d 'jab.htb' -v 
Recolectamos muchos usuarios, y 3 eran vulnerables a AS-REP Roasting; capturamos el ticket Kerberos para crackearlo offline.

Con hashcat, logramos obtener una contraseña.
hashcat -a 0 -m 18200 jmontgomery.hash /usr/share/wordlists/rockyou.txt --force
[email protected]:...:##########
Status...........: Cracked
Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP) Ahora con un usuario, y después de listar los servicios disponibles, nos enfocamos en el servicio Jabber Openfire. Encontramos que la app pidgin sirve para interactuar con él.

Usamos esta app para iniciar sesión con el usuario que acabamos de encontrar.

Una vez dentro, no hay mensajes directos, así que buscamos alguna sala o conversación de grupo.

Encontramos una sala interesante llamada pentest2023.

Dentro de esta sala, encontramos una conversación sobre un pentest realizado en la empresa, donde encontraron un SPN de un usuario y el hashcat ejecutado contra el ticket, para demostrar una vulnerabilidad en su sistema.

Ahora tenemos credenciales importantes que enumeraremos para intentar entrar al servidor.
Acceso inicial
Nos movimos a la terminal y logramos obtener un zip de BloodHound para enumerar el dominio. No encontramos derechos interesantes, pero el usuario svc_openfire es miembro de DISTRIBUTED COM USERS.
bloodhound-python -u <USERNAME> -p <PASSWORD> -d <DOMAIN> -ns <TARGET-IP> --dns-tcp -dc <DC> --zip -k -v Usamos el siguiente filtro, que encuentra el camino más corto de un usuario a cualquier cosa.
MATCH p = shortestPath((u:User{name: '[email protected]'})-[*1..]->(c)) WHERE c<>u RETURN p 
Sabiendo que el usuario está en el grupo Distributed COM, encontramos la herramienta Impacket DCOM, que sirve para obtener ejecución de comandos en el servidor. Usándola, lanzamos una reverse shell.
dcomexec.py -object MMC20 <DOMAIN>/<USERNAME>:<PASSWORD>@<TARGET-IP> '<COMMAND>' -silentcommand 
Acá obtuvimos nuestra flag user.txt.

Escalada de privilegios
De vuelta en Pidgin, logueados como svc_openfire, vamos a Accounts -> svc_openfire -> Get Admin Console Info, que muestra la interfaz IP y el puerto de la Consola de Administración de Openfire.

Enumerando nuestra sesión con netstat, vemos que el servicio Openfire corre en la IP local y el puerto 9090.

Para hacer el port forwarding, usamos Metasploit: lanzamos una reverse shell meterpreter y reenviamos el puerto local del objetivo a nuestra máquina.
portfwd add -l 9090 -p 9090 -r 127.0.0.1 
Ahora, en nuestra máquina atacante, vamos a http://127.0.0.1:9090 y tenemos acceso a la Consola de Administración de Openfire.

Usando las credenciales encontradas en la sala de chat, iniciamos sesión.


Openfire es vulnerable a CVE-2023-32315, el bypass de autenticación de la consola de Openfire con RCE. La versión en uso (4.7.5) tiene el bypass corregido, pero como ya tenemos acceso admin con svc_openfire, solo necesitamos el plugin.
https://github.com/miko550/CVE-2023-32315 Para subir el plugin, vamos a Plugins.

Para usar el plugin, vamos a Server -> Server Settings -> Management Tool.

El plugin pide una contraseña para entrar; la contraseña es 123.

Finalmente, elegimos la pestaña system command y ejecutamos nuestra reverse shell de PowerShell.

Obtuvimos acceso admin al servidor.

Y obtuvimos nuestra flag root.txt.

Gracias por leer.