
il Network Protocol Fuzzer che vorremo utilizzare.
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski Network Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██ by Mario Rivas
L'idea è essere il Network Protocol Fuzzer che vogliamo usare.
Lo scopo di questo strumento è assistere durante l'intero processo di fuzzing di un protocollo di rete, permettendo di definire le comunicazioni, aiutando a identificare i "sospetti" di crash di un servizio, e molto altro.
[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.
██ ██
positional arguments:
host Host di destinazione
port Porta di destinazione
optional arguments:
-h, --help mostra questo messaggio di aiuto ed esci
Connection Options:
-p {tcp,udp,ssl}, --protocol {tcp,udp,ssl}
Protocollo (Default tcp)
-b BIND, --bind BIND Bind a una porta
-st SEND_TIMEOUT, --send_timeout SEND_TIMEOUT
Imposta timeout send() (Default 5s)
-rt RECV_TIMEOUT, --recv_timeout RECV_TIMEOUT
Imposta timeout recv() (Default 5s)
--sleep-time SLEEP_TIME
Tempo di pausa tra ogni test (Default 0)
-nc, --new-conns Apre una nuova connessione dopo ogni pacchetto dello stesso test
-tn, --transmit-next-node
Trasmette il nodo successivo nel grafico del nodo fuzzato
RECV() Options:
-nr, --no-recv Non esegue recv() sul socket dopo ogni invio
-nrf, --no-recv-fuzz Non esegue recv() sul socket dopo l'invio di una richiesta fuzzata
-cr, --check-recv Controlla che siano stati ricevuti dati in recv()
Crashes Options:
--threshold-request CRASH_THRESHOLD_REQUEST
Imposta il numero di crash consentiti in una Request prima di saltarla (Default 9999)
--threshold-element CRASH_THRESHOLD_ELEMENT
Imposta il numero di crash consentiti in una Primitiva prima di saltarla (Default 3)
--ignore-aborted Ignora errori ECONNABORTED
--ignore-reset Ignora errori ECONNRESET
--error-fuzz-issues Registra come errore quando c'è un problema di connessione nel nodo fuzzato
Fuzz Options:
-c CALLBACK, --callback CALLBACK
Imposta un indirizzo callback per fuzzare con generatore di callback invece di mutazioni normali
--file FILENAME Usa il contenuto di un file per le mutazioni di fuzz
Fuzzers:
-f {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}, --fuzz {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
Protocolli disponibili
-r FUZZ_REQUESTS [FUZZ_REQUESTS ...], --requests FUZZ_REQUESTS [FUZZ_REQUESTS ...]
Richieste del protocollo da fuzzare, default tutte
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' ...]
Restart options:
--restart module_name [args ...]
Moduli Riavvio:
run: '<eseguibile> [<argomento> ...]' (Passa comando e argomenti tra virgolette, come un solo argomento)
smartplug: Spegne e riaccende la Smart Plug
teckin: <PLUG_IP>
--restart-sleep RESTART_SLEEP_TIME
Imposta secondi di pausa dopo un crash prima di continuare (Default 5)
Monitor options:
--monitors {IPPMon} [{IPPMon} ...], -m {IPPMon} [{IPPMon} ...]
Moduli Monitor:
IPPMon: Invia un messaggio IPP get-attributes al target
Other Options:
--path PATH Imposta il percorso per fuzzare protocolli basati su HTTP (Default /)
--document_url DOCUMENT_URL
Imposta URL documento per print_uri
Fuzza l'operazione IPP get_printer_attribs con opzioni predefinite:
python -m fuzzowski stampante1 631 -f ipp -r get_printer_attribs --restart smartplug
Usa la funzionalità raw di IPP per fuzzare il protocollo finger:
python -m fuzzowski stampante 79 -f raw -r '{{root}}\n'
Usa la funzionalità raw di IPP per fuzzare il protocollo finger, ma invece di usare le mutazioni predefinite, usa un file:
python -m fuzzowski stampante 79 -f raw -r '{{root}}\n' --file 'percorso/verso/la/mia/fuzzlist'
Esempio di Fuzzer stateful, che dimostra l'uso di s_response e s_variable per ottenere un token necessario per fuzzare una richiesta. Questo esempio è basato sul mock http server test case