针对一些简单场景的模糊测试

  • A+
所属分类:安全文章

WFuzz 是开源的一款针对 web 应用模糊测试的开源软件,使用 Python 编写,测试的漏洞类型主要包括:未授权访问、注入漏洞(目录遍历、SQL 注入、XSS、XXE)、暴力破解登录口令 等。项目地址:

https://github.com/xmendez/wfuzz

使用文档:

http://wfuzz.readthedocs.io/

所需 Python 环境 Python 3.4+,安装方式:

pip install wfuzz

或者:

git clone git://github.com/xmendez/wfuzz.git && python setup.py install

安装完成之后,查看界面:

针对一些简单场景的模糊测试

接下来用 DVWA 靶场作为目标进行工具测试,靶场地址:

http://vul.xazlsec.com:8080/login.php

首先看到的是一个登录框,在我们不知道账号密码的情况下,如何 fuzz 出账号密码呢?

绕过 CSRF Token 继续爆破

我们可以使用 BurpSuite 看一下登录的数据包:

针对一些简单场景的模糊测试

我们看到除了账号密码之外,还有一个 user_token 的参数,这个是为了防止暴力破解而设置的 CSRF Token,每次打开页面都会生成一个新的 token,所以每次暴力破解的请求都需要将新的 token 获取到,然后填入参数中,所以需要增加一步操作,对于 wfuzz 而言,貌似没有这个绕过 csrf 爆破的功能,我们可以使用 Burp 的一个插件 CSRF Token Tracker,前往 burp 的扩展商店搜索 csrf 即可:

针对一些简单场景的模糊测试

使用也比较简单,安装完成之后,会在菜单栏出现一个 CSRF Token Tracker 的菜单,点进去之后,按下图配置:

针对一些简单场景的模糊测试

注意需要填写主机名和要替换的参数名,在 DVWA 登录中使用的参数名为 user_token,这样就可以使用 Repeater 或者 Intruder 对其进行登录破解尝试了,检测测试一下,由于登录成功失败返回的信息都一样,所以无法从数据包的角度判断是否破解成功,但是在破解完成之后,刷新页面会有提示:

针对一些简单场景的模糊测试

好像走偏了,由于 dvwa 是个漏洞平台,所以如果有人登录进去,那么服务器就会很危险,所以登录时使用 csrf tokne 来防御暴力破解,虽然可以绕过,但是增加了难度,接下来使用 wfuzz 来测试一下,看看其能力如何。

利用 WFuzz 的测试场景

针对登录功能的暴力破解

其实暴力破解的工具有很多,Burp 也能满足要求,本次主题主要目的是测试 WFuzz 的功能,所以使用 WFuzz 来进行暴力破解,DVWA 专门有一个暴力破解的练习模块:

http://vul.xazlsec.com:8080/vulnerabilities/brute/

针对一些简单场景的模糊测试

随便输入账号密码 admin/admin 来抓取数据包看看:

针对一些简单场景的模糊测试

看请求是通过 GET 请求将用户名和密码作为参数进行验证,由于访问 DVWA 的漏洞页面需要认证,所以需要指定 Cookie,然后尝试使用下面的命令对密码进行 FUZZ:

wfuzz -c -w pass.txt -u "http://vul.xazlsec.com:8080/vulnerabilities/brute/?username=admin&password=FUZZ&Login=Login" -b "PHPSESSID=isaaiqpa5i849bd933l9jlv3ot; security=low"

Fuzz 的结果如图:

针对一些简单场景的模糊测试

从图中可以看到第一行,密码为 password 时,Word 和 Chars 与其他不一样,说明,这个密码可能是正确的,然后用这个密码去测试即可。

针对参数进行 SQL 注入检测

在使用之前需要准备一些 SQL 注入检测的 Payload,还是使用 DVWA 来作为目标:

http://vul.xazlsec.com:8080/vulnerabilities/sqli/

在输入框随便填入一个数字,提交之后,获取数据包:

针对一些简单场景的模糊测试

针对参数中的 id 进行 Fuzz,命令如下:

wfuzz -z file,SQL.txt -u "http://vul.xazlsec.com:8080/vulnerabilities/sqli/?id=FUZZ&Submit=Submit" -b "PHPSESSID=isaaiqpa5i849bd933l9jlv3ot; security=low"

Fuzz 结果如下:

针对一些简单场景的模糊测试

结果中有一些 payload 获得的返回包不太一样,可以猜测其存在安全风险,其实 Fuzz 的过程就是触发异常,然后针对异常进行深入测试。

枚举未知参数

这个场景是当我们想发现一些隐藏参数的时候,可以用字典的方式来枚举参数名,比如我们不知道查询用户信息的参数是 id,我们可以用下面的命令来枚举参数名,准备一个参数名的字典 parameter.txt

wfuzz -z file,parameter.txt -u "http://vul.xazlsec.com:8080/vulnerabilities/sqli/?FUZZ=1&Submit=Submit" -b "PHPSESSID=j1r5qt89fkjii8dmemc0vdh1td; security=low"

FUZZ 结果如下:

针对一些简单场景的模糊测试

从图中可以看到,只有 id的返回结果与其他的不同,所以很大可能这个参数名为 id,这个场景经常用于一些伪静态的网站,用这种方式来还原 URL,方便测试。

总结

本文总结了一部分 WFuzz 的功能,用到的参数比较简单,主要是 -d 指定 POST 数据,-b指定 Cookie 值,-w指定字典文件路径,相同的功能,使用 -z file,payload.txt 的方式指定 payload 文件,其他参数的用法留给大家自行挖掘,如果你有更好的使用 WFuzz 的场景,欢迎留言讨论。

针对一些简单场景的模糊测试

本文始发于微信公众号(信安之路):针对一些简单场景的模糊测试

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: