Categorías
Hacking

DragonJAR Security Conference en Colombia.

Hace algunos días recibí una muy agradable sorpresa, el equipo de DragonJAR ha valorado mi propuesta para asistir como ponente a la próxima edición de la DragonJAR Security Conference que se celebrará en Colombia en el mes de septiembre :-D.
En dicho evento, voy a impartir un taller sobre Python enfocado al pentesting, con un contenido muy similar al del RootedLab que he dado este mismo año en Madrid, pero con una diferencia importante: El tiempo. El taller de la Rooted duraba solamente 8 horas, con lo cual tuvimos que ir bastante rápido sobre los contenidos para poder abarcar todas las cosas interesantes que aporta Python a la hora de ejecutar procesos de pentesting, pero en este caso el taller durará 3 días (24 horas) en las que vamos a poder realizar muchas más practicas y demostraciones, además de explicar algunos detalles sobre el lenguaje que incluso se les escapa a programadores con conocimientos sobre Python.
Por otro lado, el día 18 de septiembre a las 14:00 dará comienzo mi charla sobre la «deep web» y anonimato con TOR. Es una charla en la que voy a hablar sobre lo que es la deep web y voy intentar desmitificar muchas de las ideas preconcebidas que he visto rondando en foros o incluso en comentarios en este blog. Será una charla en la que voy a invitar a los asistentes a reflexionar, a romper sus esquemas y la forma en la que ven la deep web y TOR (atentos los vendemo… emm, «analistas del big data» XD). Luego, me voy a centrar en explicar a grandes rasgos la arquitectura de TOR y cómo realizar pruebas de penetración básicas contra servicios ocultos en la deep web. Finalmente, voy a presentar la nueva versión de Tortazo con la que he estado trabajando los últimos meses con constancia e ilusión. Como vaís a poder ver, el enfoque que le he dado ahora es completamente distinto a la primera versión, será más «amigable» y enfocada a compartir información, además de que la podrá utilizar cualquiera con o sin conocimientos tecnicos, eso si, el «core» de Tortazo, es y seguira siendo igual, es decir, tienes que saber exactamente lo que estas haciendo para poder instalar y configurar la herramienta, no está enfocada a script kiddies ni es un metasploit framework que instalas y utilizas con dos comandos que te encuentras por Internet, tampoco es una herramienta pensada para ejecutarse en la plataforma concreta de tu ordenador, es muy probable que tengas que adaptarla para cumplir con tus necesidades concretas, en ese sentido no hay cambios. De todos modos, como podrán ver los asistentes, la nueva versión será un servicio web que se encontrará disponible en Internet en los próximos meses, con el que se podrá acceder a cientos de servicios ocultos en la deep web de TOR y realizar busquedas muy amplias contra la «onion land», ya sea utilizando una aplicación web o directamente por medio de una arquitectura de servicios REST que se encontrará disponible para todos los usuarios…. creo que ya he dicho demasiado, si realmente te interesa, es mejor que asistas a la charla. 🙂
Tengo muchas ganas de ir a conocer a grandes profesionales de la seguridad informática y estoy completamente dispuesto a aprender todo lo que pueda. Quiero volver a España con una bolsa llena de ideas listas para ponerlas en practica. 😉
Por último, si llevas alguna de las copias del libro de Python para Pentesters o Hacking con Python, te puedo hacer una dedicatoria sin ningún problema, o si te quieres acercar para preguntarme algo o para conocerme allí estaré, no me voy a ir a ninguna parte y tampoco te voy a morder (bueno… ya si eso lo voy viendo) XD.
Nos vemos en Colombia!

Saludos y Happy Hack!
Adastra.

Categorías
Hacking Hacking Python Networking

Pentesting automatizado con Beef. Consumiendo la API Rest de BeEF con Python – Parte 3

La API Rest de BeEF cuenta con todo lo necesario para controlar y automatizar las actividades que se pueden llevar a cabo desde el C&C de BeEF. El hecho de poder invocar a los endpoints definidos en dicha API permite crear rutinas de código que ayuden a ejecutar los procesos de recolección de información y explotación de una forma mucho más rápida y eficiente. Tal como se ha enseñado en las dos entradas anteriores sobre BeEF, utilizar esta API no es nada complicado y solamente es necesario ejecutar las peticiones HTTP con los parámetros correctos. Para hacerlo, se puede utilizar herramientas como wget, curl o incluso netcat/socat y si se quiere automatizar el uso de estas herramientas, una buena forma de hacerlo consiste en crear un script en bash que que las ejecute. Evidentemente también es posible utilizar cualquier lenguaje de programación y ejecutar las peticiones HTTP de forma automatizada utilizando las diferentes librerías que proporcionan todos los lenguajes de programación modernos. Dicho esto, a continuación se explicará cómo invocar a algunos de los endpoints de BeEF utilizando Python y en el próximo artículo, lo mismo pero utilizando Ruby.

