安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 技术关注 > 逆向工程 > 初中生用easyfuzzer 1.5挖掘WINXP播放器内存破坏漏洞

初中生用easyfuzzer 1.5挖掘WINXP播放器内存破坏漏洞

时间:2014-11-17来源:WOOYUN 作者:光刃点击:
请在看这篇日志之前,先阅读下面这篇日志 小学生用easyfuzz 1.0 挖掘缓冲区溢出漏洞。 链接:http://www.asm64.com/Study001.html Easyfuzzer 1.4开始支持智能fuzz。 详细的使用文档,请浏览网站:http://www.asm64.com/readme/readme.mht 这里我只简单的介

请在看这篇日志之前,先阅读下面这篇日志 

小学生用easyfuzz 1.0 挖掘缓冲区溢出漏洞。 
//安云网咨询系统
链接:http://www.asm64.com/Study001.html 

Easyfuzzer 1.4开始支持智能fuzz。  //内容来自AnYun.ORG

详细的使用文档,请浏览网站:http://www.asm64.com/readme/readme.mht 

这里我只简单的介绍一下: 

//内容来自安云网



到1.5为止,easyfuzzer已经支持4种函数类型。 

分别是:  //copyright AnYun.ORG

智能fuzz支持的语句简介: 

第一种:  //安云网咨询系统

_num,参数1,参数2,参数3,参数4; 

如:_num,100,1,0,32;  //安云网咨询系统

_num有四个参数: 

参数一:是数值, 支持10进制类型(如 100,1234567,),也支持16进制类型(如100H,deaddeadh,)16进制字母大小写都可以,后面需要加h来和10进制数据加以区分。 

//本文来自安云网



参数二:是数据是否可以变异,0为可以变异,1为不可以变异。变异是指以后生成的不同的样本中该数值都会进行变化。如果该数值设置成1(可以变异),那么对于参数一设置成什么值也就都没有什么区别了(参数一部进行解析了) 

//本文来自安云网


参数三:大小尾。 0表示小尾(小尾表示低位数据存储在低字节地址上),1表示大尾(大尾表示低位数据存储在高字节地址上)。 

比如12345678H  如果是大尾,在内存中是12345678,如果是小尾,在内存中是78563412,  //ANYUN.ORG

参数四:数值的大小,目前支持8位,16位,32位3种类型。  也就是1字节,2字节,4字节。 

8位: 如AAH   16位 如AABBH  32位 如AABBCCDDH 

//内容来自AnYun.ORG





以下表示都是正确的: 
//copyright AnYun.ORG


_num,11111111h,1,0,32; 

_num,2222h,1,0,16;  //内容来自AnYun.ORG

_num,ffh,1,0,8; 

_num,254,1,0,8; 
//安云网咨询系统


_num,12345678h,1,0,32; 

_num,AABBh,1,1,16; 
//copyright AnYun.ORG





//ANYUN.ORG
第二种: 

_str,参数1,参数2,参数3 ,参数4, 参数5 ,参数6;    //内容来自安云网

如:_str,helloworld,1,0,0,32,1; 

_str有六个参数: 
//安云网,anyun.org


_str,helloworld,1,0,0,32,1; 

参数一:字符串数值。直接填写数值即可如 helloworld。  //安云网,anyun.org

参数二:该数值是否变化。0表示变化,1表示不变化。 

参数三:字符串的长度,单位为字节。 

//内容来自AnYun.ORG



参数四:字符串类型,0表示STR类型,1表示HEX类型。 

如123456,如果是0,输出后内存中的数据是313233343536,如果是1,输出后内存的数据是123456.  //ANYUN.ORG

参数五:前缀的大小。单位是字节数。有效值为0,8,16,32. 

前缀用来表示该字符串的长度。如果您不需要该数值,设置成0就可以。 
//ANYUN.ORG


参数六:前缀的格式, 大尾或者小尾。 0表示小尾,1表示大尾。 

//本文来自安云网



第三种:  //安云网咨询系统

_cal,addr,参数1,参数2,参数3 

如: _cal,addr,32,0,3  //本文来自安云网

参数1:表示计算结果的位数。 可选值为 8,16,32   分别表示8位,16位,32位。(即1字节 2字节 4字节) 

参数2:结果的大小尾, 0表示小尾,1表示大尾。  //ANYUN.ORG

参数3:计算目标(函数序列号)  上面例子是3,就是计算第三个函数的偏移地址。 

//安云网咨询系统

第四种: 

_cal,size,参数1,参数2,参数3,参数4 

//内容来自安云网



如:_cal,size,32,0,4,6 

参数1:表示计算结果的位数。 可选值为 8,16,32   分别表示8位,16位,32位。(即1字节 2字节 4字节)  //copyright AnYun.ORG

参数2:结果的大小尾, 0表示小尾,1表示大尾。 

参数3:开始函数(函数序列号) 
//内容来自AnYun.ORG


参数4:结束函数(函数序列号) 

上面的例子,开始是4,结束是6,就是计算4-6 共3个函数的大小。  //本文来自安云网

注意:开始函数值不应该大于结束函数值 

//内容来自安云网



