MS08-052 WMF漏洞分析(图)
互联网 发布时间:2008-10-08 20:02:12 作者:佚名
我要评论
------by CuteK
一 背景知识
由文件格式入手,来分析MS08-052漏洞, 并构造了一个可以使没有补丁的程序崩溃的图片,
1 WMF文件结构
--------------------------|
| 文件头 |
|-------------------------|
| 文件记录 |
|-------------------------|
|-----
------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;
图 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的点数相加来分配空间.
图 1.2 polypolygon记录
二 漏洞部分代码
图2.1 具有漏洞的代码
图2.2 微软修补后的代码
除了判断是否小于0 还有判断是否加过了溢出了
三 WMF文件构造
构造了一个wmf文件polypoygon记录, 用极大的polygon个数和每个polygon的点数都很大, 使其计算达到整数溢出,使用没有补丁的gdiplus的程序查看该文件,就可以直接崩溃, 测试图片连接http://bbs.antiy.cn/viewthread.php?tid=1087&extra=page=1&frombbs=1 无木马. 呵呵
四解决方案
有漏洞的赶快打补丁吧
http://www.antiy.com/cn/download/agdifix.htm
五 总结
图形文件格式是由很多“段”构成的数据流,而每个段由:长度, 类型,参数,数据等结构构成,在程序解析这些文件格式的时候会依据“类型”来确认段,并读取参数” 进行一定的运算,再依据这些参数来处理随后紧跟的“数据”。漏洞的产生原因就是在对参数进行运算的时候相信了文件输入的参数没有进行确认而导致的。除了图形文件格式外excel的biff格式也是一样的由段的头决定后续数据的读取,且有可变数据对象。有输入就有危险.
一 背景知识
由文件格式入手,来分析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;
图 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的点数相加来分配空间.
图 1.2 polypolygon记录
二 漏洞部分代码
图2.1 具有漏洞的代码
图2.2 微软修补后的代码
除了判断是否小于0 还有判断是否加过了溢出了
三 WMF文件构造
构造了一个wmf文件polypoygon记录, 用极大的polygon个数和每个polygon的点数都很大, 使其计算达到整数溢出,使用没有补丁的gdiplus的程序查看该文件,就可以直接崩溃, 测试图片连接http://bbs.antiy.cn/viewthread.php?tid=1087&extra=page=1&frombbs=1 无木马. 呵呵
四解决方案
有漏洞的赶快打补丁吧
http://www.antiy.com/cn/download/agdifix.htm
五 总结
图形文件格式是由很多“段”构成的数据流,而每个段由:长度, 类型,参数,数据等结构构成,在程序解析这些文件格式的时候会依据“类型”来确认段,并读取参数” 进行一定的运算,再依据这些参数来处理随后紧跟的“数据”。漏洞的产生原因就是在对参数进行运算的时候相信了文件输入的参数没有进行确认而导致的。除了图形文件格式外excel的biff格式也是一样的由段的头决定后续数据的读取,且有可变数据对象。有输入就有危险.
相关文章

2019最新RDP远程桌面漏洞官方补丁(针对win2003、win2008)
Windows系列服务器于2019年5月15号,被爆出高危漏洞,windows2003、windows2008、windows2008 R2、windows xp系统都会遭到攻击,该服务器漏洞利用方式是通过远程桌面端口332021-07-25
宝塔面板 phpmyadmin 未授权访问漏洞 BUG ip:888/pma的问题分析
这篇文章主要介绍了宝塔面板 phpmyadmin 未授权访问漏洞 BUG ip:888/pma,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-24
CPU幽灵和熔断漏洞是什么?Intel为大家简单易懂的科普了一番
不久前让整全行业紧张、全球用户恐慌的Spectre幽灵、Meltdown熔断两大漏洞事件刚刚告一段落了,那么这两个漏洞到底是什么?可能还有很多人不是很清楚,想了解的朋友跟着小2018-03-21
2017年5月12日,WannaCry蠕虫通过MS17-010漏洞在全球范围大爆发,感染了大量的计算机,该蠕虫感染计算机后会向计算机中植入敲诈者病毒,导致电脑大量文件被加密,本文对其2017-05-17- 大部分的用户可能不要了解文件上传漏洞,下面小编就为大家具体的讲解什么事文件上传漏洞以及文件上传漏洞的几种方式2016-11-02
- 漏洞检测工具用语有高危漏洞,中危漏洞,低危漏洞以及漏洞的危害介绍,本文介绍的非常详细,具有参考解决价值,感兴趣的朋友一起看看吧2016-10-11
- 漏洞无处不在,它是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统2016-09-29
手把手教你如何构造Office漏洞POC(以CVE-2012-0158为例)
近年来APT追踪盛行,最常见的就是各种以钓鱼开始的攻击,不仅仅有网站挂马式钓鱼,也有鱼叉式邮件钓鱼,下面小编就为大家介绍office漏洞CVE-2012-0158,一起来看看吧2016-09-28- SSL(安全套接字层)逐渐被大家所重视,但是最不能忽视的也是SSL得漏洞,随着SSL技术的发展,新的漏洞也就出现了,下面小编就为大家介绍简单七步教你如何解决关键SSL安全问题2016-09-23
- 在爬虫开发中,大家可以很轻易地 bypass 所谓的 UA 限制,甚至用 scrapy 框架轻易实现按照深度进行爬行。但是实际上,这些并不够。关于爬虫的基础知识比如数据处理与数据存2016-09-12






最新评论