🔴Haze
En esta ocasión vamos a hacer el writeup de la máquina Haze de Hack the Box, una máquina Windows de dificultad Hard.

Primer contacto
Añadimos la IP 10.10.11.61 a nuestro /etc/hosts y accedemos través del navegador.
Escaneo de puertos
El host 10.10.11.61 es un Domain Controller Windows (presencia de Kerberos, LDAP y Global Catalog) con Splunkd expuesto por múltiples puertos HTTP/HTTPS. Esto sugiere vectores de ataque tanto en el dominio como en aplicaciones web internas como Splunk.
53
DNS
Resolución interna, útil para zona DNS y enum. de subdominios
88
Kerberos
Confirmación de Active Directory
135/139/445
MSRPC, NetBIOS, SMB
Vectores comunes para null sessions, shares, y enumeración de usuarios
389/636/3268/3269
LDAP y GC (LDAP + LDAPS)
Enumeración de usuarios y grupos del dominio
5985
WinRM
Ejecución remota si conseguimos credenciales
8000/8088/8089
Splunkd
Acceso al panel de Splunk, posiblemente vulnerable
Domain Controller
FQDN:
dc01.haze.htbDominio:
haze.htbWindows Server 2022
Single-domain forest
Enumeración de usuarios
Usando Kerbrute para enumerar usuarios del sistema parece que solo nos encuentra al usuario administrator:
Splunk App
Puerto 8000
Búsquedas guardadas con scripts incrustados
Capacidades de carga de archivos de búsqueda
Inyección de XML en el panel de control
No funcionan las credenciales por defecto admin:changeme

Puerto 8089
Configuración del servidor de implementación
Versión
9.2.1(podríamos encontrar algún exploit público)

Búsqueda de exploits
Buscando exploits públicos vemos que es vulnerable a Path Traversal con el CVE-2024-36991:

Al ejecutarlo, revela archivos de configuración, el etc/passwd, logs y historial, archivos y servicios de sistema y scripts en entornos Splunk sin autenticación, explotando un Path Traversal:
Deglose
Usuarios de etc/passwd
Concretamente encuentra 3 usuarios nuevos, además del admin:
Archivos de configuración de Splunk
splunk.secret
Este archivo contiene la clave maestra simétrica AES-256 que Splunk usa para cifrar y descifrar secretos internos como:
Contraseñas en archivos
.conf(comoauthentication.conf,inputs.conf)Tokens
Credenciales LDAP en texto cifrado
Si tienes este archivo, puedes descifrar las contraseñas cifradas en otros archivos .conf del entorno.
autentication.conf
Este archivo define cómo se autentican los usuarios de Splunk, incluyendo:
Reglas de complejidad de contraseñas
Métodos de autenticación externos como LDAP, SAML, etc.
Usuarios locales definidos manualmente
Credenciales cifradas (del usuario Paul Taylor)
De igual manera podríamos capturar estos archivos haciendo un curl con el Path Traversal o con BurpSuite:

