
o Fuzzer de Protocolo de Rede que vamos querer usar.
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski Network Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██ by Mario Rivas
A ideia é ser o Fuzzer de Protocolo de Rede que nós queremos usar.
O objetivo desta ferramenta é auxiliar durante todo o processo de fuzzing de um protocolo de rede, permitindo definir as comunicações, ajudando a identificar os "suspeitos" que causam a queda de um serviço, e muito mais
[16/12/2019]
virtualenv venv -p python3
source venv/bin/activate
pip install -r requirements.txt
usage: python -m fuzzowski [-h] [-p {tcp,udp,ssl}] [-b BIND] [-st SEND_TIMEOUT]
[-rt RECV_TIMEOUT] [--sleep-time SLEEP_TIME] [-nc] [-tn]
[-nr] [-nrf] [-cr]
[--threshold-request CRASH_THRESHOLD_REQUEST]
[--threshold-element CRASH_THRESHOLD_ELEMENT]
[--ignore-aborted] [--ignore-reset] [--error-fuzz-issues]
[-c CALLBACK | --file FILENAME] -f
{cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
[-r FUZZ_REQUESTS [FUZZ_REQUESTS ...]]
[--restart module_name [args ...]]
[--restart-sleep RESTART_SLEEP_TIME]
[--monitors {IPPMon} [{IPPMon} ...]] [--path PATH]
[--document_url DOCUMENT_URL]
host port
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski Network Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██
argumentos posicionais:
host Host de destino
port Porta de destino
argumentos opcionais:
-h, --help mostra esta mensagem de ajuda e sai
Opções de Conexão:
-p {tcp,udp,ssl}, --protocol {tcp,udp,ssl}
Protocolo (Padrão tcp)
-b BIND, --bind BIND Vincular a uma porta
-st SEND_TIMEOUT, --send_timeout SEND_TIMEOUT
Define o timeout de send() (Padrão 5s)
-rt RECV_TIMEOUT, --recv_timeout RECV_TIMEOUT
Define o timeout de recv() (Padrão 5s)
--sleep-time SLEEP_TIME
Tempo de espera entre cada teste (Padrão 0)
-nc, --new-conns Abre uma nova conexão após cada pacote do mesmo teste
-tn, --transmit-next-node
Transmite o próximo nó no gráfico do nó fuzzeado
Opções RECV():
-nr, --no-recv Não recv() no socket após cada envio
-nrf, --no-recv-fuzz Não recv() no socket após enviar uma requisição fuzzeada
-cr, --check-recv Verifica se dados foram recebidos em recv()
Opções de Crash:
--threshold-request CRASH_THRESHOLD_REQUEST
Define o número de crashes permitidos em uma Requisição antes de pulá-la (Padrão 9999)
--threshold-element CRASH_THRESHOLD_ELEMENT
Define o número de crashes permitidos em uma Primitiva antes de pulá-la (Padrão 3)
--ignore-aborted Ignora erros ECONNABORTED
--ignore-reset Ignora erros ECONNRESET
--error-fuzz-issues Registra como erro quando há algum problema de conexão no nó fuzzeado
Opções de Fuzz:
-c CALLBACK, --callback CALLBACK
Define um endereço de callback para fuzzar com gerador de callback em vez de mutações normais
--file FILENAME Usa o conteúdo de um arquivo para mutações de fuzz
Fuzzers:
-f {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}, --fuzz {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
Protocolos Disponíveis
-r FUZZ_REQUESTS [FUZZ_REQUESTS ...], --requests FUZZ_REQUESTS [FUZZ_REQUESTS ...]
Requisições do protocolo para fuzzar, padrão Todas
dhcp: [opt82]
ipp: [http_headers, get_printer_attribs, print_uri_message, send_uri, get_jobs, get_job_attribs]
lpd: [long_queue, short_queue, ctrl_file, data_file, remove_job]
telnet_cli: [commands]
tftp: [read]
raw: ['\x01string\n' '\x02request2\x00' ...]
Opções de Reinicialização:
--restart module_name [args ...]
Módulos de Reinicialização:
run: '<executável> [<argumento> ...]' (Passe comando e argumentos entre aspas, como um único argumento)
smartplug: Irá desligar e ligar a Tomada Inteligente
teckin: <PLUG_IP>
--restart-sleep RESTART_SLEEP_TIME
Define segundos de espera após um crash antes de continuar (Padrão 5)
Opções de Monitor:
--monitors {IPPMon} [{IPPMon} ...], -m {IPPMon} [{IPPMon} ...]
Módulos de Monitor:
IPPMon: Envia uma mensagem IPP get-attributes para o alvo
Outras Opções:
--path PATH Define o caminho ao fuzzar protocolos baseados em HTTP (Padrão /)
--document_url DOCUMENT_URL
Define a URL do documento para print_uri
Fuzzar a operação IPP get_printer_attribs com opções padrão:
python -m fuzzowski printer1 631 -f ipp -r get_printer_attribs --restart smartplug
Usar o recurso raw do IPP para fuzzar o protocolo finger:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n'
Usar o recurso raw do IPP para fuzzar o protocolo finger, mas em vez de usar as mutações predefinidas, usar um arquivo:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n' --file 'path/to/my/fuzzlist'
Exemplo de Fuzzer Stateful, demonstrando o uso de s_response e s_variable para obter um token necessário para fuzzar uma requisição. Este exemplo é baseado no caso de teste do servidor HTTP mock