
Herramienta de red, reconocimiento y seguridad ofensiva para Linux.
Hawk es una utilidad de red y pentest que desarrollé para poder realizar diferentes tipos de tareas usando el mismo conjunto de herramientas, en lugar de saltar de una herramienta a otra.
Actualmente, este script puede realizar una variedad de tareas como ifconfig, ping, traceroute, escaneos de puertos (incluyendo SYN, TCP, UDP, ACK y escaneo completo), detección de hosts (escaneo de dispositivos activos en una red local), detección de direcciones MAC (obtener la dirección MAC de una IP de host en una red local), captura de banners, comprobaciones DNS (con información de geolocalización), WHOIS, enumeración de subdominios, reconocimiento de vulnerabilidades, sniffing de paquetes, spoofing de MAC, spoofing de IP, SYN flooding, ataque de desautenticación y ataque de fuerza bruta (beta).
Otras funciones aún están en desarrollo. Las implementaciones futuras pueden incluir detección de WAF, enumeración de DNS, análisis de tráfico, escáner de vulnerabilidades XSS, envenenamiento de caché ARP, envenenamiento de caché DNS, MAC flooding, ping de la muerte, ataque de disociación de red (no ataque de desautenticación), OSINT, suplantación de correo electrónico, exploits, algunas tareas automatizadas y otras.

Ten en cuenta que actualmente este script solo funciona bien en Linux. Si lo pruebas en Windows o macOS, puede que funcione, pero aparecerán numerosos errores.
Este script fue probado en:
Para instalar los paquetes necesarios para que el script funcione sin problemas, simplemente ejecuta el script setup.sh con privilegios de root. Actualmente, este script de instalación solo es compatible con distribuciones basadas en Debian, Red Hat y Arch que tengan los gestores de paquetes apt, dnf y pacman respectivamente (Ubuntu, Kali Linux, Parrot OS, Debian, Pop!_OS, Linux Mint, Deepin, Zorin OS, MX Linux, Elementary OS, Fedora, CentOS, Red Hat Enterprise Linux, Rocky Linux, AlmaLinux, Oracle Linux, ClearOS, Arch, Black Arch, Manjaro, etc). En la mayoría de los sistemas, para instalar Hawk simplemente ejecuta los siguientes comandos:
git clone https://github.com/medpaf/hawk.git
cd hawk
sudo sh setup.sh
Luego, simplemente sigue las instrucciones. Por favor, ignora los mensajes de error que aparecen durante la instalación.
Sin embargo, si estás usando cualquier otra distribución de Linux con un gestor de paquetes diferente, instala los paquetes manualmente usando el gestor de paquetes de tu distribución. Dependiendo de la distribución específica utilizada, algunos de los paquetes necesarios para ejecutar este script podrían ya estar instalados en tu máquina.
Si deseas conocer los paquetes necesarios, mira el archivo setup.sh.
Después de la instalación, para ejecutar el programa, simplemente navega al directorio del proyecto y ejecuta el archivo hawk.py usando python. Se recomienda ejecutar el script como root para un mejor rendimiento y para evitar errores de permisos. El comando utilizado es el siguiente:
sudo python3 hawk.py
Para hacer configuraciones, simplemente ve al archivo de configuración en files/conf.py y edítalo.
Si quieres mostrar la configuración de red TCP/IP actual de tu sistema, escribe el siguiente comando:
-ifconfig

Para enviar paquetes ICMP a uno o más hosts para comprobar la conectividad, simplemente escribe:
-ping <HOST(s) IP/FQDN>

Para diagnosticar rutas de red y medir retrasos de tránsito, usa el comando -traceroute:
-traceroute <HOST IP/FQDN>

El escaneo de puertos ayuda a detectar posibles brechas de seguridad al identificar los hosts conectados a tu red y los servicios en ejecución.
Se admiten múltiples tipos de escaneo, incluyendo TCP SYN (-scansyn) [también conocido como escaneo sigiloso], TCP Connect (-scantcp), UDP (-scanudp), TCP ACK (-scanack) y escaneo completo (-scan).
-scan -host <HOST(s) IP/FQDN>
-scan -host <HOST(s) IP/FQDN> -p <PORT(s)>
Si deseas escanear un rango de IP y/o un rango de puertos, usa uno de los siguientes comandos:
-scan -host <HOST(s) IP/FQDN> -prange <START PORT> <END PORT>
-scan -iprange <START IP> <END IP> -p <PORT(s)>
-scan -iprange <START IP> <END IP> -prange <START PORT> <END PORT>

