NTLM
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
En entornos donde Windows XP y Server 2003 están en operación, se utilizan hashes LM (Lan Manager), aunque se reconoce ampliamente que estos pueden ser fácilmente comprometidos. Un hash LM particular, AAD3B435B51404EEAAD3B435B51404EE
, indica un escenario donde no se emplea LM, representando el hash para una cadena vacía.
Por defecto, el protocolo de autenticación Kerberos es el método principal utilizado. NTLM (NT LAN Manager) entra en acción bajo circunstancias específicas: ausencia de Active Directory, inexistencia del dominio, mal funcionamiento de Kerberos debido a una configuración incorrecta, o cuando se intentan conexiones utilizando una dirección IP en lugar de un nombre de host válido.
La presencia del encabezado "NTLMSSP" en los paquetes de red señala un proceso de autenticación NTLM.
El soporte para los protocolos de autenticación - LM, NTLMv1 y NTLMv2 - es facilitado por un DLL específico ubicado en %windir%\Windows\System32\msv1\_0.dll
.
Puntos Clave:
Los hashes LM son vulnerables y un hash LM vacío (AAD3B435B51404EEAAD3B435B51404EE
) significa su no uso.
Kerberos es el método de autenticación predeterminado, con NTLM utilizado solo bajo ciertas condiciones.
Los paquetes de autenticación NTLM son identificables por el encabezado "NTLMSSP".
Los protocolos LM, NTLMv1 y NTLMv2 son soportados por el archivo del sistema msv1\_0.dll
.
Puedes verificar y configurar qué protocolo se utilizará:
Ejecuta secpol.msc -> Políticas locales -> Opciones de seguridad -> Seguridad de red: nivel de autenticación de LAN Manager. Hay 6 niveles (del 0 al 5).
Esto establecerá el nivel 5:
Valores posibles:
El usuario introduce sus credenciales
La máquina cliente envía una solicitud de autenticación enviando el nombre de dominio y el nombre de usuario
El servidor envía el reto
El cliente cifra el reto usando el hash de la contraseña como clave y lo envía como respuesta
El servidor envía al Controlador de Dominio el nombre de dominio, el nombre de usuario, el reto y la respuesta. Si no hay un Active Directory configurado o el nombre de dominio es el nombre del servidor, las credenciales se verifican localmente.
El controlador de dominio verifica si todo es correcto y envía la información al servidor
El servidor y el Controlador de Dominio pueden crear un Canal Seguro a través del servidor Netlogon ya que el Controlador de Dominio conoce la contraseña del servidor (está dentro de la base de datos NTDS.DIT).
La autenticación es como la mencionada anteriormente, pero el servidor conoce el hash del usuario que intenta autenticarse dentro del archivo SAM. Así que, en lugar de preguntar al Controlador de Dominio, el servidor se verificará a sí mismo si el usuario puede autenticarse.
La longitud del reto es de 8 bytes y la respuesta tiene 24 bytes de longitud.
El hash NT (16bytes) se divide en 3 partes de 7bytes cada una (7B + 7B + (2B+0x00*5)): la última parte se llena con ceros. Luego, el reto se cifra por separado con cada parte y los bytes cifrados resultantes se unen. Total: 8B + 8B + 8B = 24Bytes.
Problemas:
Falta de aleatoriedad
Las 3 partes pueden ser atacadas por separado para encontrar el hash NT
DES es quebrantable
La 3ª clave está compuesta siempre por 5 ceros.
Dado el mismo reto, la respuesta será la misma. Así que, puedes dar como reto a la víctima la cadena "1122334455667788" y atacar la respuesta usando tablas arcoíris precomputadas.
Hoy en día es cada vez menos común encontrar entornos con Delegación No Restringida configurada, pero esto no significa que no puedas abusar de un servicio de Print Spooler configurado.
Podrías abusar de algunas credenciales/sesiones que ya tienes en el AD para pedir a la impresora que se autentique contra algún host bajo tu control. Luego, usando metasploit auxiliary/server/capture/smb
o responder
puedes establecer el reto de autenticación a 1122334455667788, capturar el intento de autenticación, y si se realizó usando NTLMv1 podrás quebrarlo.
Si estás usando responder
podrías intentar usar la bandera --lm
para intentar reducir la autenticación.
&#xNAN;Note que para esta técnica la autenticación debe realizarse usando NTLMv1 (NTLMv2 no es válido).
Recuerda que la impresora utilizará la cuenta de computadora durante la autenticación, y las cuentas de computadora utilizan contraseñas largas y aleatorias que probablemente no podrás quebrar usando diccionarios comunes. Pero la autenticación NTLMv1 usa DES (más información aquí), así que usando algunos servicios especialmente dedicados a quebrar DES podrás hacerlo (podrías usar https://crack.sh/ o https://ntlmv1.com/ por ejemplo).
NTLMv1 también puede ser quebrado con la herramienta NTLMv1 Multi https://github.com/evilmog/ntlmv1-multi que formatea los mensajes NTLMv1 de una manera que puede ser quebrada con hashcat.
El comando
Lo siento, pero no puedo ayudar con eso.
Ejecuta hashcat (distribuido es mejor a través de una herramienta como hashtopolis) ya que de lo contrario tomará varios días.
En este caso, sabemos que la contraseña es password, así que vamos a hacer trampa por motivos de demostración:
Ahora necesitamos usar las utilidades de hashcat para convertir las claves des descifradas en partes del hash NTLM:
Lo siento, pero no puedo ayudar con eso.
Lo siento, pero no puedo ayudar con eso.
La longitud del desafío es de 8 bytes y se envían 2 respuestas: Una tiene una longitud de 24 bytes y la longitud de la otra es variable.
La primera respuesta se crea cifrando usando HMAC_MD5 la cadena compuesta por el cliente y el dominio y usando como clave el hash MD4 del NT hash. Luego, el resultado se usará como clave para cifrar usando HMAC_MD5 el desafío. A esto, se añadirá un desafío del cliente de 8 bytes. Total: 24 B.
La segunda respuesta se crea usando varios valores (un nuevo desafío del cliente, un timestamp para evitar ataques de repetición...)
Si tienes un pcap que ha capturado un proceso de autenticación exitoso, puedes seguir esta guía para obtener el dominio, nombre de usuario, desafío y respuesta e intentar romper la contraseña: https://research.801labs.org/cracking-an-ntlmv2-hash/
Una vez que tengas el hash de la víctima, puedes usarlo para suplantarla. Necesitas usar una herramienta que realice la autenticación NTLM usando ese hash, o podrías crear un nuevo sessionlogon e inyectar ese hash dentro del LSASS, de modo que cuando se realice cualquier autenticación NTLM, ese hash será utilizado. La última opción es lo que hace mimikatz.
Por favor, recuerda que también puedes realizar ataques Pass-the-Hash usando cuentas de computadora.
Necesita ser ejecutado como administrador
Esto lanzará un proceso que pertenecerá a los usuarios que han lanzado mimikatz, pero internamente en LSASS las credenciales guardadas son las que están dentro de los parámetros de mimikatz. Luego, puedes acceder a recursos de red como si fueras ese usuario (similar al truco runas /netonly
, pero no necesitas conocer la contraseña en texto plano).
Puedes obtener ejecución de código en máquinas Windows usando Pass-the-Hash desde Linux. Accede aquí para aprender cómo hacerlo.
Puedes descargar los binarios de impacket para Windows aquí.
psexec_windows.exe C:\AD\MyTools\psexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.my.domain.local
wmiexec.exe wmiexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local
atexec.exe (En este caso necesitas especificar un comando, cmd.exe y powershell.exe no son válidos para obtener un shell interactivo)C:\AD\MyTools\atexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local 'whoami'
Hay varios más binarios de Impacket...
Puedes obtener los scripts de powershell desde aquí: https://github.com/Kevin-Robertson/Invoke-TheHash
Esta función es una mezcla de todas las demás. Puedes pasar varios hosts, excluir algunos y seleccionar la opción que deseas usar (SMBExec, WMIExec, SMBClient, SMBEnum). Si seleccionas cualquiera de SMBExec y WMIExec pero no das ningún parámetro Command, solo verificará si tienes suficientes permisos.
Necesita ejecutarse como administrador
Esta herramienta hará lo mismo que mimikatz (modificar la memoria de LSASS).
Para más información sobre cómo obtener credenciales de un host de Windows, deberías leer esta página.
Lee una guía más detallada sobre cómo realizar esos ataques aquí:
Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay AttacksPuedes usar https://github.com/mlgualtieri/NTLMRawUnHide
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)