【逆向】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 ...
随机推荐
- 【Pr】如何裁剪视频得页面?
[Pr]如何裁剪视频得页面? 选择视频轨道 | 效果 | 裁剪(可以搜索) | 调整上下左右需要裁剪的大小 | 选择缩放,去掉黑边
- Ehlib的DBGridEh 控件导出到Excel
use DBGridEhImpExp //必须引用此单元 procedure TInvoiceManager.ppmSaveSelectionClick(Sender: TObject); proce ...
- RabbitMQ 修改密码
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.14\sbin> rabbitmqctl.bat change_password adm ...
- c++中内联函数和宏函数的区别
一. 区别: 是不是函数: 宏定义不是函数,但是使用起来像函数.预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率: 内联函数本质上是一个函数,内联函数一般用于函数体的代码比 ...
- 攻防世界-fileclude
攻防世界的一道文件包含题目 include("文件名"):会将文件中的内容视为代码块接入include所在代码中,输出的只是执行后的结果,文件中的注释.定义等无法查看. 本题中可以 ...
- [Oracle19C 数据库管理] 用户与权限管理
用户管理 用户具有以下属性: 用户名: 不能超过30位.不能包含特殊字符.必须用字符开头.用户名不区分大小写. 认证方式: 最常见的是密码认证. 默认永久表空间: 控制用户可以在哪个表空间里创建对象. ...
- UML各种图实践题
1. 用状态图描述一部电梯的运行
- vue 图片下载
getBase64Image(img) { var canvas = document.createElement("canvas"); canv ...
- E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)E: 无法对目录 /var/lib/apt/lists/ 加锁
问题: 解决:https://www.cnblogs.com/long5683/p/11058066.html 使用方法二 可以
- Docker宿主机agetty进程cpu占用率100% 问题
参考 https://blog.51cto.com/u_15450131/4751959 systemctl stop getty@tty1.service systemctl mask getty ...