1 - Overpass The Hash / Pass The Key (PTK)

El ataque Pass The Hash (PTH) tradicional consiste en utilizar el hash de una contraseña para suplantar a un usuario sin necesidad de conocer su contraseña en texto claro. En el contexto de Kerberos, este enfoque se denomina Overpass The Hash o también Pass The Key.

En este ataque, si un atacante obtiene el hash NTLM de un usuario, puede derivar la clave de cifrado que Kerberos utiliza para ese usuario. A partir de allí, puede generar un mensaje de tipo KRB_AS_REQ válido y solicitar un Ticket Granting Ticket (TGT) al KDC. Esto le permite autenticarse en el dominio como si fuese el usuario legítimo y obtener tickets para acceder a múltiples servicios.

Los hashes de los usuarios pueden obtenerse de distintas formas:

  • Extracción de los archivos SAM (en estaciones de trabajo) o NTDS.DIT (en controladores de dominio).

  • Dumping de memoria del proceso LSASS, usando herramientas como Mimikatz, donde también pueden encontrarse contraseñas en texto claro.

En el siguiente ejemplo ya comprometimos el equipo objetivo y logramos extraer los archivos SYSTEM y ntds.dit para luego realizar una extracción de hashes NTLM con impacket-secretsdump

┌──(root㉿kali)-[/home/kali/Documents/THM/RAZORBLACK]
└─# impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Target system bootKey: 0xf1582a79dd00631b701d3d15e75e59f6
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Searching for pekList, be patient
[*] PEK # 0 found and decrypted: f6162bb347993035d66a15417d73a667
[*] Reading and decrypting hashes from ntds.dit 
Administrator:500:aad3b435b51404eeaad3b435b51404ee:9689931bed40ca5a2ce1218210177f0c:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HAVEN-DC$:1000:aad3b435b51404eeaad3b435b51404ee:c7e0bf27c637789e2b64a39e103a8a66:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:fa3c456268854a917bd17184c85b4fd1:::
raz0rblack.thm\xyan1d3:1106:aad3b435b51404eeaad3b435b51404ee:bf11a3cbefb46f7194da2fa190834025:::
📌Desglosando el Output
  • Target system bootKey → Clave maestra usada por Windows para cifrar información sensible; extraída del archivo SYSTEM.

  • Dumping Domain Credentials → Inicia el volcado de credenciales desde la base de datos de AD.

  • Searching for pekList → Busca la lista de claves de cifrado PEK (Password Encryption Keys) dentro del ntds.dit.

  • PEK #0 found and decrypted → La primera clave PEK fue encontrada y descifrada con éxito; se usará para desencriptar los hashes.

  • Reading and decrypting hashes from ntds.dit → Comienza la lectura y descifrado de los hashes reales de los usuarios.

  • Administrator:500 → Usuario "Administrator" con RID 500 (cuenta admin por defecto en AD).

  • aad3b435b51404eeaad3b435b51404ee → LM hash vacío (valor por defecto cuando está deshabilitado).

  • 9689931bed40ca5a2ce1218210177f0c → NTLM hash del usuario, útil para cracking o pass-the-hash.

  • Guest:501 → Cuenta de invitado, generalmente deshabilitada o sin contraseña.

  • 31d6cfe0d16ae931b73c59d7e0c089c0 → Hash vacío, indica que no tiene contraseña o está deshabilitada.

  • HAVEN-DC$:1000 → Cuenta de máquina del controlador de dominio, termina en $ por convención.

  • c7e0bf27c637789e2b64a39e103a8a66 → Hash NTLM de la cuenta de equipo, útil en ataques como RBCD.

  • krbtgt:502 → Cuenta especial usada por el servicio Kerberos para emitir tickets; su hash permite crear Golden Tickets.

  • fa3c456268854a917bd17184c85b4fd1 → Hash NTLM de krbtgt, altamente sensible.

  • raz0rblack.thm\xyan1d3:1106 → Usuario del dominio; probablemente una cuenta activa de un usuario real.

  • bf11a3cbefb46f7194da2fa190834025 → Hash NTLM de esa cuenta

Este comando extrae hashes de contraseñas de Active Directory a partir de un volcado offline de:

  • el archivo SYSTEM (donde está la clave de arranque de Windows - bootKey)

  • el archivo ntds.dit (la base de datos de AD)

Y usa el modo LOCAL, que significa que los archivos están en el disco local, no se accede remotamente. De los hashes que obtuvimos el que vamos a usar es el de Administrator, pero hay que tener en cuenta lo siguiente, que parte del hash vamos a usar

| Usuario                | RID  | LM Hash                          | NTLM Hash                       |
|------------------------|------|----------------------------------|---------------------------------|
| Administrator          | 500  | aad3b435b51404eeaad3b435b51404ee | 9689931bed40ca5a2ce1218210177f0c|
| Guest                  | 501  | aad3b435b51404eeaad3b435b51404ee | 31d6cfe0d16ae931b73c59d7e0c089c0|
| HAVEN-DC$              | 1000 | aad3b435b51404eeaad3b435b51404ee | c7e0bf27c637789e2b64a39e103a8a66|
| krbtgt                 | 502  | aad3b435b51404eeaad3b435b51404ee | fa3c456268854a917bd17184c85b4fd1|
| raz0rblack.thm\\xyan1d3| 1106 | aad3b435b51404eeaad3b435b51404ee | bf11a3cbefb46f7194da2fa190834025|

¿Por qué se usa NTLM en Pass-the-Hash y no el LM?

  • LM (LAN Manager) es un algoritmo de hash antiguo y débil:

    • Fue diseñado en los años 80.

    • Divide la contraseña en bloques de 7 caracteres.

    • Convierte todo a mayúsculas.

    • Es extremadamente fácil de crackear y está obsoleto desde Windows Vista.

  • En la mayoría de sistemas modernos:

    • El LM hash está deshabilitado por defecto.

    • Se representa como aad3b435b51404eeaad3b435b51404ee cuando no está en uso.

  • NTLM es más moderno (aunque inseguro hoy en día):

    • Windows aún lo usa en muchos entornos para autenticación.

    • Es el hash que Windows realmente utiliza en protocolos como SMB, WinRM, RDP, etc.

    • Por eso, es el que se necesita para hacer Pass-the-Hash (PtH).

Si te interesa comprender mejor cómo funcionan estos hashes te recomiendo que leas el siguiente artículo

Una vez que tenemos el hash del usuario Administrator podemos hacer el Pass the Hash, en este caso usamos EvilWinRM pasandole el hash NTLM con el parámetro -H

┌──(root㉿kali)-[/home/kali/Documents/THM/RAZORBLACK]
└─# evil-winrm -i raz0rblack.thm -u administrator -H 9689931bed40ca5a2ce1218210177f0c 
                                        
Evil-WinRM shell v3.7
                                        
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline                                                          
                                        
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion                                                                     
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator>

Este ataque no interviene específicamente en algún proceso de kerberos, sino que, a través del robo de hashes del equipo objetivo podemos ganar credenciales para obtener acceso privilegiado al sistema, luego con esa cuenta podríamos comunicarnos con el KDC para solicitar tickets de servicios, pero en esta sección no mostramos esa parte.

Last updated