相关阅读
视频讲解
本期视频将详细介绍模糊测试神器FFUF,我们可以通过FFUF测试API端点,也可以进行目录扫描,同时支持递归扫描;这里比较细节的是,FFUF还支持匹配、过滤两大功能,可以针对响应值、返回的行数、返回的单词数进行匹配或者过滤;除此之外,它还具备了漏洞赏金的必备功能,可以自定义并发数、延迟等;
图文教程
安装教程
如果您使用的Kali Linux,则自带了ffuf
工具
当然,您的系统如果没有ffuf也没关系,可以在Github上下载并编译
git clone https://github.com/ffuf/ffuf ; cd ffuf ; go get ; go build
当然还有更为简单的,可以直接使用go install
安装
go install github.com/ffuf/ffuf@latest
使用教程
下面的使用教程与原视频无关,我们在下方分享下自己使用FFUF的经验,可能部分偏实战
在此之前,我们先明确FFUF里有两大功能,一个是m开头的,一个是f开头的
m代表的是matchers,即匹配的意思
- -mc 返回值,匹配指定返回值
- -ml 返回行数,匹配指定返回行数
- -mr 正则表达式,匹配指定的正则表达式
- -ms 返回大小,匹配指定的返回内容大小
- -mw 返回单词数,匹配指定的返回单词数量
![图片[1]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127032950297-1024x576.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
f代表是filters,即过滤的意思
-fc 返回值,过滤掉指定返回值
-fl 返回行数,过滤掉指定返回行数
-fr 正则表达式,过滤掉指定的正则表达式
-fs 返回大小,过滤掉指定的返回内容大小
-fw 返回单词数,过滤掉指定的返回单词数量
![图片[2]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127033101328-1024x572.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
扫描二级域名
譬如我们想扫描baidu.com的子域名,可以使用FUZZ.baidu.com
FUZZ将会被替换为字典里的内容
字典subdomains-top1million-110000.txt
ffuf -u http://FUZZ.baidu.com -w subdomains-top1million-110000.txt
![图片[3]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127024303285.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
我们可以通过返回值进行进一步的细化,比方说我们结果只接受返回值是200、301、302的
ffuf -u http://FUZZ.baidu.com -w subdomains-top1million-110000.txt -mc 200,301,302
当然如果你嫌太慢了,也可以使用-t
设置线程
![图片[4]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127030933172.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
当然,你也可以使用其他的方式,比如资产测绘工具uncover被动收集
https://github.com/projectdiscovery/uncover
多站点目录探测
在你得到了要扫描的目标站点,可以存入domains.txt中
譬如domains.txt
api.iculture.cc
www.iculture.cc
sign.iculture.cc
wordlist.txt用于存放目录名称
我们可以使用FFUF工具同时对多个站点进行模糊测试
ffuf -u https://Site/Path -w wordlist.txt:Site,domains.txt:Path
其实我们发现FFUF在进行模糊测试时,不一定非用FUZZ关键词,你也可以使用设置变量,譬如上面的命令就是
- wordlist.txt:Site
- domains:Path
这样在调用关键词时,就直接https://Site/Path即可
目录探测
我们使用-recursion
进行递归,-recursion-depth
为递归的深度
ffuf -u http://192.168.10.215/pikachu/FUZZ -w directory-list-2.3-big.txt -ic -recursion -recursion-depth 3
这里相当于对http://192.168.10.215/pikachu/FUZZ先进行模糊测试
然后发现存在http://192.168.10.215/pikachu/wiki目录,它会对其在进行模糊测试
http://192.168.10.215/pikachu/wiki/FUZZ
之后会发现http://192.168.10.215/pikachu/wiki/image,然后在对其进行模糊测试
这就是整个递归模糊测试的思路,然后根据上面设置的-recursion-depth
决定递归几次
这里还有个细节就是-ic
可以自动忽略注释部分(ignore comment),不然这个#后面的内容也会被添加到FUZZ里
![图片[5]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127031523751.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
敏感文件探测
譬如我们想找某个ip、域名下是否有之前存储的备份文件之类的
ffuf -u http://192.168.10.215/FUZZ -w filename.txt -e .bak
filename.txt是我们的字典,如果我们字典中有纯文件名称,譬如fancypig
,但是我们也想在扫描的时候给其加入后缀,则可以使用-e .bak
,这样跑字典时,就会自动带入fancypig.bak
了
ffuf -u http://192.168.10.215/FUZZ -w filename.txt -e .bak
如果你想添加多个后缀,就用,
隔开即可
ffuf -u http://192.168.10.215/FUZZ -w filename.txt -e .bak,.sql
当然,我们还可以扫描多级,譬如我们的字典中有test
,扫描时发现有test
目录,则可以递归继续扫描test
下的文件,可以使用下面的命令-recursion
,通过-recursion-depth
指定递归的深度(前面已经讲过了,这里就不再展开了)
ffuf -u http://192.168.10.215/FUZZ -w filename.txt -recursion -recursion-depth 3 -e .bak,.sql
目录穿越
http://192.168.10.215/pikachu/vul/dir/dir_list.php?title=
在检测目录穿越时,我们通常会发现有形如root:x
的出现
![图片[6]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127032613210-1024x159.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
故,我们可以先找到目录穿越的注入点,譬如
/vul/dir/dir_list.php?title=
然后我们可以尝试在结果里匹配root:x
即-mr "root:x"
ffuf -u http://192.168.10.215/pikachu/vul/dir/dir_list.php?title=FUZZ -w directory_traversal.txt -mr "root:x"
这样就可以大大提升我们获取数据的效率
目录穿越字典:directory_traversal.txt
![图片[7]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127032550226-1024x480.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
暴力破解
- -mode可以设置对应模式
- clusterbomb 交叉
- pitchfork 一一对应
- sniper 单个字典
我们可以将请求包保存为bruteforce.txt
![图片[8]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127033301335.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
POST /pikachu/vul/burteforce/bf_form.php HTTP/1.1
Host: 192.168.10.215
Content-Length: 44
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
Origin: http://192.168.10.215
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.10.215/pikachu/vul/burteforce/bf_form.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: security_level=0
Connection: close
username=USERNAME&password=PASSWORD&submit=Login
然后我们可以将username.txt字典替换上述的POST请求中的USERNAME,同样道理password.txt字典替换PASSWORD
ffuf -request bruteforce.txt -w username.txt:USERNAME,password.txt:PASSWORD
![图片[9]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127033630309.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
我们可以看到响应大小很多都是4899,这里出现了4883,可以目测大概率就是密码了
![图片[10]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127033645571.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
这时我们可以过滤掉4899,看看有没有多个账户可以破解成功的,这时就用到了我们最前面讲的-fs
ffuf -request bruteforce.txt -request-proto http -w username.txt:USERNAME,password.txt:PASSWORD -fs 4899
![图片[11]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog](https://static.iculture.cc/wp-content/uploads/2022/11/20221127033808477.png?x-oss-process=image/auto-orient,1/format,webp/watermark,image_cHVibGljL2xvZ28ucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMTA,x_10,y_10)
当然,你也可以根据返回的内容进行过滤,譬如用户名或密码不正确
ffuf -request bruteforce.txt -request-proto http -w username.txt:USERNAME,password.txt:PASSWORD -fr "<p> username or password is not"
文件上传
http://192.168.10.215/pikachu/vul/unsafeupload/getimagesize.php
后缀判断
ffuf -request upload -request-proto http -w most-common-extensions.txt
我们可以使用-fr
筛选过滤掉响应包中指定大小的,从而确认哪些文件后缀是我们支持上传的
ffuf -request upload -request-proto http -w most-common-extensions.txt -fs 4672
Api接口测试
https://reqres.in/
首先,找端点
ffuf -u https://reqres.inFUZZ -w api-endpoints.txt
然后在针对端点下一级进行模糊测试,譬如我们发现有用户相关接口
https://reqres.in/api/user
我们可以手动去访问查看是否能看到所有的用户,通常是不能的,我们需要进行模糊测试
ffuf -u https://reqres.in/api/user/FUZZ -w number.txt
除此之外我们还可以进一步尝试,比方说用户是否可以登录
ffuf -u https://reqres.in/api/login -H "Content-Type: application/json; charset=utf-8" -d '{"email":"USERNAME","password":"PASSWORD"}' -w email.txt:USERNAME,password.txt:PASSWORD
限制请求速度
- -p 两次请求间隔
- -t 线程数
- -rate 一秒请求数量
输出固定格式
- -of
支持html、md、json、csv等多种格式
美化输出格式
- -c 颜色高亮
使用代理
- -x http://127.0.0.1:7890
与BurpSuite联动
字典补充
- https://github.com/danielmiessler/SecLists/
- https://github.com/swisskyrepo/PayloadsAllTheThings
- 最新
- 最热
只看作者