Author: hei@knownsec.com
Date: 2016-07-06
该内容由 heige 2016年6月23日于 《中国网络安全大会 2016》演讲内容整理。
PDF 下载:非主流Fuzzing.pdf
Fuzzing是⼀种常⽤漏洞挖掘的⽅法。
“通过向应⽤程序提供⾮预期的输⼊并监控输出中的异常来发现软件中的故障(faults)的⽅法”
“模糊测试利⽤⾃动化或半⾃动化的⽅法重复地向有⽤程序输⼊”
构造⾮预期的输⼊(⽣成模糊测试的数据)是找到漏洞的关键,也是Fuzzing框架设计的⼀个关键点。
数据的构造⼀般包括:基本数据(结构)模板及对应值:
需要前期分析总结准备,⾃动化随机构造数据样本
把“构造⾮预期的输⼊”提交给应⽤程序执⾏。
需要⾃动化、持续不间断的执⾏。如:应⽤程序出现崩溃后能重新启动并执⾏。
这是Fuzzing框架稳定性最关键的步骤,这个点如果中断整个Fuzzing流程就没办法持续。
提供记录异常输出信息及对应的“⾮预期的输⼊”内容。
需要根据异常信息做好分类,⽐如重复的crash归类等。
排除不稳定的异常输出,⽐如不能复现的。
2010年 lcamtuf发布cross_fuzz
2011年 Stephen Fewer发布grinder
2013年 lcamtuf发布american fuzzy lop(afl)
⽬前内存型漏洞的主要挖掘⼿段,竞争激烈。
⾼度定制化、私有化、复杂化
集群化、⼤规模化(云), 计算资源成为主要的竞争⼿段。
Fuzzing不只是⼀种⽅法,更是⼀种思想!
漏洞挖掘的“⽅法论” 到 Fuzzing
根据不同的漏洞类型设计简单的Fuzzing
输⼊数据构造:
异常输出:
在xss攻防对抗了有⼀个很关键点就是:新的xss策略
原型:<script / src=‘1.js’></script> 使⽤了/替带了空格
那么我们可以设计⼀个简单的Fuzzing:
http://docs.google.com/Doc?id=dd7x5smw_16hdd34ggz
对于常见SQL注⼊来说,⾮预期的数据直接给参数提交’ 或者”,异常输出直接取错误信息
ORACLE”存储过程”注⼊Fuzzing
SELECT SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TA BLES(‘FOO','BAR','DBMS_OUTPUT".PUT(:P1);SYS.DBMS_OUT PUT.PUT_LINE(''KJ021320'');END;--','SYS',0,'1',0) FROMDUAL
a.根据object_name得到package的object_id
SQL> select object_id,object_type from all_objects where object_name='DRILOAD'; OBJECT_ID OBJECT_TYPE ---------- ------------------ 30192 PACKAGE 30243 PACKAGE BODY
b.根据object_id得到函数/过程名
SQL> SELECT DISTINCT PROCEDURE$ FROM SYS.ARGUMENT$ WHERE OBJ#=30192; PROCEDURE$ ------------------------------ BUILD_DML RESOLVE_SQE VALIDATE_POL VALIDATE_STMT
c.得到具体PROCEDURE$的参数个数及类型
SQL> select distinct position#,argument,pls_type from sys.argument$ where obj#=30192 and PROCEDURE$='VALIDATE_STMT'; POSITION# ARGUMENT PLS_TYPE ---------- ------------------------------ ------------------------------ 1 SQLSTMT VARCHAR2
d.构造fuzz数据
SQL> CALL CTXSYS.DRILOAD.VALIDATE_STMT(''''); CALL CTXSYS.DRILOAD.VALIDATE_STMT('''') * ERROR 位于第 1 ⾏: ORA-06510: PL/SQL: ⽆法处理的⽤户⾃定义异常事件 ORA-06512: 在"CTXSYS.DRILOAD", line 42 ORA-01756: 括号内的字符串没有正确结束
iis6下 1.asp;.jpg 可以解析asp
渗透测试常见的暴⼒破解其实就是⼀种“朴素”的Fuzzing
如果加⼊“变异”、“智能”的概念可能⼤⼤提升成功率
“相似的业务必然带来相似的漏洞”—漏洞的相似性之⼀
2012年 发现报告TSRC的漏洞:http://tel.exmail.qq.com/domain.html#aa|a|a&&b<script>/*///*/alert(1);</script>bb|ccc
2014年 通过“Fuzzing”我又找到并报告了腾讯业务“48个domain.html dom xss”
http://security.tencent.com/index.php/report/detail/303
实现:
Fuzzing不只是的⼀种漏洞挖掘的⽅法,更是⼀种思想可以应⽤于各种场景
Fuzzing的秘籍:“Just Do it” 中⽂知乎版:“整就⽜”
“跨维思维”:不要局限在原有的漏洞模型上,要多发散思维
Bypass :
原始漏洞模型:http://drops.wooyun.org[fuzz].360.cn—>对⽐new URL(str_1).getHost() 及 浏览器访问的结果
基于原漏洞模型的Fuzzing 异常记录:python -mSimpleHTTPServer 80
结果:还是只有/
再总结思考:
于是继续设计了新的Fuzzing
sudo python f.py 80
结果:
结果:
全平台下的Firefox UXSS漏洞
poc: