不使用 PowerShell.exe 执行 PowerShell 脚本

你最终在一个目标机器上找到了远程代码执行漏洞,但是你发现无法运行 PowerShell.exe 或该公司正在监视 PowerShell.exe 的命令。有哪些选项可以让你的 PowerShell payload 或 C2 代理在该主机系统上运行?

NoPowerShell(NPS)

我喜欢 NoPowerShell 或 NPS 的概念。NPS 是一个 Windows 二进制文件,它通过 .Net 执行 PowerShell 脚本,而不是直接调用 PowerShell.exe。虽然现在杀毒软件通常会标记这一点,但我们可以使用相同的概念来创建二进制文件,以直接执行我们的 PowerShell 恶意软件而无需 PowerShell.exe。Ben0xA 已经为你提供了源代码 ,因此请随意尝试对二进制文件进行混淆处理以解决杀毒软件的绕过问题。

NPS_Payload( https://github.com/trustedsec/nps_payload

对 NPS 的另一种实施思路是 TrustedSec 的一个工具,通过 MSBuild.exe 执行代码。此工具将生成 PowerShell payload 到一个 msbuild_nps.xml 文件中,该文件在调用时执行。此 XML 文件可以通过以下方式调用:

  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe C:\

SharpPick

SharpPick 是 PowerPick 的一个组件,它是一个很棒的工具,允许你在不调用 PowerShell.exe 二进制文件的情况下调用 PowerShell。在 SharpPick 中,“ RunPS 函数调用 System.Management.Automation 函数在 PowerShell 运行空间内执行脚本,而无需启动 PowerShell 进程。” [ http://www.sixdub.net/?p=555 ]

下载 SharpPick 后,你可以使用你的 PowerShell Empire payload 并创建二进制文件。有关如何设置环境和构建 payload 的完整演练,请访问:

有时我们可能没办法在主机系统上放一个二进制文件。在这种情况下,我们可以创建一个类库(DLL 文件),将其放到主机系统上并使用 rundll32.exe runmalicious.dll,EntryPoint 执行。

当然,这些 DLL 文件的创建可以由 Meterpreter 或 Cobalt Strike 自动完成,但是好在我们可以灵活地运行特定的 PowerShell payload,而无需调用 PowerShell.exe。

译者注 译者找到的额外参考资料:

  1. 关于 rundll32.exe 的文章:利用 rundll32.exe 运行 dll 绕过杀毒软件
  2. 关于不使用 PowerShell.exe 执行 PowerShell 脚本的文章:PowerShell: Malwares use it without powershell.exe