Buenas a tod@s, el día de hoy les traigo un write-up
de la máquina Blackfield
de HackTheBox
.
Como en cada write-up
, lo primero hacemos es lanzar un escaneo de puertos con nmap
con el objetivo de identificar potenciales vías de ataque.
Como podrán ver a continuación, se específica el parámetro -sS
con el objetivo de que el escaneo sea vía TCP SYNC
, lo que de cierto modo me permitirá agilizarlo, debido a que no hay Three-Way-HandShake
como en TCP
.
Lo otro es que se configura el --min-rate
en 3000
con la idea de no enviar una cantidad menor a 3000
paquetes por segundo.
Advertencia: No aconsejo lanzar este escaneo en entornos productivos debido a que es ultra ruidoso y agresivo. En este caso lo estoy lanzando en un entorno controlado de HackTheBox
.
1
nmap -v -sS --min-rate 3000 -n -Pn -p- 10.10.10.192 -oG tcp_ports.txt
En el resultado del escaneo, se identifican varios servicios de interés, entre ellos: WinRPC, SMB, LDAP, WinRM y Kerberos. Sin embargo, ya con sólo ver al servicio Kerberos
, podemos deducir que estamos ante un entorno de Active Directory. Por lo que ya podemos saber más o menos cómo enforcar nuestra estrategia de ataque y enumeración.
1
nmap -v -sCV -p53,88,135,389,445,593,3268,5985 10.10.10.192 -oN scan_ports.txt
Posterior a esto, enumeramos los recursos compartidos a través el servicio SMB, aprovechando el null session.
1
crackmapexec smb blackfield.local -u 'null' -p '' --shares
Como se puede ver en imagen, sobre el recurso $IPC
directamente no encontramos archivos o directorios importantes.
Sin embargo, en el recurso profiles$
identificamos un listado extenso de carpetas con nombres de usuarios.
Dado que estamos ante un entorno AD, agarramos todos los nombres de usuarios y, con la herramienta kerbrute
validamos si efectivamente estos se encuentran registrados en el dominio.
Una vez identificados los usuarios del dominio, lanzamos un ASREP-Roasting Attack con el cual logramos solicitar el Ticket Granting Ticket (TGT)
del usuario support
, debido a que este tiene habilitado el privilegio UF_DONT_REQUIRE_PREAUTH
.
1
impacket-GetNPUsers -no-pass -usersfile domain_users.txt blackfield.local/
Posterior a ello, teniendo en cuenta que el TGT
se encuentra cifrado con la contraseña del usuario, y haciendo uso de la herramienta john
, logramos crackear dicho hash exitosamente.
Considerando que tenemos a más de un usuario en mano, lanzamos un Password Sprying con el objetivo de verificar que si la contraseña pertenece a más de un usuario en el dominio.
1
crackmapexec smb blackfield.local -u domain_users.txt -p '#00^BlackKnight' --continue-on-success
En este caso, al lanzar el ataque, validamos que dicha contraseña pertenece al usuario support
, únicamente.
Como se puede observar en imagen, también verificamos que la contraseña del usuario es válida sólo sobre el servicio SMB.
En este caso no lo es sobre WinRM, debido a que support
no es parte del grupo Remote Management Users
.
Como se observa en la imagen, al enumerar los recursos compartidos con las credenciales del usuario support
logramos identificar que este tiene privilegios de lectura sobre el NETLOGON
y el SYSVOL
.
Al acceder al NETLOGON
no se encuentran directorios ni archivos. Sin embargo, en el SYSVOL
si, lo cual nos podría permitir obtener credenciales a través del archivo Groups.xml
del Group Policy.
Para esto, hacemos una montura sobre nuestro sistema del recurso SYSVOL
, sin embargo, posterior a esto no encontramos el archivo Groups.xml
.
Dado que en el servicio SMB no existen archivos de completo interés, lanzamos la herramienta BloodHound-Python
con la cual, enumeramos ampliamente la estructura de permisos y accesos configurados en el directorio activo.
Al analizar el resultado obtenido observamos que el usuario support
tiene el permiso ForceChangePassword
sobre el usuario audit2020
, lo cual significa que support
le puede cambiar la contraseña a audit2020
.
Para ejecutar dicha acción desde Linux, hacemos uso de la herramienta net rpc
, con la cual logramos cambiarle la contraseña al usuario exitosamente.
1
net rpc password "audit2020" "Admin12345$" -U "Blackfield.Local"/"support"%"#00^BlackKnight" -S "10.10.10.192
Al enumerar los recursos compartidos, sobre los cuales tiene acceso audit2020
, podemos ver que puede leer el contenido de forensic
.
En forensic
se identifican tres directorios, los cuales parecen ser el resultado de un análisis forense ejecutado sobre el servidor.
En la carpeta memory_analysis
, donde están los resultados de lo que debió ser el resultado de un análisis de la memoria en tiempo de ejecución, se identifica un comprimido interesante que corresponde al lsass.zip
.
En principio esto es interesante, ya que el Local Security Authority SubSystem (LSASS) es un proceso que contiene a todos los Security Service Providers (SSP), los cuales son paquetes encargados específicamente de gestionar distintos de procesos de autenticación en el entorno.
Dependiendo del caso, el SSP que gestione la autenticación almacenará la contraseña del usuario y le permitirá no tener que autenticarse cada vez que necesite acceder al servicio, por le menos en un corto periodo de tiempo.
Dado esto, descargamos el comprimido lsass.zip
en nuestro equipo local.
Al descomprimir dicho archivo, obtenemos un archivo de extensión dmp
, lo cual corresponde a un fichero de volcado de memoria.
Para poder volcar el contenido de este archivo, en texto claro, usamos la herramienta pypykatz
, utilizando el modo de volcado del LSA.
1
pypykatz lsa minidump lsass.DMP
Habiendo hecho esto, logramos obtener el hash NT de svc_backup
, el cual nos permite autenticarnos en el servidor a través del servicio WinRM
, debido a que dicho usuario forma parte del grupo Remote Management Users
.
Al listar los grupos en los que está el usuario svc_backup
vemos que pertenece a Backup Operators
.
Por consecuencia también tiene habilitado el privilegio SeBackupPrivilege
.
Un usuario perteneciente a dicho grupo puede crear una copia de seguridad del sistema de archivos, o restaurar ficheros, a pesar de las medidas de seguridad que se encuentren implementadas en el servidor.
Considerando esto, podríamos pensar fácilmente en volcar la SAM, sin embargo, esto sólo aplica para un entorno local de Windows, en el que el equipo no está conectado a un directorio activo.
Para el caso AD, tenemos que usar diskshadow
y crear un snapshot del sistema de archivos en otra partición del disco. En este caso los comandos se listan en un archivo de texto debido a que, con el parámetro /s
estos serán ejecutados de igual forma, sin necesidad de acceder a la consola interactiva.
Como podemos ver en imagen, los comandos de diskshadow
se ejecutan sin errores, por lo que la copia del sistema de archivos es realizada exitosamente.
Estando hecho el backup, utilizamos la herramienta robocopy
para hacer una copia exacta del NTDS.dit
, almacenado en la partición E:
, hacía una ruta del servidor que se encuentre bajo nuestro control.
Teniendo el NTDS.dit
y, habiendo hecho lo mismo con el SYSTEM
, tenemos todo para volcar los hashes NTLM
de todos los usuarios del dominio.
Como se muestra en la imagen, en este caso ejecutamos el siguiente comandos usando impacket-secretsdump
, pasando como parámetros tanto el NTDS.dit
como el SYSTEM
, con lo que logramos volcar todos los hashes NTLM
de los usuarios.
1
impacket-secretsdump -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL
Habiendo hecho esto, podemos usar el hash NTLM
del usuario Administrator
para autenticarnos en el servidor mediante WinRM y lograr el control total del Domain Controller.
Referencias
- Extract credentials from lsass remotely: https://en.hackndo.com/remote-lsass-dump-passwords/
- Privileged Groups (Hacktricks): https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges
- Windows Authentication Architecture (Microsoft Learn): https://learn.microsoft.com/en-us/windows-server/security/windows-authentication/windows-authentication-architecture
- Credential Dumping: Local Security Authority (LSA/LSASS.EXE): https://www.hackingarticles.in/credential-dumping-local-security-authority-lsalsass-exe/
- What is Backup Operators (WindowsTechno): https://windowstechno.com/what-is-backup-operators/
- Copy / Xcopy / Robocopy: Which Is Better for Me? (EaseUS): https://www.easeus.com/knowledge-center/copy-vs-xcopy-vs-robocopy.html