【渗透工具系列】模糊测试必备神器FFUF

相关阅读

视频讲解

本期视频将详细介绍模糊测试神器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

f代表是filters,即过滤的意思

-fc 返回值,过滤掉指定返回值
-fl 返回行数,过滤掉指定返回行数
-fr 正则表达式,过滤掉指定的正则表达式
-fs 返回大小,过滤掉指定的返回内容大小
-fw 返回单词数,过滤掉指定的返回单词数量

图片[2]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog

扫描二级域名

譬如我们想扫描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

我们可以通过返回值进行进一步的细化,比方说我们结果只接受返回值是200、301、302的

ffuf -u http://FUZZ.baidu.com -w subdomains-top1million-110000.txt -mc 200,301,302

当然如果你嫌太慢了,也可以使用-t设置线程

图片[4]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog

当然,你也可以使用其他的方式,比如资产测绘工具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

敏感文件探测

譬如我们想找某个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

故,我们可以先找到目录穿越的注入点,譬如

/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

暴力破解

  • -mode可以设置对应模式
    • clusterbomb 交叉
    • pitchfork 一一对应
    • sniper 单个字典

我们可以将请求包保存为bruteforce.txt

图片[8]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog
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

我们可以看到响应大小很多都是4899,这里出现了4883,可以目测大概率就是密码了

图片[10]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog

这时我们可以过滤掉4899,看看有没有多个账户可以破解成功的,这时就用到了我们最前面讲的-fs

ffuf -request bruteforce.txt -request-proto http -w username.txt:USERNAME,password.txt:PASSWORD -fs 4899
图片[11]-【渗透工具系列】模糊测试必备神器FFUF-FancyPig's blog

当然,你也可以根据返回的内容进行过滤,譬如用户名或密码不正确

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
© 版权声明
THE END
喜欢就支持一下吧
点赞15赞赏 分享
评论 共4条

请登录后发表评论