|
一 背景知识
由文件格式入手,来分析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记录
| 新云CMS Online.asp页面过滤不严 | 02-26 |
| 对网软网上购物系统的漏洞分析 | 01-09 |
| 测试SQL防注入脚本 | 12-21 |
| Google Xss又出跨站新漏洞 | 11-06 |
| 一次简单的html injection导致的 | 11-06 |
| 风讯、科讯漏洞利用 | 11-01 |
| Adobe pdf reader URI利用方式浅 | 10-23 |
| 超星阅览器的最新0DAY | 10-19 |
| 运用SQL Injection做数据库渗透的 | 09-22 |
| sa-blog 0day | 09-22 |
| HTML注入的一些简单想法 | 09-10 |
| 网站登陆接口的攻与防 | 09-04 |