Blog

Keep up to date with the latest news

FUZZ参考手册

ffuf 是一款功能强大的 Web 模糊测试工具,以下是其基本使用教程:

(一)安装

(1)从源码安装(以 Linux 为例):

确保系统已经安装了 Go 语言环境。如果没有安装,可以通过系统的包管理器进行安装(例如在 Ubuntu 上可以使用sudo apt-get install golang)。

使用go get -u github.com/ffuf/ffuf命令来下载和安装 ffuf。安装完成后,ffuf可执行文件通常会在$GOPATH/bin目录下。

(2)使用预编译版本:

可以从 ffuf 的官方 GitHub 发布页面(https://github.com/ffuf/ffuf/releases)下载适合您操作系统的预编译二进制文件。下载后,将其放置在系统的可执行路径中或者在使用时指定其路径。

(二)基本用法

(1)简单的目录爆破:

ffuf -w wordlist.txt -u http://example.com/FUZZ

-w参数指定要使用的字典文件(这里是wordlist.txt)。

-u参数指定目标 URL,其中FUZZ是一个关键字,ffuf 会用字典中的每个单词替换FUZZ来发起请求。

(2)查找子域名:

ffuf -w subdomains.txt -u http://FUZZ.example.com -H "Host: FUZZ.example.com"

这里使用子域名字典(subdomains.txt),并通过-H参数设置请求头中的Host字段,以正确地请求每个子域名。

(三)高级用法

(1)指定请求方法:

可以使用-X参数指定请求方法,如-X POST。例如:ffuf -w wordlist.txt -u http://example.com/login -X POST -d 'username=admin&password=FUZZ'。这在测试登录页面等需要 POST 请求的场景很有用,这里尝试用字典中的内容作为密码进行爆破。

(2)过滤响应:

-fc参数用于根据响应状态码过滤。例如-fc 404会过滤掉状态码为 404 的响应,只显示其他状态码的结果。

-fs参数用于根据响应内容大小过滤。例如-fs 1234会过滤掉响应内容大小为 1234 字节的页面。

-fr参数可以根据正则表达式过滤响应内容。例如-fr "Welcome"只显示响应内容中包含 “Welcome” 的结果。

(3)增加请求头和 Cookie:

-H参数用于添加请求头。如-H "User-Agent: Mozilla/5.0"可以设置自定义的用户代理。

-b参数用于添加 Cookie。例如-b "sessionid=12345"可以在请求中带上指定的 Cookie。

(四)输出格式

可以使用-o参数指定输出文件,使用-of参数指定输出格式。例如-o results.txt -of json会将结果以 JSON 格式输出到results.txt文件中。常见的输出格式还有html、xml等,可以方便后续的结果分析。

翻译:ffuf -h

HTTP选项:

-H 请求头'Name:Value'用冒号分隔。可接受多个标志

-X 要使用的HTTP方法。如get,post

-b Cookie数据`"NAME1=VALUE1; NAME2=VALUE2"`

-d POST 数据

-http2 使用HTTP2协议(默认值:false)

-ignore-body 不要获取响应内容。(默认值:false)

-r 遵循重定向(默认值:false)

-recursion 递归扫描,只支持FUZZ关键字,并且-u结尾(默认值:false)

-recursion-depth 最大递归深度。(默认值:0)

-replay-proxy 使用此代理重播匹配的请求

-timeout HTTP请求超时(秒)。(默认值:10)

-u 目标url

-x 代理URL(SOCKS5或HTTP)。例如:http://127.0.0.1:8080或socks5://127.0.0.1:8080

常规选项:

-V 显示版本信息(默认值:false)

-ac 自动校准过滤选项(默认值:false)

-acc 自定义自动校准字符串。可以多次使用。含义-ac

-ach 每主机自动校准(默认值:false)

-ack 自动校准关键字(默认值:FUZZ)

-acs 自动校准策略:“基本”或“高级”(默认值:基本)

-c 将输出着色。(默认值:false)

-config 从文件加载配置

-json json输出,打印换行分隔的json记录(默认值:false)

-maxtime 整个进程的最大运行时间(以秒为单位)。(默认值:0)

-maxtime-job 作业每个作业的最大运行时间(以秒为单位)。(默认值:0)

-noninteractive -非交互式禁用交互式控制台功能(默认值:false)

-p 请求之间的“延迟”秒数,或一系列随机延迟。例如“0.1”或“0.1-2.0”

-rate 每秒请求的速率(默认值:0)

-s 不打印附加信息(静默模式)(默认值:false)

-sa 在所有错误情况下停止。暗示-sf和-se。(默认值:false)

-se 在出现虚假错误时停止(默认值:false)

-sf 当>95%的响应返回403 Forbidden时停止(默认值:false)

-t 并发线程数。(默认值:40)

-v 详细输出,打印完整的URL和重定向位置(如果有)以及结果。(默认值:false)

匹配器选项:

-mc 匹配HTTP状态代码,或“全部”表示所有内容。(默认值:200,204,301,302,307,403,404,500)

-ml 匹配响应行数

-mmode 匹配器集运算符。以下任一项:和或(默认值:或)

-mr 匹配正则表达式

-ms 匹配HTTP响应大小

-mt 匹配第一个响应字节的毫秒数,大于或小于。例如:>100或<100

-mw 匹配响应的单词数量

过滤器选项:

-fc 从响应中筛选HTTP状态代码。代码和范围的逗号分隔列表

-fl 根据响应的行数进行过滤。行计数和范围的逗号分隔列表

-fmode 筛选器集运算符。以下任一项:和或(默认值:或)

-fr 筛选器正则表达式

-fs 筛选器HTTP响应大小。大小和范围的逗号分隔列表

-ft 根据到第一个响应字节的毫秒数进行筛选,大于或小于。例如:>100或<100

-fw 按响应的字数进行筛选。以逗号分隔的单词计数和响铃列表

输入选项:

-D DirSearch单词列表兼容模式。与-e标志一起使用。(默认值:false)

-e 扩展名的逗号分隔列表。扩展FUZZ关键字

-ic 忽略单词列表注释(默认值:false)

-input-cmd 要测试的输入数。与--input cmd一起使用。(默认值:100)

-input-shell 用于运行命令的外壳

-mode 多单词列表操作模式。可用模式:clusterbomb, pitchfork, sniper (default: clusterbomb)

-request 包含原始http请求的文件

-request-proto 与原始请求一起使用的协议(默认值:https)

-w 用冒号分隔的单词列表文件路径和(可选)关键字

输出选项:

-debug-log 将所有内部日志记录写入指定的文件。

-o 将输出写入文件

-od 将匹配结果存储到的目录路径

-of 输出文件格式。可用格式:json、ejson、html、md、csv、ecsv(或所有格式的“all”)(默认值:json)

-or 如果没有结果,就不要创建输出文件(默认值:false

示例用法:

快速上手:

​-u​:指定URL地址

​-w​:设置字典文件

​-c​:将响应状态码用颜色区分

​-t​:设置线程数,默认40

​-p​:请求延时,如:0.1s

​-H​:设置HTTP头部信息

​-X​:指定HTTP方法

​-d​:POST数据

​-r​:跟随重定向

​-x​:设置代理,如:http://127.0.0.1:8080

​-o​:输出结果文件

​-of​:输出格式,如html、json、csv等

ffuf -w xxx.txt -u https://xxx.com/FUZZ -mc all -fs 42 -c -v

ffuf -u http://xxx.com/FUZZ -w xxx.txt -fc "200" -o result.html -of html

目标 URL 设定与字典替换

单一替换点:

格式:ffuf -w -u 。例如:ffuf -w common.txt -u http://example.com/FUZZ。这里-w指定字典文件(common.txt),-u指定目标网址,FUZZ是替换关键字,工具会用字典中的单词依次替换FUZZ进行请求。多个替换点:

如果目标网址有多个需要替换的部分,可以这样用:ffuf -w -w -u 。例如:ffuf -w dirs.txt -w files.txt -u http://example.com/FUZZ1/FUZZ2,此时 ffuf 会将dirs.txt和files.txt中的内容分别替换FUZZ1和FUZZ2来组合请求。常用参数调整

请求方法指定:

使用-X参数指定请求方法,如-X POST。比如:ffuf -w data.txt -u http://example.com/submit -X POST -d 'param=FUZZ',用于测试 POST 请求的场景,字典内容替换param的值。并发数控制:

通过-c参数可以设置并发请求的数量,如-c 20,这意味着同时会有 20 个请求在运行,可以加快测试速度,但如果设置过高可能导致目标服务器负载过大或请求被限制。字典选择与处理

多字典同时使用(不同位置):

假设目标 URL 有两个不同部分需要用不同字典进行模糊测试,如http://example.com/FUZZ1/page/FUZZ2,可以使用-w参数多次指定不同字典:ffuf -w dict1.txt -w dict2.txt -u http://example.com/FUZZ1/page/FUZZ2,这里dict1.txt中的内容会替换FUZZ1,dict2.txt中的内容会替换FUZZ2。字典编码设置:

如果字典中的内容需要特定编码(如 UTF - 8、GBK 等),虽然 ffuf 通常能自动处理常见编码,但在某些特殊情况下,可以通过系统环境变量或者特定的编码转换工具对字典进行预处理。目标 URL 的更多设定

协议指定与切换:

可以测试不同协议的目标,比如同时测试 HTTP 和 HTTPS。ffuf -w wordlist.txt -u http://example.com/FUZZ -u https://example.com/FUZZ,这种方式在检查网站在不同协议下的资源暴露情况很有用。端口指定:

如果目标服务器运行在非标准端口,可以在 URL 中指定。例如ffuf -w wordlist.txt -u http://example.com:8080/FUZZ,这里测试目标服务器的 8080 端口。 请求相关操作

请求体中的文件上传测试(用于有文件上传功能的接口):

假设一个文件上传接口http://example.com/upload,可以使用-X POST -d 'file=@FUZZ' -u http://example.com/upload,这里-d参数中的@符号表示上传文件,FUZZ会被字典中的文件名替换(字典中的文件名应是本地存在的文件路径)。请求头中的身份认证信息(如 Basic 认证):

对于需要基本身份认证的目标,可以在请求头中添加。例如-H 'Authorization: Basic YWRtaW46cGFzc3dvcmQ=' -u http://example.com/FUZZ,这里YWRtaW46cGFzc3dvcmQ=是admin:password经过 Base64 编码后的字符串(实际使用中应替换为正确的认证信息)。 结果处理与分析

按响应头信息筛选:

可以使用-fhdr参数根据响应头中的内容筛选。例如-fhdr 'Content-Type: application/json',只显示响应头中Content - Type为application/json的结果。对结果排序:

可以使用-s参数指定排序方式。例如-s status按状态码对结果进行排序,-s size按响应内容大小排序,方便分析不同状态或大小的结果分布。 其他操作

递归目录爆破(结合其他工具或脚本来实现更好的效果):

首先使用 ffuf 找到第一层目录,然后对于找到的每个目录再进一步爆破其子目录。例如,先找到http://example.com/FUZZ中的目录,然后对于每个找到的目录dir,再执行ffuf -w subdirs.txt -u http://example.com/dir/FUZZ。与代理服务器结合使用:

如果需要通过代理服务器来访问目标,可以使用-x参数指定代理。例如-x http://proxy.example.com:8080,这样所有请求都会通过指定的代理服务器发送。