• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    MS08-052 WMF漏洞分析(图)

    发布者: 火山休眠期 | 发布时间: 2025-6-28 23:00| 查看数: 119| 评论数: 0|帖子模式

    ------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格式也是一样的由段的头决定后续数据的读取,且有可变数据对象。有输入就有危险.

    来源:https://www.jb51.net/hack/5446.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表