CVE-2018-0798:Microsoft office 公式编辑器 Matrix record 字段栈溢出漏洞调试分析
\x01 前言
- 2018 年 1 月 9 日,Office 公式编辑器再曝出新漏洞,编号为 CVE-2018-0798。提起公式编辑器大家都不陌生,之前的 CVE-2017-11882 和 CVE-2018-0802 这对姊妹漏洞都出自这里,当然了这个只是公开的漏洞,还有一些是没有公开的。可能是由于公式编辑器漏洞有点多,所以这次 Windows 干脆直接通过删掉公式编辑器的方式来修复漏洞,一了百了。但漏洞补丁刚发布一周,就已开始出现多例 CVE-2018-0798 漏洞的变种和在野利用,据说中国的一些组织也包括其中。漏洞原理比较简单,是由于多次循环复制导致的栈溢出,幸运的是循环的次数和复制的数据都可以进行精确的控制,从而给漏洞利用带来了便利。
\x02 分析环境
- 虚拟机:VMware 15 Pro + Windows7 SP1
- 反汇编调试工具:x64dbg
- 其他工具:C32Asm
- 漏洞软件:Office 2016
- POC:CVE-2018-0798_poc.rtf(提取码:d6rp)
\x03 调试分析
- 在调试之前先将系统的 ASLR 给关闭,并且更改注册表用来将调试器附加到公式编辑器上,为的是方便调试。
- 由于在调试漏洞前并没有找到该漏洞的 POC,所以需要手动的构造数据并且完成分析。幸运的是从阅读国外的几篇分析文档中捕获到了两个重要的信息,第一个是漏洞触发的函数为 sub_443F6C,且存在复制操作的指令为 mov [ecx],al。
- 第二个是出问题的数据结构来自公式编辑器的 Matrix,查询一下发现有如下定义,从后面的分析中可以看出这个数据结构是专门用来处理公式编辑器中的矩阵公式的。
- 新建 RTF 文件,插入一个带有矩阵公式的公式编辑器对象(OLE),之后在 sub_443F6C 函数的首地址下断点,看看处理 Matrix 数据时是否走 sub_443F6C 函数这个流程。
- 重新运行之后断在了 sub_443F6C 函数上,通过分析堆栈调用,发现其父函数为 sub_443E34,对这两个函数下记录断点,看看该函数与解析矩阵数据是否有关联。从下图中可以看出当只有一个矩阵公式时 sub_443E34 执行了一次。
- 之后再添加一个矩阵。
- 通过对比可以发现,每处理一个矩阵都会调用到 sub_443E34 进行解析。
- 对其中一次调用 sub_443E34 函数调试看看:首先这个函数会调用 sub_43B349 函数对矩阵进行基本的判断,判断里面的数据是否符合要求。
- 其次会调用一系列 sub_416352 函数去获取对象中的数据,这里特指 Matrix 数据。通过对取出的数据分析后发现 0x443E8F 地址调用的 sub_416352 函数会从样本中取出 Matrix 偏移地址 +B 的数据用来控制循环读取数据的次数。
- 这里的对象其实就是公式编辑器对象,这属于微软 OLE 框架下的数据传递技术,我们知道公式编辑器是独立于 Office 存在的,是一个完整的 .exe 或者 .dll 程序,也就是说 Office 如果想调用公式编辑器必须通过创建新进程的方式调用,而且进程之间的数据传递是基于 LRPC 的 OLE 接口技术,这里是通过 GlobalLock 函数间接处理的。
- 接着进入 sub_443F6C 函数。
- 在该函数中首先会将之前取出的循环次数放入 eax 中,之后进行 (eax + 9) >> 3 的运算,运算完成之后再一次调用 sub_416352 函数去获取需要复制到栈上的数据(Matrix 数据偏移 +D),之后通过 mov [ecx],al 指令将获取到的数据复制到栈中,复制大小为一个字节,完成之后判断循环次数是否为 0,为 0 则跳出循环。
- 由此分析得出流程图:
- 根据分析的结果对 Matrix 偏移 +B 的地方填充循环次数 FF,对偏移 +D 的地方填充复制的数据。
- 重新运行后首先会获取到循环次数为 0xFF。
- 进入 sub_443F6C 函数之后获取到复制的数据为 0xAA。
- 到达此处后继续循环。
- 至此栈上的返回地址已经被 Matrix 的数据给覆盖了,实现了跳转到任意地址的目的。
关于 CVE-2018-0798 漏洞分析到此结束,如有错误,欢迎指正。
CVE-2018-0798:Microsoft office 公式编辑器 Matrix record 字段栈溢出漏洞调试分析的更多相关文章
- CVE-2017-11882:Microsoft office 公式编辑器 font name 字段栈溢出通杀漏洞调试分析
\x01 漏洞简介 在 2017 年 11 月微软的例行系统补丁发布中,修复了一个 Office 远程代码执行漏洞(缓冲区溢出),编号为 CVE-2017-11882,又称为 "噩梦公式&q ...
- CVE-2018-0802:Microsoft office 公式编辑器 font name 字段二次溢出漏洞调试分析
\x01 前言 CVE-2018-0802 是继 CVE-2017-11882 发现的又一个关于 font name 字段的溢出漏洞,又称之为 "第二代噩梦公式",巧合的是两个漏洞 ...
- CVE-2011-0104:Microsoft Office Excel 中的栈溢出漏洞调试分析
0x01 前言 CVE-2011-0104 是 Microsoft Office 中的 Excel(没有打补丁的情况下)表格程序在处理 TOOLBARDEF 中的 Record 字节时没有对 Len ...
- CVE-2012-0158:Microsoft Office MSCOMCTL.ocx 栈溢出漏洞调试分析
0x01 Lotus Blossom 行动 在 2015 年 6 月,国外安全厂商 Palo Alto Networks 的威胁情报团队 Unit42 发现了一起针对东南亚政府的一次间谍行为,试图获取 ...
- CVE-2010-3333:Microsoft RTF 栈溢出漏洞调试分析
0x01 前言 CVE-2010-3333 漏洞是一个栈溢出漏洞,该漏洞是由于 Microsoft文档在处理 RTF 数据的对数据解析处理错误,在进行内存操作时没有对操作的数据进行长度限制,导致存在内 ...
- CVE-2010-3974:Windows 传真封面编辑器 FxsCover.exe 双重释放漏洞调试分析
0x01 堆空间申请后的双重释放 Windows FxsCover 程序存储封面编辑器的信息,封面编辑器是传真服务的一个组件,通过解析特定的传真封面文件(.cov)时,会调用类析构函数对同一内存中的栈 ...
- MathType与Office公式编辑器有什么不同
说到在论文中编辑公式,有经验的人都会知道要用公式编辑器来编辑,没经验的人也会被安利使用公式编辑器.然而在使用公式编辑器时,又有了两种选择,一种是使用Office自带的公式编辑器,一种是MathType ...
- CVE-2011-0104:Microsoft Office Excel 栈溢出漏洞修复分析
0x01 前言 上一篇讲到了 CVE-2011-0104 漏洞的成因和分析的方法,并没有对修复后的程序做分析.之后在一次偶然的情况下,想看一看是怎么修复的,结果却发现了一些问题 环境:修复后的 EXC ...
- CVE-2013-0077:Microsoft DirectShow quartz.dll m2p 文件堆溢出漏洞简单分析
0x01 前言 2012 年 10 月 5 日,exploit-db 漏洞公布站点上发布了 QQplayer.exe 3.7.892 m2p quartz.dll Heap Pointer OverW ...
随机推荐
- [GXYCTF2019]Ping Ping Ping 1
进入界面 根据提示进行ping信号 看到网页的内容就想到经典的Linux命令执行,使用命令执行的管道符 " | "尝试列出文件 FLAG应该在Flag.php里面 构造play ...
- SQL注入绕过waf的一万种姿势
绕过waf分类: 白盒绕过: 针对代码审计,有的waf采用代码的方式,编写过滤函数,如下blacklist()函数所示: 1 ........ 2 3 $id=$_GET['id']; 4 5 $ ...
- 爬虫必知必会(6)_提升scrapy框架爬取数据的效率之配置篇
如何提升scrapy爬取数据的效率:只需要将如下五个步骤配置在配置文件中即可 增加并发:默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_ ...
- Hibernate在oracle中ID增长的方式(续)
引用链接:http://blog.csdn.net/w183705952/article/details/7367272 第二种:设置ID的增长策略是native,但是需要创建一个名字为hiberna ...
- Jaeger Client Go 链路追踪|入门详解
目录 从何说起 Jaeger 部署 Jaeger 从示例了解 Jaeger Client Go 了解 trace.span tracer 配置 Sampler 配置 Reporter 配置 分布式系统 ...
- 用 customRef 做一个防抖函数,支持 element 等UI库。
这几天学习Vue的官网,看到 customRef 提供了一个例子,研究半天发现这是一个防抖函数,觉得挺好,于是把这个例子扩展了一下,可以用于表单子控件和查询子控件. 需求 v-model 基于 ele ...
- nsqlookupd:高性能消息中间件 NSQ 解析
摘要:本篇将会结合源码介绍 nsqlookupd 的实现细节. 本篇将会结合源码介绍 nsqlookupd 的实现细节.nsqlookupd 主要流程与nsqd 执行逻辑相似,区别在于具体运行的任务不 ...
- 使用 shell 做 tcp 协议模拟
问题背景 公司有一套消息推送系统(简称GCM),由于人事变动接手了其中的客户端部分.看了一下文档,仅通讯协议部分有几页简单的说明,代码呢又多又乱,一时理不出一个头绪.由于消息是从后台推送到端的,所以使 ...
- 201871030135-姚辉 实验二 个人项目—《D{0-1} KP》项目报告
项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 这个作业要求链接 我的课程学习目标 (1)掌握软件项目个人开发流程.(2)掌握Github发布软件项目的操作方法. 这个作业在哪些方面 ...
- oo第四单元暨课程总结
第四单元架构设计总结 第一次作业 单独写了MyUmlClass.MyUmlInterface.MyUmlOperation三个类对应UML中相应元素,在UML图中这几个元素包含一些下级元素,如Clas ...