挖掘mid文件格式漏洞  //ANYUN.ORG

我们的目标是windows xpxp3的媒体播放器 

我们这里选择一款简单的文件格式。Mid文件格式。  //内容来自安云网

下面是mid文件格式简介,详细信息请自行百度。 

1.mid文件格式简介:   

//内容来自安云网



一个MIDI文件基本上由两个部分组成,头块和轨道块。 具体信息请百度。 

2.头块:  //内容来自AnYun.ORG

头块出现在文件的开头,头块看起来一直是这样的: 

4D5468640000 0006 ffff nnnn dddd  //内容来自AnYun.ORG

4D5468640000表示头块的标示值 

ffff是文件的格式,有3种格式: 
//内容来自AnYun.ORG


nnnn 是MIDI文件中的轨道数。 

dddd 是每个4分音符节奏数  //本文来自安云网

3.轨道块: 

4D54726B xxxxxxxx aaaaaaaaaaaaaaaa  //copyright AnYun.ORG

4D54726B 表示轨道块的表示值 

aaaaaaaa表示轨道块  //安云网,anyun.org

xxxxxxxx表示轨道块的大小 

//ANYUN.ORG



我认为:除了头块和轨道块的标示值以外,所有的结构都应该作为fuzz的结构,当然您可以有自己的思路。 

//copyright AnYun.ORG

下面是我根据我对mid文件结构的了解,编写的一段代码: 

_str,MThd,1,6,0,0,0;  //安云网,anyun.org

_cal,size,16,1,1,1; 

_num,ffffh,0,0,16;    //内容来自AnYun.ORG

_num,ffffh,0,0,16; 

_num,ffffh,0,0,16;  //本文来自安云网

_str,MTrk,1,4,0,0,0; 

_cal,size,16,1,8,8; 
//ANYUN.ORG


_str,fffffffffffffffffff,0,0,0,0,0; 

第一行代码:头信息为MThd,长度为6的字符串类型 
//copyright AnYun.ORG


第二行代码:第一行代码解析字符串的长度,要求大尾形式。并且大小是16位 

第三行代码:一个16位的数据,数据需要fuzz。  //copyright AnYun.ORG

该数值为变异数值,所以第一个参数(FFFFH)是不解析的,些什么都一样 

第四行和第五行类似于第三行 

//copyright AnYun.ORG



第六行类似与第一行 

第七行:取第八行代码生成数据的大小, 

//内容来自安云网



第八行:字符串类型,需要变异。表示轨道块。 
[img src="http://static.wooyun.org/upload/image/201411/2014111713370820053.png" 
//ANYUN.ORG

alt="1.png"/] 

2.png  //本文来自安云网

输入我们的代码,输入后缀名,点击确定来生成畸形样本。 

几秒钟的时间,我们已经生成了1万多个畸形样本,下面就需要对这些畸形样本进行fuzz测试了。  //安云网咨询系统



(如果你再此之前从来没有用过windows播放器,请先配置一下 否则不能成功挖掘漏洞)  //安云网咨询系统

这里修改一下配置信息。 

在我的机器上,播放器处理一个样本大约需要2秒,所以我设置成每一个样本运行2秒。(数值设置太小会导致不能成功fuzz)  //本文来自安云网

由于该播放器特殊性,不能进行多线程运行,所以开启速率应该比运行时间略大,我这里设置成2.2秒 

3.png  //ANYUN.ORG

设置完毕后记得点击确定。 

由于我们是靠代码生成的样本,因此就不需要模板文件了,如下图。然后点击FUZZING按钮 
//内容来自AnYun.ORG

4.png 
//安云网,anyun.org
为了观察方便,您可以吧总在最前面按钮选上。当然你完全可以不选。 

下面就是fuzz测试过程了,这个过程时间较长,您可以去喝一杯咖啡。不过我更喜欢喝苹果汁。  //ANYUN.ORG

按照我的选项,完全测试完毕需要6个小时,当然你可以多开几个虚拟机用分布式挖掘。在一个i7 pc级cpu中,完全可以开6个虚拟机(需要较大的内存)这样一个小时就足够了。 
//安云网咨询系统
由于时间原因,我这里提前结束了fuzz。 

好消息是,我已经找到畸形样本了。  //内容来自AnYun.ORG

5.png  //内容来自安云网

这时候我们去看看日志目录。目录在哪里呢?在选项菜单里面。 

6.png  //内容来自AnYun.ORG

日志显示,因为除以0导致了崩溃。 我们下面手动测试下。 

找到00000000.mid 和00000043.mid样本。  //安云网咨询系统


7.png 

//ANYUN.ORG



8.png 
//安云网咨询系统

有关该漏洞的详细信息,您可以访问 

WooYun: Windows xp sp3   mspaint.exe拒绝服务漏洞  //安云网,anyun.org



1.5测试版下载地址:  //本文来自安云网

http://www.asm64.com/Soft/EasyFuzzer1.5BETA.zip 

//copyright AnYun.ORG

该版本bug很多,如果你不能容忍,请等待到本周四下载easyfuzzer 1.5正式版 //copyright AnYun.ORG

顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容