
Herramienta automatizada de desautenticación Wi-Fi que escanea continuamente clientes en un SSID objetivo y expulsa dispositivos no incluidos en la lista blanca. Incluye soporte para listas blancas, manejo de malla/múltiples AP, detección de PMF y un bypass experimental de PMF WPA2 mediante extracción de EAPOL.
Apúntalo a un SSID y descubre automáticamente cada cliente conectado y los expulsa --- incluyendo aquellos que intentan reconectarse --- sin necesidad de apuntar manualmente.
Herramientas como aireplay-ng te obligan a proporcionar un BSSID y una MAC de cliente. Primero tienes que saber quién está en la red, y si alguien se reconecta, tienes que detectarlo tú mismo y ejecutarlo de nuevo. KTO hace todo eso automáticamente en un bucle: escaneo continuo → lista de clientes en vivo → desautenticación automática → repetir. Cualquiera que se reconecte es atrapado en la siguiente ronda.
Solo uso autorizado. Ejecuta esto únicamente contra redes que poseas o para las que tengas permiso explícito por escrito para realizar pruebas. La desautenticación no autorizada es ilegal en la mayoría de las jurisdicciones.
--live-table muestra una tabla de clientes que se actualiza en lugar de un registro desplazable, bueno para demostraciones--log ARCHIVO guarda cada expulsión con marca de tiempo, añade entre sesiones--scan-only descubre y registra clientes sin enviar ningún frame# Python 3.10+
pip install scapy
# aircrack-ng suite
sudo apt install aircrack-ng
Debe ejecutarse como root.
git clone https://github.com/Ymsniper/KTO.git
cd KTO
pip install scapy
No se requiere configuración adicional. Script único, sin archivos de configuración.
sudo python3 kto.py -i <interfaz> -t <SSID> [opciones]
La interfaz debe estar en modo monitor, o pasa --auto-monitor para que KTO lo maneje.
# basic
sudo python3 kto.py -i wlan0mon -t "CorpNet"
# let KTO handle monitor mode
sudo python3 kto.py -i wlan0 -t "CorpNet" --auto-monitor
# aggressive mode — no reconnect window
sudo python3 kto.py -i wlan0mon -t "CorpNet" --aggressive
# spare your own device
sudo python3 kto.py -i wlan0mon -t "CorpNet" -w AA:BB:CC:DD:EE:FF
# passive discovery only, no deauth
sudo python3 kto.py -i wlan0mon -t "CorpNet" --scan-only
# mesh or multi-AP network
sudo python3 kto.py -i wlan0mon -t "CorpNet" --auto-bssid
# save a log and show live table
sudo python3 kto.py -i wlan0mon -t "CorpNet" --log session.txt --live-table
# heavier burst with aireplay-ng
sudo python3 kto.py -i wlan0mon -t "CorpNet" -n 10 --aireplay --broadcast
# disable PMF bypass (fall back to standard deauth on WPA2+PMF)
sudo python3 kto.py -i wlan0mon -t "CorpNet" --no-bypass
# my phone
AA:BB:CC:DD:EE:FF
# laptop
11:22:33:44:55:66
A partir de la v2.1.6, KTO incluye una función experimental de PMF para redes WPA2-PSK con Management Frames protegidos (PMF) habilitados. Cuando se detecta PMF en una red WPA2, KTO intenta automáticamente una extracción EAPOL con contraseña incorrecta:
Este bypass NO requiere la contraseña real de la red --- solo necesita el SSID.
Limitaciones importantes:
Si quieres omitir completamente el bypass y simplemente enviar frames de desautenticación estándar (aceptando que los clientes con capacidad PMF los descartarán), usa la bandera --no-bypass.
Si el AP objetivo tiene habilitados los Management Frames protegidos, KTO te advertirá al inicio. Los clientes con soporte 802.11w descartarán silenciosamente los frames de desautenticación no protegidos, por lo que la efectividad depende de qué dispositivos están conectados.
Sin embargo, en modo agresivo con una ráfaga de desautenticación suficientemente alta, se ha observado que KTO aún desconecta clientes protegidos por PMF en algunas redes---incluso sin bypass. El gran volumen de frames parece abrumar ciertas implementaciones. Así que aunque PMF es una defensa crítica, no es a prueba de balas en todas las configuraciones.
Ctrl+C detiene todo limpiamente, restaura la interfaz al modo gestionado si KTO creó la interfaz monitor, e imprime un resumen de sesión con conteos de ráfagas por cliente.
Licencia MIT --- consulta LICENSE
| Bandera | Predeterminado | Descripción |
|---|
-i, --interface | requerido | Interfaz inalámbrica (ej. wlan0mon) |
-t, --target | requerido | Nombre del SSID objetivo |
-w, --whitelist | --- | MACs separadas por comas a exceptuar |
--whitelist-file ARCHIVO | --- | Archivo de MACs a exceptuar, una por línea (# = comentario) |
-c, --channel | auto | Fijar a un canal específico |
-n, --count | 5 | Frames de desautenticación por ráfaga por dirección |
-s, --sleep | 5.0 | Segundos entre rondas |
--scan-duration | 8.0 | Segundos que airodump-ng escucha por ronda |
--delay | 0.1 | Retraso por cliente en bucle agresivo |
--broadcast | apagado | También desautenticar ff:ff:ff:ff:ff:ff |
--aireplay | apagado | Usar aireplay-ng en lugar de Scapy |
--aggressive | apagado | Hilos de escaneo + desautenticación en paralelo |
--scan-only | apagado | Modo pasivo, no se envían frames |
--auto-monitor | apagado | Habilitar modo monitor automáticamente mediante airmon-ng |
--auto-bssid | apagado | Seleccionar automáticamente el BSSID más fuerte para SSID mesh / multi-AP |
--reason | 7 | Código de motivo 802.11 (1=no especificado, 4=inactividad, 7=frame clase3) |
--log ARCHIVO | --- | Guardar registro de expulsiones con marca de tiempo en un archivo |
--live-table | apagado | Tabla de clientes actualizable en lugar de salida desplazable |
--no-bypass, -nb | apagado | Deshabilitar bypass experimental de PMF |