zoukankan      html  css  js  c++  java
  • CVE-2017-11882 简单分析

    漏洞简介
    CVE-2017-11882,漏洞出现在模块EQNEDT32.EXE中,该模块为公式编辑器,在office安装过程中被默认安装,该模块以OLE技术将公式嵌入在office文档中。该漏洞的成因是EQNEDT32.EXE进程在读入MathType数据时,在拷贝字体名的时候没有对名称长度进行校验,从而造成了栈溢出。
    分析环境
    1:Win7 + office 2010
     
    数据结构分析
     
    OLE OBJECT DATA = EQNOLEFILEHDR + MTEFData
    MTEFData = MTEF header + MTEF Byte Stream
     
     
    EQNOLEFILEHDR 结构如下
    struct EQNOLEFILEHDR {
       WORD    cbHdr;      // 格式头长度,固定为0x1C
       DWORD   version;    // 固定为0x00020000
       WORD    cf;          // 该公式对象的剪贴板格式。
       DWORD   cbObject;  // MTEF数据的长度,不包括头部。
       DWORD   reserved1; // 未公开
       DWORD   reserved2; // 未公开
       DWORD   reserved3; // 未公开
       DWORD   reserved4; // 未公开
    };
     
     
    MTEF header结构如下
     
    偏移量
    说明
    0
    MTEF版本号
    0×03
    1
    该数据的生成平台
    0×00表示在Macintosh平台生成,0×01表示在Windows平台生成。
    2
    该数据的生成产品
    0×00表示由MathType生成,0×01表示由公式编辑器生成。
    3
    产品主版本号
    0×03
    4
    产品副版本号
    0x0A
     
     
    MTEF Byte Stream
    数据 8 对应的数据类型为FONT ,数据流对应如下
    FONT记录标志
    typeface类型
    字体风格
    字体名(以空字符结尾)
     
    在POC中,对应以上结构的的数据如图所示
     
    漏洞分析
     
    如下图所示,dstStr 为局部变量,大小为36字节,在进行拷贝的时候,并没有进行大小的验证。所以造成 了栈溢出。
     
    调试验证:
    通过对下面的两张图进行对比,可以明白栈溢出的触发过程。
     
    被修改后的函数调用如下图所示,在前文中已经提到,该公式编辑器并没有开启ASLR。这个硬编码的地址0x00430C12对应于对函数WinExec的调用。因而该字体名对应的命令得以执行。
     
     

  • 相关阅读:
    意料之外,情理之中,Spring.NET 3.0 版本发布-
    学习究竟是为了什么?
    测量软件应用系统的聚合复杂度【翻译稿】
    关键字New,如阴魂不散
    选择IT事业,意味着终身学习
    华为机试001:字符串最后一个单词的长度(华为OJ001)
    C++版
    C++版
    C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
    C++版
  • 原文地址:https://www.cnblogs.com/banchen/p/8301416.html
Copyright © 2011-2022 走看看