【逆向】CVE-2017-8570漏洞分析调试技巧
前言
CVE-2017-8570是一个逻辑型漏洞,该漏洞利用复合Moniker绕过了CVE-2017-0199的更新补丁,可以在Office文档中执行任意SCT(Windows Script Component)脚本代码。
//受影响版本:
Microsoft Office 2007 Service Pack 3
Microsoft Office 2010 Service Pack 2 (32-bit editions)
Microsoft Office 2010 Service Pack 2 (64-bit editions)
Microsoft Office 2013 RT Service Pack 1
Microsoft Office 2013 Service Pack 1 (32-bit editions)
Microsoft Office 2013 Service Pack 1 (64-bit editions)
Microsoft Office 2016 (32-bit edition)
Microsoft Office 2016 (64-bit edition)
分析思路
CVE-2017-8570最明显的特征是它会借助下面三个Moniker去构造逻辑漏洞:
//Moniker(GUID形式)
{00000303-0000-0000-C000-000000000046} -> FileMoniker
{00000309-0000-0000-C000-000000000046} -> CompositeMoniker
{ECABAFC6-7F19-11D2-978E-0000F8757E2A} -> NewMoniker //文件中显示如下:
0303000000000000C000000000000046 -> FileMoniker
0903000000000000C000000000000046 -> CompositeMoniker
C6AFABEC197FD211978E0000F8757E2a -> NewMoniker
所以只要在Rtf文档或者Dump出来的OLE文件中同时定位到上述特征,基本可以判定该文档包含了CVE-2017-8570漏洞。
动态分析
首先打开一个干净的Word文档,使用 Windbg 附加 Winword.exe 进程:

然后下断:bp ole32!OleConvertOLESTREAMToIStorage

下断后打开要调试的恶意文档触发中断:

然后使用如下命令将内嵌的ole数据提取到本地:
.writemem C:\de-obfuscated_ole.bin poi(poi(poi(esp + 0x04) + 0x08)) Lpoi(poi(esp + 0x04) + 0x0C)

一共提取了两个ole文件:其中在“de-obfuscated_ole.bin”文件中可以发现恶意的sct脚本:

在“de-obfuscated_ole2.bin”文件中则可以完全匹配前面提到的三个Moniker:

可以配合如下python脚本进行检测:

# coding=utf-8 import os
import sys
import keyword if 1 >= len(sys.argv):
print("Error: 输入参数后重试")
exit(1) guid1 = b'\x03\x03\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x46'
guid2 = b'\x03\x03\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x46'
guid3 = b'\x09\x03\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x46' with open(sys.argv[1], 'rb')as f:
data = f.read()
index1 = data.find(guid1)
index2 = data.find(guid2)
index3 = data.find(guid3)
if index1 != -1 and index2 != -1 and index3 != -1:
print("CVE-2017-8570")
else:
print("not CVE-2017-8570")
静态分析
除了使用Windbg进行动态分析外,还可以使用 rtfobj 脚本从恶意文档中自动提取ole文件,实际效果是一样的:

参考链接
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8570
https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2017-8570
【逆向】CVE-2017-8570漏洞分析调试技巧的更多相关文章
- 漏洞分析:CVE 2021-3156
漏洞分析:CVE 2021-3156 漏洞简述 漏洞名称:sudo堆溢出本地提权 漏洞编号:CVE-2021-3156 漏洞类型:堆溢出 漏洞影响:本地提权 利用难度:较高 基础权限:需要普通用户权限 ...
- 调试技巧 —— 如何利用windbg + dump + map分析程序异常
调试技巧 —— 如何利用windbg + dump + map分析程序异常 逗比汪星人2011-09-04上传 调试技巧 —— 如何利用windbg + dump + map分析程序异常 http ...
- 一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 本文分析 Vault 7 中泄露的 RouterOs 漏洞.漏洞影 ...
- (转)Intellij IDEA 2017 debug断点调试技巧与总结详解篇
背景:详细介绍idea的debug调试过程 Intellij IDEA 2017 debug断点调试技巧与总结详解篇
- CVE-2013-2551:Internet Explore VML COALineDashStyleArray 整数溢出漏洞简单调试分析
0x01 2013 Pwn2Own 黑客大赛 在 Pwn2Own 的黑客大赛上,来自法国的 VUPEN 安全团队再一次利用 0day 漏洞攻破 Windows8 环境下的 IE10 浏览器,这一次问题 ...
- CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用
作者:栈长@蚂蚁金服巴斯光年安全实验室 -------- 1. 背景 FFmpeg是一个著名的处理音视频的开源项目,非常多的播放器.转码器以及视频网站都用到了FFmpeg作为内核或者是处理流媒体的工具 ...
- CVE-2014-1767 漏洞分析(2015.1)
CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的doubl ...
- exim CVE-2017-16943 uaf漏洞分析
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这是最近爆出来的 exim 的一个 uaf 漏洞,可以进行远程代码 ...
- CVE-2010-3971 CSS内存破坏漏洞分析
看了仙果版主的议题演讲,其中提到cve-2010-3971是一个浏览器漏洞利用中的里程碑.于是找来POC,尝试分析一下. 1.漏洞重现 XP SP3+ie6.0环境 poc如下: poc.htm &l ...
- CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析
漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...
随机推荐
- 【转载】synopsys中工具介绍,VCS,DC,PT等
https://blog.csdn.net/fangxiangeng/article/details/80981536
- 解决手机点击包含a、button标签时出现背景色问题
a,button { display: inline-block; width: 100%; -webkit-tap-highlight-color:rgba(0,0,0,0);/*添加此样式即可去除 ...
- MyBatis_07(动态SQL)
动态SQL: Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能, 它存在的意义是:"为了解决拼接SQL语句字符串时的痛点问题". 一.If if标签可通 ...
- H5网页CAD中webpack使用详细说明
前言 webpack是用于现代 JavaScript 应用程序的静态模块打包工具,用以构建一个前端工程化项目,如vue-cli create-react-app等脚手架工具都是基于webpack的构建 ...
- windows2012安装.net4.7.2
第一步,下载.net4.7.2安装包 离线包:https://download.visualstudio.microsoft.com/download/pr/1f5af042-d0e4-4002-9c ...
- vim重复、删除、复制、粘贴命令
0.选中 V+(上.下键) 表示选中 1.删除 1.输入10x,删除10个连续字符 2.输入3dd,将会删除3行文本 在普通模式下,你还可以使用dw或者daw(delete a word)删除一 ...
- android studio的一些辅助工具
目录配置 https://blog.csdn.net/Kideers/article/details/128233984 https://blog.csdn.net/hnjcxy/article/de ...
- (四)REDIS-布隆过滤器及缓存
(一)布隆过滤器 布隆过滤器(英语,Bloom Filter)是1970年由布隆提出的.它实际是一个很长的二进制数组+多个随机Hash算法映射函数,主要用于判断一个元素是否在集合中. 通常我们会遇到很 ...
- class声明中初始化静态成员变量的问题
1. const静态变量,允许整型或枚举类型成员直接初始化. 2. constexpr静态变量,允许literal类型成员直接初始化. 3. c++17引入inline变量,允许其他类型成员直接初始化 ...
- 多个el-table在使用v-if在同一页面切换渲染时相互影响的解决办法
解决办法 给每个el-table设置一个唯一的key值,如: <el-table key='uniqueName' ></el-table> <el-table key= ...