首页    新闻    下载    文档    论坛     最新漏洞    黑客教程    数据库    搜索    小榕软件实验室怀旧版    星际争霸WEB版    最新IP准确查询   
名称: 密码:      忘记密码  马上注册
安全知识 :: 专题文章

MS08-052 WMF漏洞分析及漏洞测试


http://www.gipsky.com/
------by CuteK



一 背景知识



由文件格式入手,来分析MS08-052漏洞, 并构造了一个可以使没有补丁的程序崩溃的图片,



1 WMF文件结构



--------------------------|



| 文件头 |



|-------------------------|



| 文件记录 |



|-------------------------|



|-------------------------|



| 文件记录 |



|-------------------------|



|-------------------------|



| 文件记录 |



|-------------------------|



windows中文件头结构如下



typedef struct

{

INT16 Left;

INT16 Top;

INT16 Right;

INT16 Bottom;

} PWMFRect16;



typedef struct

{

UINT32 Key; // GDIP_WMF_PLACEABLEKEY

INT16 Hmf; // Metafile HANDLE number (always 0)

PWMFRect16 BoundingBox; // Coordinates in metafile units

INT16 Inch; // Number of metafile units per inch

UINT32 Reserved; // Reserved (always 0)

INT16 Checksum; // Checksum value for previous 10 WORDs

} WmfPlaceableFileHeader;



typedef struct tagMETAHEADER

{

WORD mtType; // 01 磁盘

WORD mtHeaderSize; // 0x0009 头大小9个word

WORD mtVersion;

DWORD mtSize; // 不算WmfPlaceableFileHeader头的文件大小

WORD mtNoObjects;

DWORD mtMaxRecord;

WORD mtNoParameters;

} METAHEADER;

[img width=500]http://www.neeao.com/blog/attachments/200809/26_092026_1.jpg[/img]http://www.neeao.com/blog/attachments/200809/26_092026_1.jpg" onload="(script removed)DrawImage(this);" />

图 1.1 文件头



文件记录由 文件记录大小(4字节) 文件记录类型(2字节) 文件记录体组成,其中0x0538类型是polypolygon类型,正是对这个记录的处理不当导致的溢出, 该记录的结构如下



记录大小



记录类型



polygon个数(假设为x)



第1个polygon的点数(y个) 第2个polygon点数 ....第x个polygon的点数 .



第1个polygon的第1个点 第1个polygon的第2个点....第1个polygon的第y个点



...............



第x个polygon的第1个点 .................................第x个polygon的最后1个点



由图1.2看出该记录的大小为0x73个word长度. 该记录类型是0x0538 该记录中polygon的个数为1 , polygon的点数为0x37, 后面0x37个word长度的数据就是该polygon的点. 想要读取该记录则要先分配空间,但并不是根据0x73来分配的,而是根据polygon的个数,及每个polygon的点数相加来分配空间.

[img width=500]http://www.neeao.com/blog/attachments/200809/26_092051_1.2.bmp[/img]http://www.neeao.com/blog/attachments/200809/26_092051_1.2.bmp" onload="(script removed)DrawImage(this);" />

图 1.2 polypolygon记录



二 漏洞部分代码

[img width=500]http://www.neeao.com/blog/attachments/200809/26_092111_2.1.jpg[/img]http://www.neeao.com/blog/attachments/200809/26_092111_2.1.jpg" onload="(script removed)DrawImage(this);" />

图2.1 具有漏洞的代码

[img width=500]http://www.neeao.com/blog/attachments/200809/26_092132_2.2.jpg[/img]http://www.neeao.com/blog/attachments/200809/26_092132_2.2.jpg" onload="(script removed)DrawImage(this);" />

图2.2 微软修补后的代码



除了判定是否小于0 还有判定是否加过了溢出了



三 WMF文件构造



构造了一个wmf文件polypoygon记录, 用极大的polygon个数和每个polygon的点数都很大, 使其计算达到整数溢出,使用没有补丁的gdiplus的程序查看该文件,就可以直接崩溃, 测试图片连接http://bbs.antiy.cn/viewthread.php?ti ... xtra=page=1&frombbs=1 无木马. 呵呵

[img width=500]http://www.neeao.com/blog/attachments/200809/26_092200_123123.png[/img]http://www.neeao.com/blog/attachments/200809/26_092200_123123.png" onload="(script removed)DrawImage(this);" />

四解决方案



有漏洞的赶紧打补丁吧



http://www.antiy.com/cn/download/agdifix.htm



五 总结



图形文件格式是由很多“段”构成的数据流,而每个段由:长度, 类型,参数,数据等结构构成,在程序解析这些文件格式的时候会依据“类型”来确认段,并读取参数” 进行一定的运算,再依据这些参数来处理随后紧跟的“数据”。漏洞的产生原因就是在对参数进行运算的时候相信了文件输入的参数没有进行确认而导致的。除了图形文件格式外excel的biff格式也是一样的由段的头决定后续数据的读取,且有可变数据对象。有输入就有危险.



六 参考文献



[1] GDI 中的漏洞可能答应远程执行代码 ( http://www.microsoft.com/china/techne ... ty/bulletin/MS08-052.mspx



[2] Microsoft GDI WMF PolyPolygon Record Parsing Integer Overflow http://secunia.com/binary_analysis/sample_analysis/ 2008



[3] Wmf http://download.microsoft.com/downloa ... 886/WindowsMetafileFormat(wmf)Specification.pdf 2008
<< Kaspersky Lab 在线注册中心Key远程暴力破解漏洞 php create_function commond injection vulnerability >>
评分
10987654321
API:
gipsky.com& 安信网络
网友个人意见,不代表本站立场。对于发言内容,由发表者自负责任。

系统导航

 

Copyright © 2001-2010 安信网络. All Rights Reserved
京ICP备05056747号