Después de este escaneo, es posible ver que los puertos 22 (SSH) y 80 (HTTP) están abiertos.
Para buscar dispositivos activos en una red determinada, escribe el siguiente comando:
-scanlan
Luego escribe la red que quieres escanear.

Para obtener la dirección MAC de uno o más hosts activos en la LAN, usa el comando:
-getmac -host <HOST(s) IP>

La detección de versiones, o captura de banners, es una técnica de reconocimiento que recupera la información del banner de un software. Este banner suele contener información importante sobre un servicio de red, incluyendo, entre otros, el nombre y la versión del software. Los servidores FTP, Web, SSH y SMTP a menudo exponen información vital sobre el software que ejecutan en su banner.
Un ataque de banner generalmente comienza con un escaneo de enumeración para encontrar puertos abiertos. Una vez que hayas identificado un servicio que quieras atacar, puedes enviar paquetes específicos e inspeccionar el tráfico para obtener la información deseada.
Para realizar la captura de banners, según tus necesidades específicas, escribe uno de los siguientes comandos:
-grab -host <HOST(s) IP/FQDN> -p <PORT(s)>
-grab -iprange <START IP> <END IP> -prange <START PORT> <END PORT>
-grab -host <HOST(s) IP/FQDN> -prange <START PORT> <END PORT>
-grab -iprange <START IP> <END IP> -p <PORT(s)>

Esta función es similar al conocido comando nslookup utilizado en sistemas UNIX. Si quieres hacer una comprobación DNS, escribe lo siguiente:
-ns <HOST(s) IP/FQDN>

Descargo de responsabilidad: Ten en cuenta que esta función usa la API de IPinfo. Se recomienda cambiar la clave de API por la tuya, ya que la clave proporcionada podría estar siendo utilizada por otras personas. Para cambiar las claves de API, ve al archivo de configuración en files/conf.py.
WHOIS es un protocolo TCP que tiene como objetivo consultar información de contacto y DNS. Para solicitar el WHOIS de una o más páginas, simplemente escribe:
-whois <HOST(s) IP/PQDN>

La enumeración de subdominios es el proceso de encontrar subdominios válidos para uno o más dominios.
La enumeración de subdominios puede revelar muchos dominios/subdominios que están dentro del alcance de una evaluación de seguridad, lo que a su vez aumenta las posibilidades de encontrar vulnerabilidades.
Si deseas buscar subdominios comunes de un dominio, simplemente escribe:
-sdenum <PQDN>
Este comando usa una lista de palabras predeterminada para buscar subdominios. Sin embargo, si quieres usar tu propia lista de palabras, escribe:
-sdenum <PQDN> -wordlist <WORDLIST PATH>

La búsqueda de directorios es el proceso de encontrar directorios dentro de un servidor web.
Para realizar esta tarea, escribe:
-dirbust <HOST IP/FQDN>
Este comando usa una lista de palabras predeterminada para buscar directorios. Sin embargo, si quieres usar tu propia lista de palabras, escribe:
-dirbust <HOST IP/FQDN> -wordlist <WORDLIST PATH>

Para escanear uno o más hosts en busca de vulnerabilidades, usa el siguiente comando:
-vulnscan -host <HOST(s) IP/FQDN>

Descargo de responsabilidad: Ten en cuenta que esta función usa la API de Shodan. Se recomienda cambiar la clave de API por la tuya, ya que la clave proporcionada podría estar siendo utilizada por otras personas. Para cambiar las claves de API, ve al archivo de configuración en files/conf.py.
Para realizar sniffing de paquetes, escribe:
-sniff

Descargo de responsabilidad: Si quieres capturar todos los datos que pasan a través de una red, primero cambia tu tarjeta o adaptador inalámbrico al modo monitor.
El spoofing de MAC es la generación de tramas con una dirección MAC diferente a la dirección de la NIC emisora. Para cambiar la dirección MAC de una interfaz, ejecuta el comando:
-macspoof -source <SOURCE MAC> -iface <INTERFACE>

Como puedes ver en la captura de pantalla siguiente, la dirección MAC de la interfaz se cambió correctamente.

El objetivo del spoofing de IP es modificar la dirección IP de origen correcta para que el sistema al que se dirige un paquete no pueda identificar correctamente al remitente.
Ten en cuenta que este comando solo funciona en máquinas con vulnerabilidades sin parchear. Para realizar spoofing de IP en un puerto específico de un host, usa el siguiente comando:
-ipspoof -source <SOURCE IP> <SOURCE PORT> -target <TARGET IP/FQDN> <TARGET PORT>
Si quieres usar una IP de origen aleatoria, escribe el siguiente comando:
-ipspoof -source r <SOURCE PORT> -target <TARGET IP/FQDN> <TARGET PORT>
También puedes usar un puerto de origen aleatorio:
-ipspoof -source <SOURCE IP> r -target <TARGET IP/FQDN> <TARGET PORT>