Cracking de contraseña cifrada
La contraseña está cifrada, por lo que vamos a usar Splunksecrets para crackearla:
Para usar la herramienta necesitamos el parámetro splunk.secret y la clave cifrada del autentication.conf que descubrimos antes.
Lo guardamos en un archivo de texto secret.txt
Splunksecrets
Cuando nos muestre Ciphertext le pasamos la clave cifrada de usuario Paul Taylor que encontramos antes:
Tenemos una contraseña en plano! Comprobamos que funciona con crackmapexec:
Enumeración con credenciales
Usamos crackmapexec para enumerar con credenciales usuarios del entorno AD:
Vemos que hay varios usuarios nuevos. Los añadiremos a una lista completa de usuarios válidos que hemos recopilado:
Password Spraying
Vamos a ver si esa contraseña la utilizan más usuarios:
Bingo, el usuario Mark Adams también la utiliza!
Análisis con BloodHound
Bloodhound-python
Análisis
Vemos que el usuario mark pertenece al grupo GMSA_MANAGERS (Group Managed Service Accounts:

Los administradores de gMSA tienen privilegios para acceder a las contraseñas de cuentas de servicio gestionadas en Active Directory. Esto permite:
Leer contraseñas en texto claro desde el atributo
msDS-ManagedPassword.Realizar ataques de retransmisión NTLM para acceder a ese atributo.
Ejecutar ataques “gMSA dorado” si se compromete la clave raíz del KDS, generando contraseñas de gMSA sin conexión.
Estos privilegios permiten la suplantación de identidades y posibles escaladas de privilegios.
Leer la contraseña de GMSAPassword
Usaremos gMSADumper:
Mark no tiene este permiso actualmente, pero pertenece al grupo de administradores y puede agregar permisos a sí mismo. Ten en cuenta que gMSA no es un grupo, sino un tipo de cuenta especial, por lo no puedes encontrarlo en bloodhound.
Vamos a conectarnos por evil-winrm:
Puede comprobar el tipo de cuenta de Haze-IT-Backup$ con el siguiente comando:
¿Quién tiene permiso para ver su contraseña? Sólo administradores de dominio
Mark está en el grupo de administradores de gMSA, así que intenta modificar el usuario legible.
Luego volvemos a ejecutar gMSADumper y vemos que nos devuelve el hash del usuario Haze-IT-Backup$:
Intentamos conectarnos por RDP y evil-winrm pero no podemos con este usuario. Para verificar que mark.adams tiene permiso de escritura, podemos ejecutar el siguiente comando para ver la lista de control de acceso de Backup :
Bloodhound con privilegios
Como es un usuario con más privilegios, vamos a volver a ejecutar bloodhound-python con este usuario.
Si se utiliza mark.adams para recopilar datos dentro del dominio, es posible que falte cierta información debido a problemas de permisos. Entonces, la mejor práctica es intentar actualizar el contenido de Bloodhound cuando obtenemos un nuevo usuario en el dominio.
Podemos usar bloodhound-python solamente con el hash, sin la contraseña en plano
Se puede ver que el usuario BACKUP puede modificar el propietario del grupo SUPPORT , y el grupo SUPPORT puede modificar la contraseña de EDWARD Shadow Credential y lanzar ataques.
A continuación, configure Backup como propietario del grupo.

Agregarnos al grupo SUPPORT
Cambiar propietario del grupo support a BACKUP:
Nos añadimos todos los permisos a nosotros mismos:
Y nos agregamos al grupo:
Cambiar la contraseña de EDWARD
Ahora el usuario BACKUP puede cambiar la contraseña del usuario EDWARD usando Shadown Credential:
Generar TGT con PKINITtools
Lo clonamos en nuestro directorio actual, dentro de pywhisker:
Sincronizamos el reloj con el DC
Generamos el TGT
Obtenemos la clave hexadecimal necesaria
Configuramos la variable de entorno
Extraer el hash NTLM
Hemos conseguido el hash de Edward Martin!
User flag
Escalada de privilegios
En el directorio c:/ hay un directorio Backups interesante que contiene un backup de Splunk, que podría contener credenciales de usuarios:
Descarga del backup de Splunk
Después de la descarga, vemos que es el código fuente de respaldo del sitio web, que es diferente del contenido real del sitio web.
Credential Hunting de Splunk
Una vez descomprimimos el zip buscamos cadenas similares a contraseñas y buscamos según el formato de contraseña de Splunk.
Encontramos un password encriptado en authentication.conf. Usaremos splunksecrets para crackearlo.
Nota: Ten en cuenta que el secret aquí proviene del código de backup.
Tenemos la contraseña en plano, y indica que pertenece a un administrador. SI no ha cambiado la contraseña posiblemente podamos acceder a través de la aplicación de Splunk en producción.
Acceso a Splunk

Estamos dentro! Vamos a seguir los pasos de la sección dedicada:
💣Splunk - AtaquesPreparación del exploit
Vamos a usar este repositorio:
Este directorio contiene 2 carpetas, una con ejecutables y una con un archivo de configuración.
Editamos run.ps1 para añadir nuestra IP y puerto de atacante:
También editamos inputs.conf de la siguiente manera:
Una vez guardamos los archivos lo comprimimos con el siguiente comando:
Subida del exploit
Dentro de Apps hacemos click en Install app from file:

Aquí le damos a Browse, cargamos el archivo updater.tar.gz y le damos a Upload:

Antes de darle debemos configurar un listener de Netcat para recibir la conexión, y al darle a Update automátcamente conseguimos la shell!
Tenemos una shell con el usuario alexander.green, vamos a ver información del usuario y sus permisos:
Tenemos SeImpersonatePrivilege habilitado. Podemos consultar la siguiente sección para explotarlo:
También vemos que pertenece al grupo HAZE\Splunk_Admins, por lo que si conseguimos un Meterpreter sería muy fácil escalar privilegios a SYSTEM con getsystem.
Aumentar privilegios con JuicyPotato
Enviamos el JuicyPotato.exe y un binario estático de Netcat a la máquina:
Y lo ejecutamos de la siguiente manera:
El error 10038 significa literalmente: “El descriptor no es un socket.” En el contexto de JuicyPotato, suele indicar que:
El
CLSIDusado no es válido o no permite activación con el token actual.El puerto especificado (
-l 53375) no está abierto o en uso.No se puede establecer comunicación con el COM Server adecuado.
Como el proceso de conseguir CLSIDs válidos es un tanto extenso, vamos a optar por conseguir un Meterpreter y elevar a SYSTEM para hacer un hashdump.
Meterpreter Webdelivery
Configura un Powershell web delivery escuchando en el puerto 8080.
Ejecutar el comando en la máquina objetivo
Recibiendo el Meterpreter
Consiguiendo SYSTEM
Acceso a la flag
Extra: Hashdump
Y ya habríamos comprometido totalmente la máquina!
Última actualización
¿Te fue útil?