-
0x01 免责声明
请勿使用本文中所提供的任何技术信息或代码工具进行非法测试和违法行为。若使用者利用本文中技术信息或代码工具对任何计算机系统造成的任何直接或者间接的后果及损失,均由使用者本人负责。本文所提供的技术信息或代码工具仅供于学习,一切不良后果与文章作者无关。使用者应该遵守法律法规,并尊重他人的合法权益。
-
0x02 工具介绍
ffuf是一款由Golang开发的工具,缩写Fuzz Faster U Fool。面向渗透测试人员,用于 Web 应用程序的文件和文件夹扫描程序。
-
0x03 工具安装
在Kali Linux上安装ffuf
apt install ffuf
-
0x04 使用方法
快速开始
至少需要提供两个参数: -u指定URL和-w指定字典。关键词FUZZ用于指定测试位置。
ffuf -u http://ffuf.me/FUZZ -w /usr/share/seclists/Discovery/Web-Content/big.txt
也可以使用任何自定义关键字来代替FUZZ,比如wordlist.txt:KEYWORD
ffuf -u http://ffuf.me/NORAJ -w /usr/share/seclists/Discovery/Web-Content/big.txt:NORAJ
查找页面和目录
可以使用raft-medium-files-lowercase.txt字典枚举通用文件列表。
ffuf -u http://ffuf.me/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-files-lowercase.txt
使用包含不相关文件扩展名的大型通用字典并不是很有效。但是可以假设index.<extension>,在索引后面附加扩展名。
head /usr/share/seclists/Discovery/Web-Content/web-extensions.txt
.asp
.aspx
.bat
.c
.cfm
.cgi
.css
.com
.dll
.exe
使用web-extensions.txt字典判断扩展名
ffuf -u http://ffuf.me/indexFUZZ -w /usr/share/seclists/Discovery/Web-Content/web-extensions.txt
-e指定拓展名,减少误报。
ffuf -u http://ffuf.me/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-words-lowercase.txt -e .php,.txt
枚举文件拓展名不是唯一的方法,还可以使用raft-medium-directories-lowercase.txt字典模糊测试目录。
ffuf -u http://ffuf.me/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories-lowercase.txt
使用过滤器
以下是所有过滤参数和匹配参数说明
$ ffuf -h
...
MATCHER OPTIONS:
-mc Match HTTP status codes, or "all" for everything. (default: 200,204,301,302,307,401,403,405)
-ml Match amount of lines in response
-mr Match regexp
-ms Match HTTP response size
-mw Match amount of words in response
FILTER OPTIONS:
-fc Filter HTTP status codes from response. Comma separated list of codes and ranges
-fl Filter by amount of lines in response. Comma separated list of line counts and ranges
-fr Filter regexp
-fs Filter HTTP response size. Comma separated list of sizes and ranges
-fw Filter by amount of words in response. Comma separated list of word counts and ranges
...
使用ffuf有时输出很多,但是没有多少有效结果。比如403状态表示禁止访问所请求的资源,想要过滤403状态可以添加-fc 403参数,将输出时过滤403。
ffuf -u http://ffuf.me/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-files-lowercase.txt -fc 403
指定输出200状态,可以使用-mc 200参数过滤。
ffuf -u http://ffuf.me/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-files-lowercase.txt -mc 200
在输出的时候,会遇到状态码为200但是相应体大小为0,可以使用-fs 0参数过滤。
ffuf -u http://ffuf.me/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-files-lowercase.txt -fs 0
模糊测试参数
发现一个易受攻击的参数可能导致文件包含、路径泄露、XSS、SQL注入,甚至命令注入。ffuf允许把关键字放在任何地方,可以用它来模糊测试参数。
ffuf -u 'http://ffuf.me/sqli-labs/Less-1/?FUZZ=1' -c -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -fw 39
ffuf -u 'http://ffuf.me/sqli-labs/Less-1/?FUZZ=1' -c -w /usr/share/seclists/Discovery/Web-Content/raft-medium-words-lowercase.txt -fw 39
下面列出了5种不同的生成0-255的方法测试整数。
ruby -e '(0..255).each{|i| puts i}' | ffuf -u 'http://ffuf.me/sqli-labs/Less-1/?id=FUZZ' -c -w - -fw 33
ruby -e 'puts (0..255).to_a' | ffuf -u 'http://ffuf.me/sqli-labs/Less-1/?id=FUZZ' -c -w - -fw 33
for i in {0..255}; do echo $i; done | ffuf -u 'http://ffuf.me/sqli-labs/Less-1/?id=FUZZ' -c -w - -fw 33
seq 0 255 | ffuf -u 'http://ffuf.me/sqli-labs/Less-1/?id=FUZZ' -c -w - -fw 33
cook '[0-255]' | ffuf -u 'http://ffuf.me/sqli-labs/Less-1/?id=FUZZ' -c -w - -fw 33
ffuf还可以进行基于单词列表的暴力破解,例如,在身份验证页面上尝试密码。
ffuf -u http://ffuf.me/sqli-labs/Less-11/ -c -w /usr/share/seclists/Passwords/Leaked-Databases/hak5.txt -X POST -d 'uname=Dummy&passwd=FUZZ&submit=Submit' -fs 1435 -H 'Content-Type: application/x-www-form-urlencoded'
这里暴力破解必须使用POST方法-X,并提供POST数据-d,使用FUZZ来代替密码,指定一个自定义标头,因为ffuf不会像curl那样自动设置此内容类型标头-H 'Content-Type: application/x-www-form-urlencoded'。
查找虚拟主机和子域名
在子域枚举方面,ffuf可能不如专用工具有效,但也是可以做到的。
ffuf -u http://FUZZ.ffuf.me -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
某些子域可能无法从正在使用的DNS服务器解析,只能由其私有DNS服务器从目标的本地网络内解析。因此,某些虚拟主机 (vhost) 可能存在私有子域,因此前面的命令枚举不到。要尝试查找私有子域,必须使用Host HTTP标头,因为这些请求可能会被Web服务器接受。
ffuf -u http://FUZZ.ffuf.me -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -fs 0
ffuf -u http://ffuf.me -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -H 'Host: FUZZ.ffuf.me' -fs 0
代理ffuf流量
ffuf -u http://ffuf.me/ -c -w /usr/share/seclists/Discovery/Web-Content/common.txt -x http://127.0.0.1:8080
也可以仅将匹配发送到代理进行重放
ffuf -u http://ffuf.me/ -c -w /usr/share/seclists/Discovery/Web-Content/common.txt -replay-proxy http://127.0.0.1:8080
-
0x05 项目地址
https://github.com/ffuf/ffuf
原文始发于微信公众号(Matrix SEC):[ffuf] 一款高速Web Fuzzer工具
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论