模拟Powershell实现Bypass

前言

通过查看powershell程序的模块调用,发现有一个名为System.Management.Automation.ni.dll,这个Dll包含PowerShell 运行时和所有在 PowerShell 环境中运行的命令

System.Management.Automation.ni.dll 是预编译版本的 System.Management.Automation.dll,这样 PowerShell 可以更快地加载和运行

若想执行 PowerShell 命令或脚本的 C# 程序,都需要引用 System.Management.Automation.dll

image-20230719000833203

代码实现

创建一个C#的.Net Framework项目,添加引用,点击浏览找到System.Management.Automation.dll其所在路径并勾选上

image-20230719001757139

下述代码是一个完整的PowerShell脚本执行环境,它支持接收Base64编码的PowerShell脚本作为参数,解码并执行脚本,同时如果参数中包含"-s",那么还会执行bypass AMSI的操作。其中AMSI是Windows中用于防止恶意脚本执行的安全机制

运行测试

360核晶环境

360静态查杀没有报毒

image-20230719101836803

使用CobaltStrike生成Powershell命令, 我们只需截取以下部分作为payload即可

将payload进行base64加密

打开cmd或powershell执行如下命令,cs上线成功,没有被核晶拦截

image-20230719104136698

Defender环境

在WindowsDefender环境下按照之前的操作执行会被amsi拦截(360是没有集成amsi的)

image-20230719111801493

因此需加上-s参数来绕过amsi,这样CS就能正常上线了

image-20230719111453899

最后更新于