在计算机领域,Fuzz Testing(模糊测试)是一种测试方法,即构造一系列无规则的“坏”数据插入应用程序,判断程序是否出现异常,以发现潜在的bug。在信息安全领域,也有人尝试引入fuzz testing思想进行安全漏洞挖掘,而且效果不错
JSRC 安全小课堂第117期,邀请到dogboy作为讲师就fuzz的一些简单思考为大家进行分享。同时感谢各位小伙伴们的精彩讨论。
京安小妹:fuzz的优缺点?
dogboy :
优点:
1 手法简单,容易操作,可以省去不少人力,程序跑起来以后只需要分析结果就行了
2 发现漏洞速度快、误报相对来说很低
缺点:
1 黑盒测试的全部缺点
2 不通用,构造测试用例周期长,如果是复杂的协议
3 Undocumented的接口无法测试
京安小妹:通常情况下fuzz哪些内容??
dogboy :
文件格式的Fuzz 多见于软件漏洞的挖掘,好像 ImageMagick的不少crash都是靠这样fuzz出来的
– 图像格式
– 文档格式
– 等等
协议的Fuzz
– RPC协议
– Http协议(参数=值、路径)
– 等等
京安小妹:挖掘漏洞时fuzz的用处?
dogboy :
大佬们一般会在过sql注入的waf的时候用上fuzz技术,靠强大的字典,绕过waf的关键词检测
https://xz.aliyun.com/t/2418
或者像key一样对参数名等进行fuzz,寻找jsonp劫持、越权或者rce
https://gh0st.cn/archives/2018-07-25/1
key使用的是对参数进行增删改的fuzz方式,尝试挖掘无法直接发现的漏洞(一般适用于挖掘逻辑类漏洞)
而我这样的就只能fuzz一下url跳转时的参数,挖一挖url跳转
京安小妹:fuzz最关键的是什么?
dogboy :
我觉得字典第一关键,字典要足够大,覆盖所有的可能。
关于字典:
1. 收集网站本身自有传递参数和值
2. 收集和整理常见字典
3. 收集和整理字典的规则
京安小妹:有哪些比较不错的fuzz工具?
dogboy :
Web向的Fuzz工具
https://github.com/xmendez/wfuzz
https://github.com/maK-/parameth
可以用在做请求参数类的模糊测试,以上所列项目的所有功能都依赖于字典和字典规则完成测试。
HTTP Fuzzer
https://fuzzer.test404.com/?/article/5
好处就是可以拖拖拽拽出插件,不用写脚本,并且是图形化,windows用起来方便,适合偷懒的时候使用23333
XssSniper插件
chrome上的插件,360的0kee Team写的插件,值得玩味的是我靠这个插件fuzz出了一个360主站的一个xss
模糊测试只是自动化发现漏洞的一个重要手段,就像自动化漏洞扫描器一样。我们并不能完全依靠它,在测试过程中,人工对结果进行适时的分析,对字典做出合理的改进,不仅能提高模糊测试的效率,还能够帮助我们挖掘到更多潜在的设计缺陷。毕竟,机器终究是“死板”的,而人是“灵活”的。
dogboy :
互动问答环节:
1. fuzz是靠规则还是累积的字典?
规则和累积的字典都有
字典可以好好整理这个项目
https://github.com/fuzzdb-project/fuzzdb
猪猪侠的字典
https://fuzz.wget.lc/Fuzz/
本期JSRC 安全小课堂到此结束。更多内容请期待下期安全小课堂。如果还有你希望出现在安全小课堂内容暂时未出现,也欢迎留言告诉我们。