
Ferramenta automatizada de desautenticação Wi-Fi que escaneia continuamente clientes em um SSID alvo e remove dispositivos não autorizados na lista de permissões. Possui suporte a lista de permissões, manipulação de malha/múltiplos APs, detecção de PMF e bypass experimental de WPA2 PMF via extração de EAPOL.
Aponte para um SSID e ele descobre automaticamente todos os clientes conectados e os expulsa --- inclusive aqueles que tentam reconectar --- sem necessidade de segmentação manual.
Ferramentas como aireplay-ng exigem que você forneça um BSSID e um MAC de cliente. Você precisa saber quem está na rede primeiro, e se alguém reconectar, você precisa pegá-los manualmente e executar novamente. O KTO faz tudo isso automaticamente em um loop: varredura contínua → lista de clientes em tempo real → desautenticação automática → repetir. Qualquer um que reconectar é capturado na próxima varredura.
Uso autorizado apenas. Execute isto apenas contra redes que você possui ou tem permissão explícita por escrito para testar. A desautenticação não autorizada é ilegal na maioria das jurisdições.
--live-table exibe uma tabela de clientes atualizada em vez de log rolante, bom para demonstrações--log ARQUIVO salva cada expulsão com timestamp, anexa entre sessões--scan-only descobre e registra clientes sem enviar quadros# Python 3.10+
pip install scapy
# suíte aircrack-ng
sudo apt install aircrack-ng
Deve ser executado como root.
git clone https://github.com/Ymsniper/KTO.git
cd KTO
pip install scapy
Nenhuma outra configuração necessária. Script único, sem arquivos de configuração.
sudo python3 kto.py -i <interface> -t <SSID> [opções]
A interface precisa estar em modo monitor, ou passe --auto-monitor para deixar o KTO lidar com isso.
# básico
sudo python3 kto.py -i wlan0mon -t "CorpNet"
# deixar KTO lidar com o modo monitor
sudo python3 kto.py -i wlan0 -t "CorpNet" --auto-monitor
# modo agressivo — sem janela de reconexão
sudo python3 kto.py -i wlan0mon -t "CorpNet" --aggressive
# poupar seu próprio dispositivo
sudo python3 kto.py -i wlan0mon -t "CorpNet" -w AA:BB:CC:DD:EE:FF
# descoberta passiva apenas, sem desautenticação
sudo python3 kto.py -i wlan0mon -t "CorpNet" --scan-only
# rede mesh ou multi-AP
sudo python3 kto.py -i wlan0mon -t "CorpNet" --auto-bssid
# salvar um log e mostrar tabela ao vivo
sudo python3 kto.py -i wlan0mon -t "CorpNet" --log session.txt --live-table
# rajada mais pesada com aireplay-ng
sudo python3 kto.py -i wlan0mon -t "CorpNet" -n 10 --aireplay --broadcast
# desabilitar bypass PMF (voltar à desautenticação padrão em WPA2+PMF)
sudo python3 kto.py -i wlan0mon -t "CorpNet" --no-bypass
# meu telefone
AA:BB:CC:DD:EE:FF
# laptop
11:22:33:44:55:66
A partir da v2.1.6, o KTO inclui um recurso PMF experimental para redes WPA2-PSK com Protected Management Frames (PMF) ativado. Quando PMF é detectado em uma rede WPA2, o KTO tenta automaticamente uma extração EAPOL com senha errada:
Este bypass NÃO requer a senha real da rede --- ele precisa apenas do SSID.
Limitações importantes:
Se quiser pular completamente o bypass e apenas disparar quadros de desautenticação padrão (aceitando que clientes com PMF os descartarão), use a bandeira --no-bypass.
Se o AP alvo tiver Protected Management Frames ativado, o KTO avisará na inicialização. Clientes com suporte a 802.11w descartarão silenciosamente quadros de desautenticação desprotegidos, então a eficácia depende de quais dispositivos estão conectados.
No entanto, no modo agressivo com uma rajada de desautenticação suficientemente alta, observou-se que o KTO ainda desconecta clientes protegidos por PMF em algumas redes --- mesmo sem um bypass. O grande volume de quadros parece sobrecarregar certas implementações. Portanto, embora o PMF seja uma defesa crítica, não é à prova de falhas em todas as configurações.
Ctrl+C para tudo de forma limpa, restaura a interface para o modo gerenciado se o KTO criou a interface monitor, e imprime um resumo da sessão com contagens de rajada por cliente.
Licença MIT --- veja LICENSE
| Bandeira | Padrão | Descrição |
|---|
-i, --interface | obrigatório | Interface sem fio (ex.: wlan0mon) |
-t, --target | obrigatório | Nome do SSID alvo |
-w, --whitelist | --- | MACs separados por vírgula para poupar |
--whitelist-file ARQUIVO | --- | Arquivo com MACs para poupar, um por linha (# = comentário) |
-c, --channel | automático | Travar em um canal específico |
-n, --count | 5 | Quadros de desautenticação por rajada por direção |
-s, --sleep | 5.0 | Segundos entre varreduras |
--scan-duration | 8.0 | Segundos que o airodump-ng escuta por varredura |
--delay | 0.1 | Atraso por cliente no loop agressivo |
--broadcast | desligado | Também desautenticar ff:ff:ff:ff:ff:ff |
--aireplay | desligado | Usar aireplay-ng em vez de Scapy |
--aggressive | desligado | Threads paralelas de varredura + desautenticação |
--scan-only | desligado | Modo passivo, nenhum quadro enviado |
--auto-monitor | desligado | Ativar modo monitor automaticamente via airmon-ng |
--auto-bssid | desligado | Selecionar automaticamente o BSSID mais forte para SSIDs mesh / multi-AP |
--reason | 7 | Código de motivo 802.11 (1=não especificado, 4=inatividade, 7=quadro classe3) |
--log ARQUIVO | --- | Salvar log de expulsões com timestamp em um arquivo |
--live-table | desligado | Tabela de clientes atualizada em vez de saída rolante |
--no-bypass, -nb | desligado | Desabilitar bypass PMF experimental |