Consumiendo la API de BeEF con Python

Python cuenta con un considerable número de librerías para realizar peticiones HTTP, lo que facilita muchísimo las cosas a la hora de crear clientes o incluso servicios utilizando Python y este protocolo. Una de las más conocidas y utilizadas es “requests” ya que con muy pocas líneas de código se puede crear un cliente HTTP completamente funcional y soportando todas las características del protocolo HTTP 1.1, algo que en otras librerías como urllib, urllib2 o httplib requiere más líneas de código y un poco más de esfuerzo. Con esto en mente se podría crear un script utilizando requests para consumir la API Rest de BeEF, pero para facilitar aun más las cosas, existe una librería pequeña y simple llamada BeEF-API que ya se encarga de interactuar con los endpoints de BeEF y solamente es necesario invocar a los métodos adecuados de dicha librería. Se encuentra disponible en el siguiente repositorio de GitHub: https://github.com/byt3bl33d3r/BeEF-API y como ocurre con prácticamente todas las librerías en Python, para instalarla solamente hace falta ejecutar el script “setup.py” con el parámetro “install”.
Esta librería se encarga de gestionar la autenticación con BeEF y almacenar internamente el token generado, el cual como se ha visto en el primer artículo, es requerido para invocar algunos de los endpoints de la API Rest.

 

[sourcecode language=»python»]
>python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from beefapi import BeefAPI
>>> beef = BeefAPI({})
>>> beef.login(‘beef’, ‘beef’)
True
[/sourcecode]

Como se puede apreciar, todo parte de la creación un objeto del tipo “BeefAPI”, cuyo constructor recibe como argumento un diccionario, el cual puede tener las claves “host” y “port” en el caso de que se quiera indicar una interfaz de red y puertos distintos a los valores por defecto (127.0.0.1:3000). Posteriormente se invoca al método “login” enviando como parámetros el usuario y la contraseña para autenticarse en el sistema.
Una vez el usuario se ha conseguido autenticar y se ha generado un token para la sesión actual, la librería dispone de una serie de métodos para invocar distintos endpoints, gestionando el token de autenticación de forma automática en cada una de dichas invocaciones. Algunos de los métodos disponibles en una instancia de la clase BeefAPI, permiten obtener los módulos disponibles en la instancia de Beef, buscar módulos que contengan una cadena determinada, listar todos los navegadores que han ejecutado el “hook” de Beef y que se encuentran “online”, así como aquellos que se encuentran “offline” y por supuesto, ejecutar módulos contra todos o solamente algunos de los navegadores enganchados. Esta librería utiliza internamente “requests” y los valores de retorno de cada petición siempre son diccionarios que representan las repuestas emitidas por cada uno de los endpoints invocados en formato JSON.

beefpython1Listando todos los módulos disponibles en BeEF

Como mencionaba antes, también es posible buscar módulos que cumplan con un patrón de texto determinado, pudiendo filtrar de esta forma aquellos módulos que sean de interés para el usuario.

beefpython2Filtrando módulos en BeEF

Del mismo modo que se pueden realizar búsquedas y listar los módulos disponibles en BeEF, también es posible hacer operaciones similares contra los navegadores que se encuentra online y offline.

beefpython3Listando navegadores hookeados

Y por último, pero no menos importante, es posible ejecutar un módulo determinado contra uno o varios navegadores que se encuentran “hookeados” en BeEF. Para hacerlo, en primer lugar hay que obtener el objeto correspondiente al navegador contra el que se desea ejecutar el módulo y en segundo lugar, se debe especificar el identificador del módulo que se desea utilizar contra el navegador. Cada objeto del tipo “Session” (navegador hookeado) tiene un método llamado “run” el cual recibe como argumento un valor númerico que representará el identificador de un módulo. Dicho método se encargará de buscar el módulo identificado con el valor especificado y posteriormente, se encargará de lanzarlo contra el navegador hookeado, algo que como se puede ver más abajo, se consigue con pocas lineas de código.

[sourcecode language=»python»]
>>> for hook in beef.hooked_browsers.online:
… commandId = hook.run(243)["command_id"]
… print beef.modules.findbyid(243).results(hook.session, commandId)
[/sourcecode]

En este caso, el módulo con el identificador “243” corresponde al módulo “Detect tor”, el cual como su nombre lo indica, intenta determinar si el navegador en cuestión está utilizando TOR para navegar. El método “run” es el encargado de ejecutar el módulo especificado y de retornar una estructura en formato “JSON” con un identificador del comando, el cual debe ser utilizado posteriormente para obtener los resultados que ha devuelto el módulo.

Como se ha podido ver, utilizar está librería no es complicado y es una buena forma automatizar las tareas que pueden llevarse a cabo desde la consola web de BeEF. En el próximo artículo hablaré sobre cómo hacer esto mismo con Ruby.

Saludos y Happy Hack!
Adastra.