Descargo de responsabilidad: Úsalo solo con fines de prueba y apunta a tus propias máquinas.
SYN Flood es un método de ataque DDoS que causa una sobrecarga directa en la capa de transporte (capa 4) y una sobrecarga indirecta en la capa de aplicación (capa 7).
Para intentar un SYN flooding, escribe:
-synflood -source <SOURCE PORT> -target <TARGET IP/FQDN> <TARGET PORT>
Si quieres usar un puerto de origen aleatorio, escribe el siguiente comando:
-synflood -source r -target <TARGET IP/FQDN> <TARGET PORT>

Descargo de responsabilidad: Úsalo solo con fines de prueba y apunta a tus propias máquinas.
Un ataque de desautenticación es un tipo de ataque inalámbrico que apunta a la comunicación entre un router y uno o más dispositivos conectados a ese router, forzando efectivamente a la máquina objetivo a desconectarse del punto de acceso.
Para realizar este ataque, usa el siguiente comando:
-deauth -target <TARGET MAC> -gateway <GATEWAY MAC> -iface <INTERFACE>
Si planeas atacar a todos los clientes en un gateway, escribe:
-deauth -target a -gateway <GATEWAY MAC> -iface <INTERFACE>
También puedes elegir tu interfaz inalámbrica predeterminada (configurada en files/conf.py) para realizar el ataque:
-deauth -target <TARGET MAC> -gateway <GATEWAY MAC> -iface d

Después del comando ejecutado en la captura de pantalla anterior, todos los dispositivos conectados a ese punto de acceso se desconectaron y no pudieron volver a conectarse mientras este script estaba en ejecución.
Descargo de responsabilidad: Para realizar este ataque, asegúrate de tener una tarjeta o adaptador inalámbrico que sea compatible con el modo monitor y actívalo antes de intentar un ataque de desautenticación. Úsalo solo con fines de prueba y apunta a tus propias máquinas.
Un ataque de fuerza bruta es un intento de descifrar una contraseña o nombre de usuario.
Para realizar un ataque de fuerza bruta y encontrar credenciales comunes/débiles, escribe:
-bruteforce <SERVICE> -target <TARGET IP/FQDN> -user <USERNAME>
Si deseas usar una lista de palabras personalizada, usa el comando:
-bruteforce <SERVICE> -target <TARGET IP/FQDN> -user <USERNAME> -wordlist <WORDLIST PATH>
Por ahora, solo se admite el servicio SSH.
Descargo de responsabilidad: Ten en cuenta que el servidor objetivo puede tener mecanismos de defensa contra este tipo de ataque y bloquear los intentos del atacante de adivinar la contraseña. Úsalo solo con fines de prueba y apunta a tus propias máquinas.
Este comando automatizará algunas de las técnicas de reconocimiento disponibles en este script. Para hacer esto, escribe:
-autoscan <HOST(s) IP/FQDN>
La mayoría de los usuarios inalámbricos solo usan sus tarjetas inalámbricas como estación de un punto de acceso (AP). En el modo gestionado, la tarjeta inalámbrica y el software del controlador dependen de un AP local en modo gestionado para proporcionar conectividad a la red inalámbrica.
Algunas tarjetas inalámbricas también admiten la funcionalidad de modo monitor. Cuando se configura en modo monitor, la tarjeta inalámbrica deja de transmitir datos y captura el canal configurado actualmente, informando al sistema operativo anfitrión del contenido de los paquetes observados.
Para cambiar una interfaz al modo monitor, usa el siguiente comando:
-mode monitor -iface <INTERFACE>
También puedes configurar tu interfaz a la interfaz inalámbrica predeterminada (configurada en files/conf.py):
-mode monitor -iface d

Como puedes ver en la captura de pantalla siguiente, el modo de la interfaz se cambió correctamente.

Sin embargo, si deseas volver a cambiar tu interfaz al modo gestionado, escribe:
-mode managed -iface <INTERFACE>
También puedes configurar tu interfaz a la interfaz inalámbrica predeterminada (configurada en files/conf.py):
-mode managed -iface d

Como puedes ver en la captura de pantalla siguiente, el modo de la interfaz se cambió correctamente.

Crea un issue o pull request, o envíame un correo electrónico a [email protected].
Este repositorio está bajo la Licencia MIT.