calebstewart/bypass-clm
GitHub: calebstewart/bypass-clm
通过反射加载与内存修补技术绕过 PowerShell 受限语言模式,在 CLM 环境下建立完整的交互式 PowerShell 会话。
Stars: 294 | Forks: 44
# PowerShell 受限语言模式绕过
这将构建一个可执行文件,即使启用了受限语言模式,它也能执行全语言模式的 PowerShell 会话。在撰写本文时,我发现仅有的绕过方法是降级到 PowerShell 版本 2 或使用 .Net 的 Runspaces。PowerShell 版本 2 现在已不常见,而且 Runspaces 原生并不提供交互式界面。此方法将提供一个完整的 PowerShell 会话,就像运行 `powershell.exe` 一样,但*始终*处于全语言模式。
这是通过执行以下操作来实现的:
1. 我们反射式地加载 `System.Management.Automation` 中的内部 `SystemPolicy` 类。
2. 我们确保静态方法 `GetSystemLockdownPolicy` 已被 JIT 引擎编译。
3. 我们检索已编译方法的函数指针。
4. 我们利用 VirtualProtect 确保函数代码是可写的。
5. 我们用存根 `xor rax,rax; ret` 覆盖该方法。这实际上强制 `GetSystemLockdownPolicy` 返回 `SystemEnforcementMode.None`。
6. 我们利用 `Microsoft.PowerShell.ConsoleShell` 模块在当前进程内加载一个交互式 PowerShell 会话。
我们还实现了一种类似于 `rasta-mouse` AMSI 绕过的方法,以确保新 Shell 不会被 AMSI 扫描。
值得注意的是,这不会生成 `powershell.exe`。PowerShell 提示符和解释器在当前进程的内存中运行。
## 在 AppControl 下执行 FLM Shell
如果启用了 `AppControl`,你可以使用众所周知的 `InstallUtil` 方法。此项目支持通过 `InstallUtil` 加载。只需将二进制文件放置在安全目录中(`C:\Windows\Tasks\` 是一个常见的安全目录)并运行以下命令:
```
REM find `InstallUtil`
dir \Windows\Microsoft.NET\* /s/b | findstr InstallUtil.exe$
REM Run the FLM powershell session
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U "C:\Windows\Tasks\bypass-clm.exe"
```
标签:AI合规, AMSI Bypass, AppControl, CIM, CLM Bypass, Device Guard, Full Language Mode, InstallUtil, IPv6, OpenCanary, Patching, PowerShell, Red Team, System.Management.Automation, 内存修补, 反射注入, 多人体追踪, 安全测试, 安全绕过, 应用控制绕过, 提权, 攻击性安全, 白名单绕过, 私有化部署, 端点可见性, 约束语言模式绕过, 防御规避