
der Network Protocol Fuzzer, den wir verwenden möchten.
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski Netzwerk-Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██ von Mario Rivas
Die Idee ist, der Netzwerkprotokoll-Fuzzer zu sein, den wir nutzen wollen.
Das Ziel dieses Tools ist es, den gesamten Prozess des Fuzzings eines Netzwerkprotokolls zu unterstützen, die Definition der Kommunikation zu ermöglichen, bei der Identifizierung der "Verdächtigen" für den Absturz eines Dienstes zu helfen und vieles mehr.
[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 Netzwerk-Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██
positional arguments:
host Ziel-Host
port Ziel-Port
optional arguments:
-h, --help show this help message and exit
Connection Options:
-p {tcp,udp,ssl}, --protocol {tcp,udp,ssl}
Protokoll (Standard tcp)
-b BIND, --bind BIND An Port binden
-st SEND_TIMEOUT, --send_timeout SEND_TIMEOUT
Setzt send()-Timeout (Standard 5s)
-rt RECV_TIMEOUT, --recv_timeout RECV_TIMEOUT
Setzt recv()-Timeout (Standard 5s)
--sleep-time SLEEP_TIME
Wartezeit zwischen jedem Test (Standard 0)
-nc, --new-conns Neue Verbindung nach jedem Paket des gleichen Tests öffnen
-tn, --transmit-next-node
Überträgt den nächsten Knoten im Graphen des gefuzzten Knotens
RECV() Options:
-nr, --no-recv Kein recv() im Socket nach jedem Senden
-nrf, --no-recv-fuzz Kein recv() im Socket nach dem Senden einer gefuzzten Anfrage
-cr, --check-recv Überprüfen, ob Daten im recv() empfangen wurden
Absturz-Optionen:
--threshold-request CRASH_THRESHOLD_REQUEST
Setzt die Anzahl erlaubter Abstürze in einer Request vor dem Überspringen (Standard 9999)
--threshold-element CRASH_THRESHOLD_ELEMENT
Setzt die Anzahl erlaubter Abstürze in einem Primitive vor dem Überspringen (Standard 3)
--ignore-aborted ECONNABORTED-Fehler ignorieren
--ignore-reset ECONNRESET-Fehler ignorieren
--error-fuzz-issues Fehler als Fehler protokollieren, wenn es ein Verbindungsproblem im gefuzzten Knoten gibt
Fuzz-Optionen:
-c CALLBACK, --callback CALLBACK
Setzt eine Callback-Adresse, um mit Callback-Generator statt normaler Mutationen zu fuzzen
--file FILENAME Verwendet den Inhalt einer Datei für Fuzz-Mutationen
Fuzzer:
-f {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}, --fuzz {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
Verfügbare Protokolle
-r FUZZ_REQUESTS [FUZZ_REQUESTS ...], --requests FUZZ_REQUESTS [FUZZ_REQUESTS ...]
Anfragen des Protokolls zum Fuzzen, Standard Alle
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' ...]
Neustart-Optionen:
--restart module_name [args ...]
Neustarter-Module:
run: '<executable> [<argument> ...]' (Übergeben Sie Befehl und Argumente in Anführungszeichen als nur ein Argument)
smartplug: Schaltet die Smart Plug aus und wieder ein
teckin: <PLUG_IP>
--restart-sleep RESTART_SLEEP_TIME
Setzt die Wartezeit in Sekunden nach einem Absturz vor dem Fortfahren (Standard 5)
Monitor-Optionen:
--monitors {IPPMon} [{IPPMon} ...], -m {IPPMon} [{IPPMon} ...]
Monitor-Module:
IPPMon: Sendet eine get-attributes IPP-Nachricht an das Ziel
Weitere Optionen:
--path PATH Setzt den Pfad beim Fuzzen von HTTP-basierten Protokollen (Standard /)
--document_url DOCUMENT_URL
Setzt die Dokumenten-URL für print_uri
Fuzze die get_printer_attribs IPP-Operation mit Standardoptionen:
python -m fuzzowski printer1 631 -f ipp -r get_printer_attribs --restart smartplug
Verwenden Sie die Raw-Funktion von IPP, um das Finger-Protokoll zu fuzzen:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n'
Verwenden Sie die Raw-Funktion von IPP, um das Finger-Protokoll zu fuzzen, aber verwenden Sie anstelle der vordefinierten Mutationen eine Datei:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n' --file 'pfad/zu/meiner/fuzzlist'
Beispiel für einen zustandsbehafteten Fuzzer, das die Verwendung von s_response und s_variable demonstriert, um ein Token zu erhalten, das zum Fuzzen einer Anfrage benötigt wird. Dieses Beispiel basiert auf dem Mock-HTTP-Server-Testfall