█ █
████████
██████████
██ ████ ██
██ ████ ██
████ ████
█ ████████████ █
█ ██████████ █ Fuzzowski 网络模糊测试器
█ █ █ █ 🄯 Fuzzers, inc.
██ ██ 作者:Mario Rivas
这个理念是打造我们__真正__想要使用的网络协议模糊测试器。
该工具的目标是协助完成网络协议模糊测试的全过程,允许定义通信内容,帮助识别导致服务崩溃的“可疑点”,并提供更多功能。
[2019年12月16日]
s_response() 定义响应,从而检查服务器的响应、设置变量,甚至对响应执行额外测试以判断是否出现异常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 网络模糊测试器
█ █ █ █ 🄯 Fuzzers, inc.
██ ██
位置参数:
host 目标主机
port 目标端口
可选参数:
-h, --help 显示此帮助信息并退出
连接选项:
-p {tcp,udp,ssl}, --protocol {tcp,udp,ssl}
协议(默认 tcp)
-b BIND, --bind BIND 绑定到端口
-st SEND_TIMEOUT, --send_timeout SEND_TIMEOUT
设置 send() 超时时间(默认 5 秒)
-rt RECV_TIMEOUT, --recv_timeout RECV_TIMEOUT
设置 recv() 超时时间(默认 5 秒)
--sleep-time SLEEP_TIME
每次测试之间的休眠时间(默认 0)
-nc, --new-conns 在同一个测试的每个数据包后打开新连接
-tn, --transmit-next-node
传输被模糊节点在图中的下一个节点
RECV() 选项:
-nr, --no-recv 每次发送后不在套接字上 recv()
-nrf, --no-recv-fuzz 发送模糊请求后不在套接字上 recv()
-cr, --check-recv 检查 recv() 是否接收到数据
崩溃选项:
--threshold-request CRASH_THRESHOLD_REQUEST
设置一个请求允许的崩溃次数,超过则跳过(默认 9999)
--threshold-element CRASH_THRESHOLD_ELEMENT
设置一个原语允许的崩溃次数,超过则跳过(默认 3)
--ignore-aborted 忽略 ECONNABORTED 错误
--ignore-reset 忽略 ECONNRESET 错误
--error-fuzz-issues 当模糊节点出现连接问题时记录为错误
模糊选项:
-c CALLBACK, --callback CALLBACK
设置一个回调地址,使用回调生成器代替正常突变
--file FILENAME 使用文件内容进行模糊突变
模糊器:
-f {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}, --fuzz {cops,dhcp,ipp,lpd,netconf,telnet_cli,tftp,raw}
可用的协议
-r FUZZ_REQUESTS [FUZZ_REQUESTS ...], --requests FUZZ_REQUESTS [FUZZ_REQUESTS ...]
要模糊的协议请求,默认为全部
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 module_name [args ...]
重启模块:
run: '<可执行文件> [<参数> ...]' (将命令和参数放在引号中,作为一个参数)
smartplug: 关闭并打开智能插头
teckin: <插头IP>
--restart-sleep RESTART_SLEEP_TIME
崩溃后继续前的休眠秒数(默认 5)
监控器选项:
--monitors {IPPMon} [{IPPMon} ...], -m {IPPMon} [{IPPMon} ...]
监控模块:
IPPMon: 向目标发送 get-attributes IPP 消息
其他选项:
--path PATH 模糊基于 HTTP 的协议时设置路径(默认 /)
--document_url DOCUMENT_URL
为 print_uri 设置文档 URL
使用默认选项模糊 IPP 的 get_printer_attribs 操作:
python -m fuzzowski printer1 631 -f ipp -r get_printer_attribs --restart smartplug
使用 IPP 的 raw 功能模糊 finger 协议:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n'
使用 IPP 的 raw 功能模糊 finger 协议,但使用文件代替预定义的突变:
python -m fuzzowski printer 79 -f raw -r '{{root}}\n' --file 'path/to/my/fuzzlist'
有状态模糊测试器示例,演示如何使用 s_response 和 s_variable 获取令牌,该令牌用于模糊请求。此示例基于 mock http server 测试用例