Github:ffuf/ffuf: Fast web fuzzer written in Go (github.com)
用户手册:Everything you need to know about FFUF | Codingo
1、简单的网站目录扫描
ffuf -u http://site.com/FUZZ -w ./wordlist.txt
-u 指定扫描的网址,FUZZ指定需要进行爆破的位置。
-w 指定使用的Wordlist文件,指定多个字典用,
分隔,或使用多个-w
。
2、需要递归的目录扫描
ffuf -u http://site.com/FUZZ -w ./wordlist.txt -recursion -recursion-depth 1
-recursion 指定进行递归扫描。默认不递归
-recursion-depth 指定递归的深度。默认是1
3、扫描网站敏感文件
ffuf -u http://site.com/FUZZ -w ./wordlist.txt -e .bak
-e 扫描指定后缀的文件。
4、同时扫描多个网站的目录(多参数扫描的应用之一)
ffuf -u http://FUZZDOMAIN/FUZZDIR -w ./domain.txt:FUZZDOMAIN,./wordlist.txt:FUZZDIR
注意:ffuf执行多个字典时,默认采用clusterbomb模式,是顺序执行,如上面的命令,会先遍历完domian.txt,再遍历wordlist.txt。-mode 参数可以指定其他模式,但目前仅支持pitchfork/clusterbomb。
效果则是:wordlist.txt中取word1,去domain.txt中的所有域名尝试一遍,然后从wordlist.txt中取word2,再去domian.txt中所有域名尝试一遍,以此类推。
反思:domain写在前,wordlist在后,比反过来写更有效的防止触发网站的防御机制。若反过来写,则是先对同一域名尝试大量遍历,再转到下一个域名。
关于参数:FUZZDOMIAN和FUZZDIR,只需前后保持一致即可,改用W1/W2也可以。
多参数扫描可用于多种场景。还有json表单,用户名密码fuzz等。
5、认证处理
ffuf -u http://site.com/FUZZ -w wordlist.txt -b "NAME1=VALUE1; NAME2=VALUE2" -H "Name: Value"
-b 指定cookie参数。(cookie场景)
-H 定制包头字段参数。真实环境下网站管理员可能在包头中添加一些参数用于攻击防护或验证等,不符合的请求可能会被丢弃。(非标准包头参数场景)
注意:更复杂的认证需要和burpsuite结合使用。暂未遇到实际场景,遇到后补充。
6、从文件或读取fuzz目标
ffuf -request /request.txt -w ./wordlist.txt
-request 参数指定需要读取的文件。
常用场景:burpsuite获取了请求数据,保存到文件,修改文件在需要fuzz的地方加入FUZZ标志,ffuf读取文件进行扫描。
7、fuzz子域名
通过fuzz包头中host字段,并匹配200响应码,来获取子域名。
ffuf -w hosts.txt -u https://example.org/ -H "Host: FUZZ" -mc 200
其他可能用到的参数备注:
-s 仅输出简要的关键信息,可用于需要和其他脚本结合使用的场景。
-ac 自动校准过滤,ffuf通过发送一些随机字符获取200响应码的返回内容的长度,自动消除相同内容长度的响应。可能用到的场景:某些情况下,网站将错误信息或404页面重定向到某固定网页,并返回200响应码时,可自动排除噪音信息。
-p 请求延迟,指定每个请求之间经过指定范围内的随机延迟。如:-p 2,会在0.1-2秒之间随机延迟。
-rate 指定线程数,默认40