
marco de explotación extensible distribuido en una arquitectura modular multitarea
# El Marco de Explotación Brutus Un marco de explotación educativo basado en una arquitectura modular y altamente extensible de multitarea y multiprocesamiento. ## Tabla de Contenidos - [Introducción](#intro) - [Demostraciones](#demo) - [Instalación](#install) - [Uso](#usage) - [Características](#features) - [Documentación](#docs) - [Gestión de Direcciones MAC](#macchanger) - [Escáner de Red ARP](#networkscanner) - [Spoofing ARP](#arpspoof) - [Sniffer de Paquetes Multitarea](#packetsniff) - [Escáner de Puertos Multitarea](#portscan) - [Rastreador Web Basado en Eventos](#webcrawl) - [Escáner de Subdominios](#subdomain) ## <a name="intro"></a> Brutus: una Introducción ¿Buscas la versión 1? Consulta las ramas en este repositorio. Brutus es un marco de explotación educativo escrito en Python. Automatiza exploits de red previos y posteriores a la conexión, así como reconocimiento basado en web. Como marco ligero, Brutus busca minimizar la dependencia de bibliotecas de terceros. Optimizado para Kali Linux, Brutus también es compatible con macOS y la mayoría de las distribuciones de Linux, con una interfaz de línea de comandos totalmente interactiva y un sistema de complementos versátil. Brutus cuenta con una arquitectura modular altamente extensible. Los exploits incluidos (capa de complementos) consisten en varios módulos desacoplados que se ejecutan sobre una 'capa de tareas' compuesta por pools de hilos y colas asíncronas thread-safe (la que sea más apropiada para el módulo en cuestión). El hilo principal se ejecuta sobre un pool de multiprocesamiento que gestiona el contexto de la aplicación y envía nuevos procesos para que las tareas puedan ejecutarse en segundo plano, en shells separados, etc. La capa de interfaz de usuario también está desacoplada y es extensible. Por defecto, Brutus incluye una interfaz de línea de comandos basada en menús, pero no hay razón para no añadir adaptadores para una GUI, un analizador de argumentos, o incluso una API HTTP o una llamada a procedimiento remoto. Por último, Brutus tiene una capa de utilidades con funciones comunes para operaciones del sistema de archivos, gestión del shell (emulador de terminal), métodos de persistencia y metadatos del sistema. Si solo te interesa piratear algo de Python, siéntete libre de extraer los scripts directamente; cada módulo se puede invocar de forma independiente. ## <a name="demo"></a> Demostraciones Demostración de escaneo web y compilación de cargas útiles: [ver mp4](https://streamable.com/scybvn)  ## <a name="install"></a> Instalación Probablemente necesitarás las siguientes dependencias: - sslstrip - pipenv Brutus está optimizado para Kali Linux. Hay mucha información en línea sobre cómo ejecutar Kali Linux en una máquina virtual. Para instalar: ```bash pipenv install ``` ## <a name="usage"></a> Uso Ejecutar: ```bash pipenv run brutus ``` Probar: ```bash pipenv run test ``` Verificar el código: ```bash pipenv run lint ``` Configurar Git Hooks para desarrollo: ```bash pipenv run setup ``` Siéntete libre de abrir PRs con propuestas de funcionalidades, correcciones de errores, etc. Ten en cuenta que gran parte de este proyecto aún está en progreso. La base está ahí y lista para que la puedas ampliar. ### <a name="features"></a> Brutus: Características y Módulos Incluidos Brutus incluye varios módulos que se pueden generalizar como pertenecientes a tres macro-categorías: *basados en red*, *basados en web* y *cargas útiles*. Esta última categoría es una biblioteca de compiladores y cargas útiles acompañantes; las cargas útiles se pueden compilar a través del menú interactivo de línea de comandos de Brutus; las cargas útiles compiladas se pueden cargar posteriormente en muchos de los módulos de red aplicables de Brutus. La capa base de Brutus utiliza hilos POSIX para la multitarea concurrente. Algunos módulos (esencialmente cualquier cosa con muchas operaciones de E/S) utilizan en su lugar las bibliotecas async I/O de Python y se ejecutan sobre una abstracción sobre el bucle de eventos predeterminado de Python. **Utilidades/Scripts Incluidos** - Gestión de Tablas IP - Degradar HTTPS a HTTP - Activar Modo Monitor - Activar Reenvío de Puertos - Keylogger ### <a name="docs"></a> Documentación #### <a name="macchanger"></a> Cambiador de Direcciones MAC de 48 bits ([ver fuente](https://github.com/MatthewZito/Brutus/blob/master/packages/mac_changer/mac_changer.py)) NOTA: Esta herramienta es para direcciones MAC de 48 bits, con un formato de byte predeterminado %02x. MAC (Control de Acceso al Medio) es una dirección permanente, física y única asignada a las interfaces de red por los fabricantes de dispositivos. Esto significa que incluso tu tarjeta inalámbrica, por ejemplo, tiene su propia dirección MAC única. La dirección MAC, análoga a una IP en Internet, se utiliza dentro de una red para facilitar la entrega adecuada de recursos y datos (es decir, paquetes). Una interacción generalmente consistirá en una MAC de origen y una MAC de destino. Las direcciones MAC pueden identificarte, ser filtradas o tener restricciones de acceso. Es importante señalar que estas direcciones únicas no son efímeras; son persistentes y permanecerán asociadas a un dispositivo si un usuario lo instala en otra máquina. Pero las dos no tienen que estar inextricablemente entrelazadas... Este módulo aceptará como entrada del usuario cualquier dispositivo inalámbrico y cualquier dirección MAC válida a la que el usuario desee reasignar dicho dispositivo. El programa es simple como para que necesite explicarlo mucho más: utiliza el módulo subprocess para automatizar la secuencia de comandos de shell necesarios para desactivar la interfaz inalámbrica, reasignar la MAC y reiniciarla. Si estás cambiando activamente tu dirección MAC, podría ser prudente tener algún tipo de estructura de validación o método de orden superior para asegurar que 1) el dispositivo inalámbrico existe, 2) el dispositivo inalámbrico admite una dirección MAC, 3) la dirección MAC ingresada por el usuario tiene un formato válido, y 4) la dirección MAC del dispositivo inalámbrico se ha actualizado con éxito. Esta herramienta automatiza estas funciones. Al seleccionar la opción 'generate' en lugar de una dirección MAC específica, el programa generará una dirección MAC válida según las especificaciones IEEE. Me entusiasma haber implementado funcionalidad extendida para generar no solo direcciones MAC totalmente aleatorias (y válidas), sino también direcciones MAC que comienzan con un prefijo de proveedor específico (OUI), o que se generan con opciones multicast y/o UAA. Estas opciones activan lógica de código de bytes en el método generador, que se aumentan según las especificaciones IEEE. Obtén más información sobre direcciones MAC [aquí](https://en.wikipedia.org/wiki/Organizationally_unique_identifier#Bit-reversed_representation). #### <a name="networkscanner"></a> Escáner de Red Basado en ARP ([ver fuente](https://github.com/MatthewZito/Brutus/blob/master/packages/network_scanner/network_scanner.py)) El escáner de red es otra herramienta muy útil, y formidable cuando se usa junto con el cambiador de MAC mencionado anteriormente. Este escáner utiliza la funcionalidad de solicitud ARP al aceptar como entrada del usuario una dirección IP IPv4 o IPv6 válida y un rango de subred acompañante (aunque opcional). El programa toma la IP y/o rango dados, luego los valida según las especificaciones IEEE (nuevamente, esta validación se ejecuta contra los estándares IPv4 e IPv6). Finalmente, se instancia un objeto de broadcast con la IP dada y una trama Ethernet generada; este objeto nos devuelve una lista de todos los dispositivos conectados dentro de la red y el rango dados, mapeando sus IPs a las respectivas direcciones MAC. El programa genera una tabla con estas asociaciones, que luego podría usarse como entrada para el cambiador de MAC si las circunstancias lo requieren. #### <a name="arpspoof"></a> Spoofing ARP Automatizado ([ver fuente](https://github.com/MatthewZito/Brutus/blob/master/packages/arp_spoofer/arp_spoof.py)) El módulo de Spoofing ARP nos permite redirigir el flujo de paquetes en una red determinada manipulando simultáneamente las tablas ARP de un cliente objetivo y la puerta de enlace de su red. Este módulo activa automáticamente el reenvío de puertos durante este proceso y construye y envía dinámicamente paquetes ARP. Cuando el usuario termina el módulo, las tablas ARP de los objetivos se restablecen, para no dejar al controlador en una situación precaria (además, es lo correcto). Debido a que este proceso coloca al controlador en medio del flujo de paquetes entre el cliente y el AP, el controlador tiene acceso a todo el flujo de datos (lidiar con el posible cifrado de dichos datos es tarea de otro script). A partir de aquí, las innumerables opciones para la orquestación del flujo de paquetes se vuelven evidentes: sustitución de código mediante automatización y expresiones regulares, redirecciones forzadas, acceso remoto, etc. Afortunadamente, Brutus también puede automatizar esto. #### <a name="packetsniff"></a> Sniffer de Paquetes HTTP ([ver fuente](https://github.com/MatthewZito/Brutus/blob/master/packages/packet_sniffer/packet_sniff.py)) El sniffer de paquetes es un excelente módulo para emplear después de ejecutar el Spoofer ARP; crea un flujo de datos de todos los datos de paquetes HTTP interceptados que incluye URLs o posibles credenciales de usuario. El script es extensible y puede adaptarse a una variedad de protocolos al instanciar el objeto listener con uno de los muchos filtros disponibles. Ten en cuenta que Brutus degrada automáticamente HTTPS, por lo que, a menos que esté involucrado HSTS, el flujo de datos debería ser viable para el reconocimiento. __Descargo de responsabilidad: Este software y todo su contenido fueron creados únicamente con fines de investigación. No apruebo ni asumo, bajo ninguna circunstancia, responsabilidad por las acciones de aquellos que pudieran tener la intención de utilizar este software de manera maliciosa o ilegal.__