Si alguna vez has necesitado auditar las contraseñas locales de un equipo Windows, seguramente te hayas topado con el clásico SAM bloqueado por el sistema. Herramientas como Cain & Abel lo resolvían inyectándose en lsass.exe, pero hoy vamos a ver una ruta más limpia y multiplataforma: copiar los archivos desde un Live USB y procesarlos offline con Impacket + Hashcat.
🧠 Por qué no basta con copiar el SAM
El archivo SAM contiene los hashes de las contraseñas, pero está cifrado con una clave (SYSKEY) que se almacena en el archivo SYSTEM. Ambos están vinculados criptográficamente a esa instalación concreta de Windows, así que no puedes trasplantarlos entre máquinas: el sistema de destino no podrá descifrarlos y fallará al arrancar.
La técnica correcta es:
- Arrancar desde un Live USB (Linux o WinPE).
- Copiar
C:\Windows\System32\config\SAMySYSTEMa un medio externo. - Procesarlos offline en otro equipo.
🛠️ Paso 1: Extraer el hash con Impacket
Impacket incluye la herramienta secretsdump.py, que usa el SYSTEM para descifrar el SAM y volcar los hashes. El comando básico es:
bash
secretsdump.py -sam SAM -system SYSTEM LOCAL
La salida tendrá este formato:
text
Usuario:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
El cuarto campo (después del segundo :) es el hash NTLM que necesitas.
⚠️ Problemas comunes y cómo evitarlos
ModuleNotFoundError: No module named 'impacket'→ Instala Impacket conpipx install impacket(recomendado) en lugar depipdirecto, para evitar conflictos con el Python del sistema.externally-managed-environmenten Linux → Usapipxo un entorno virtual (python3 -m venv), nuncapipglobal.- Error de compilación de
cryptographyen Windows ARM → Instala las Build Tools de Visual Studio con la carga «Desarrollo para escritorio con C++», o directamente usa WSL/macOS. expected str, bytes or os.PathLike object, not NoneType→ Casi siempre significa que uno de los archivos no está en la ruta indicada o el nombre no coincide. Verifica conls -lay usa rutas absolutas. Evita ejecutarpython secretsdump.pydesde una carpeta que contenga unsecretsdump.pylocal: invoca el comando instalado directamente.
🔨 Paso 2: Crackear con Hashcat
Guarda el hash NTLM en un archivo (hash.txt) y lanza Hashcat en modo 1000 (NTLM):
bash
hashcat -m 1000 hash.txt rockyou.txt -r best64.rule
El éxito depende de la robustez de la contraseña: un diccionario con reglas puede tardar segundos en contraseñas débiles, pero una contraseña larga y compleja puede ser inviable por fuerza bruta.
✅ Resumen del flujo
| Paso | Acción |
|---|---|
| 1 | Arrancar con Live USB y copiar SAM + SYSTEM |
| 2 | Instalar Impacket con pipx |
| 3 | secretsdump.py -sam SAM -system SYSTEM LOCAL |
| 4 | Extraer el hash NTLM (4º campo) |
| 5 | hashcat -m 1000 hash.txt diccionario.txt |
🔒 Nota ética
Este procedimiento debe usarse solo en equipos propios o con autorización explícita, como parte de una auditoría de seguridad o una recuperación legítima de acceso. El trasplante de archivos SAM/SYSTEM entre máquinas no funciona por diseño, y modificar el SAM a mano puede dejar el sistema inarrancable.