目录
前言
这是我第一次写博客,每次学完东西,再用的时候就感觉忽悠忽无,可能是我太笨了吧(●’◡’●),最近才学完Wfuzz。记录一下。加油(ง •_•)ง————2022/1/7。
一、Wfuzz到底是个啥玩意儿?
Wfuzz 是一款Python开发的Web安全测试工具,它不仅仅是一个web扫描器:wfuzz能够通过发现并利用网站弱点/漏洞的方式帮助你使网站更加安全。wfuzz的漏洞扫描功能由插件支持。
wfuzz提供了简洁的编程语言接口来处理wfuzz或Burpsuite获取到的HTTP请求和响应。这使得你能够在一个良好的上下文环境中进行手工测试或半自动化的测试,而不需要依赖web形式的扫描器。
PS:上图为kali中自带的wfuzz,具体更新kali软件 apt-get upgrade
你可以用Wfuzz找到下面的漏洞:
- 可预测的认证
- 可预测的session标志(session id)
- 可预测的资源定位(目录和文件)
- 注入
- 路径遍历
- 溢出
- 跨站脚本
- 认证漏洞
- 不安全的直接对象引用
- ………特性
- 递归(目录发掘)
- Post数据爆破
- 头部爆破
- 输出HTML(详细报告,点击链接查看内容,POST数据也能阅览)
- 多彩输出
- 返回码、词数、行数等等来隐藏结果
- URL编码
- Cookie
- 多线程
- 代理支持
- 多参数fuzz
二、安装
1.安装
使用pip安装 WFuzz
$ pip install wfuzz
使用 wfuzz docker 镜像
您可以通过执行以下命令从 github 注册表中提取 wfuzz docker 映像:
$ docker pull ghcr.io/xmendez/wfuzz
ps:docker是个很好用的虚拟化平台,后续写文章会具体讲述的(●ˇ∀ˇ●)
1.2 相关链接
GitHub地址:https://github.com/xmendez/wfuzz/
官方文档:https://wfuzz.readthedocs.io/en/latest/user/installation.html#
三、基本使用
这里针对上文中相关wfuzz的特性进行一 一演示,初步了解下wfuzz
3.1 目录遍历
这里的递归,可能大家不太理解,用简单的意思就是进行目录(某个文件)爆破,对已知的url进行目录(某个文件)猜解,达到获取到更多的可访问的目录(某个文件)信息,信息收集,扩大攻击面。
Wfuzz爆破文件:
wfuzz -w wordlist URL/FUZZ.php
Wfuzz爆破目录:
wfuzz -w wordlist URL/FUZZ
使用 -z 或 -w 参数可以同时指定多个payloads,这时相应的占位符应设置为 FUZZ, … , FUZnZ, 其中n代表了payload的序号。举例:
wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt -w /usr/share/wfuzz/wordlist/general/common.txt -w /usr/share/wfuzz/wordlist/general/extensions_common.txt --hc 404 http://testphp.vulnweb.com/FUZZ/FUZ2ZFUZ3
其中 --hc 过滤隐藏响应码为404的返回结果。
遍历枚举参数值
假如你发现了一个未授权漏洞,地址为:http://127.0.0.1/getuser.php?uid=123 可获取uid为123的信息
uid参数可以遍历,已知123为三位数纯数字,需要从000-999进行遍历,也可以使用wfuzz来完成:
wfuzz -z range,000-999 http://127.0.0.1/getuser.php?uid=FUZZ
可以使用payloads模块类中的range模块进行生成。
3.2 Post数据爆破
场景:发现一个登录框,没有验证码,想爆破弱口令账户。
请求地址为:http://127.0.0.1/login.php
POST请求正文为:username=&password=
使用wfuzz测试:
wfuzz -w userList -w pwdList -d"username=FUZZ&password=FUZ2Z" http://127.0.0.1/login.php
-d 参数传输POST请求正文。
3.3 头部爆破
HTTP Headers测试
发现一个刷票的漏洞,这个漏洞需要伪造XFF头(IP)可达到刷票的效果,投票的请求为GET类型,地址为:http://127.0.0.1/get.php?userid=666。
那么现在我想给userid为666的朋友刷票,可以使用wfuzz完成这类操作:
wfuzz -z range,0000-9999 -H "X-Forwarded-For: FUZZ" http://127.0.0.1/get.php?userid=666
-H指定HTTP头,多个需要指定多次(同Cookie的-b参数)。
3.4 测试HTTP请求方法(Method)
想测试一个网站(http://127.0.0.1/)支持哪些HTTP请求方法
使用wfuzz:
wfuzz -z list,"GET-POST-HEAD-PUT" -X FUZZ http://127.0.0.1/
这条命了中多了 -z list 和 -X 参数,-z list可以自定义一个字典列表(在命令中体现),以-分割;-X参数是指定HTTP请求方法类型,因为这里要测试HTTP请求方法,后面的值为FUZZ占位符。
3.5 使用代理
做测试的时候想使用代理可以使用如下命令:
wfuzz -w wordlist -p proxtHost:proxyPort:TYPE URL/FUZZ
-p参数指定主机:端口:代理类型,例如我想使用ssr的,可以使用如下命令:
wfuzz -w wordlist -p 127.0.0.1:1087:SOCKS5 URL/FUZZ
多个代理可使用多个-p参数同时指定,wfuzz每次请求都会选取不同的代理进行。
3.6 认证
想要测试一个需要HTTP Basic Auth保护的内容可使用如下命令:
wfuzz -z list,"username-password" --basic FUZZ:FUZZ URL
wfuzz可以通过–basec --ntml --digest来设置认证头,使用方法都一样:
–basec/ntml/digest username:password
3.7 递归测试
使用-R参数可以指定一个payload被递归的深度(数字)。例如:爆破目录时,我们想使用相同的payload对已发现的目录进行测试,可以使用如下命令:
wfuzz -z list,"admin-login.php-test-dorabox" -R 1 http://127.0.0.1/FUZZ
如上命令就是使用了自定义字典列表:
1
2
3
4
admin
login.php
test
dorabox
递归深度为1也就是说当发现某一个目录存在的时候,在存在目录下再递归一次字典。
3.8 并发和间隔
wfuzz提供了一些参数可以用来调节HTTP请求的线程
你想测试一个网站的转账请求是否存在HTTP并发漏洞(条件竞争)
请求地址:http://127.0.0.1/dorabox/race_condition/pay.php
POST请求正文:money=1
使用如下命令:
wfuzz -z range,0-20 -t 20 -d"money=1" http://127.0.0.1/dorabox/race_condition/pay.php?FUZZ
3.9 保存测试结果
wfuzz通过printers模块来将结果以不同格式保存到文档中,一共有如下几种格式:
raw | `Raw` output format
json | Results in `json` format
csv | `CSV` printer ftw
magictree | Prints results in `magictree` format
html | Prints results in `html` format
将结果以json格式输出到文件的命令如下:
wfuzz -f outfile,json -w wordlist URL/FUZZ
使用-f参数,指定值的格式为输出文件位置,输出格式
三、总结
这篇就先写下使用吧,下一篇弄命令详解。(〃 ̄︶ ̄)人( ̄︶ ̄〃)
参考引用:https://www.fuzzer.xyz/2019/03/29/WFUZZ%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/
版权归原作者 小霸王linkmH 所有, 如有侵权,请联系我们删除。