
el fuzzer de protocolo de red que querremos usar.
█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski Network Fuzzer
█ █ █ █ 🄯 Fuzzers, inc.
██ ██ by Mario Rivas
La idea es ser el Fuzzer de Protocolos de Red que queramos usar.
El objetivo de esta herramienta es ayudar durante todo el proceso de fuzzing de un protocolo de red, permitiendo definir las comunicaciones, ayudando a identificar los "sospechosos" de causar un fallo en un servicio, y mucho más
[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 posicionales:
host Host de destino
port Puerto de destino
argumentos opcionales:
-h, --help mostrar este mensaje de ayuda y salir
Opciones de Conexión:
-p {tcp,udp,ssl}, --protocol {tcp,udp,ssl}
Protocolo (Por defecto tcp)
-b BIND, --bind BIND Vincular a puerto
-st SEND_TIMEOUT, --send_timeout SEND_TIMEOUT
Establecer tiempo de espera de send() (Por defecto 5s)
-rt RECV_TIMEOUT, --recv_timeout RECV_TIMEOUT
Establecer tiempo de espera de recv() (Por defecto 5s)
--sleep-time SLEEP_TIME
Tiempo de espera entre cada prueba (Por defecto 0)
-nc, --new-conns Abrir una nueva conexión después de cada paquete de la misma prueba
-tn, --transmit-next-node
Transmitir el siguiente nodo en el grafo del nodo fuzzeado
Opciones de RECV():
-nr, --no-recv No hacer recv() en el socket después de cada envío
-nrf, --no-recv-fuzz No hacer recv() en el socket después de enviar una solicitud fuzzeada
-cr, --check-recv Verificar que se han recibido datos en recv()
Opciones de Crash:
--threshold-request CRASH_THRESHOLD_REQUEST
Establecer el número de crash permitidos en una Solicitud antes de saltarla (Por defecto 9999)
--threshold-element CRASH_THRESHOLD_ELEMENT
Establecer el número de crash permitidos en una Primitiva antes de saltarla (Por defecto 3)
--ignore-aborted Ignorar errores ECONNABORTED
--ignore-reset Ignorar errores ECONNRESET
--error-fuzz-issues Registrar como error cuando haya cualquier problema de conexión en el nodo fuzzeado
Opciones de Fuzzing:
-c CALLBACK, --callback CALLBACK
Establecer una dirección de callback para fuzzear con el generador de callback en lugar de mutaciones normales
--file FILENAME Usar contenido de un archivo para mutaciones de fuzzing
Fuzzers:
-f {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}, --fuzz {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
Protocolos Disponibles
-r FUZZ_REQUESTS [FUZZ_REQUESTS ...], --requests FUZZ_REQUESTS [FUZZ_REQUESTS ...]
Solicitudes del protocolo a fuzzear, por defecto 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' ...]
Opciones de Reinicio:
--restart module_name [args ...]
Módulos de Reinicio:
run: '<ejecutable> [<argumento> ...]' (Pase el comando y los argumentos entre comillas, como un solo argumento)
smartplug: Apagará y encenderá el Enchufe Inteligente
teckin: <PLUG_IP>
--restart-sleep RESTART_SLEEP_TIME
Establecer segundos de espera después de un crash antes de continuar (Por defecto 5)
Opciones de Monitor:
--monitors {IPPMon} [{IPPMon} ...], -m {IPPMon} [{IPPMon} ...]
Módulos de Monitor:
IPPMon: Envía un mensaje IPP get-attributes al objetivo
Otras Opciones:
--path PATH Establecer ruta al fuzzear protocolos basados en HTTP (Por defecto /)
--document_url DOCUMENT_URL
Establecer URL del documento para print_uri
Fuzzear la operación IPP get_printer_attribs con opciones predeterminadas:
python -m fuzzowski printer1 631 -f ipp -r get_printer_attribs --restart smartplug
Usar la función raw de IPP para fuzzear el protocolo finger:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n'
Usar la función raw de IPP para fuzzear el protocolo finger, pero en lugar de usar las mutaciones predefinidas, usar un archivo:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n' --file 'path/to/my/fuzzlist'
Ejemplo de Fuzzer con estado, demostrando el uso de s_response y s_variable para obtener un token necesario para fuzzear una solicitud. Este ejemplo está basado en el caso de prueba del servidor HTTP simulado