使用PowerOPS框架绕过AV检测:PowerShell渗透测试实战

本文详细介绍了PowerOPS框架的使用方法,包括编译、模块调用和AV绕过技巧,重点演示了如何通过修改脚本和利用行为窗口期成功执行Invoke-Mimikatz等敏感操作。

Power Posing with PowerOPS

作者:Brian Fehrman
注意: 本文提及的技术和工具可能已过时,不适用于当前环境。但本文仍可作为学习资料,并可能被整合到现代工具和技术中。


概述

在我之前的博客文章《无PowerShell的PowerShell——如何绕过应用白名单、环境限制和AV》中,我们观察到越来越多的环境开始检测或阻止PowerShell脚本的执行。一种绕过这些限制的方法是使用C#包装程序加载PowerShell脚本,并在.NET框架上下文中直接执行。然而,每次运行新脚本时通常需要修改包装程序,或至少修改某种配置文件,这一过程既繁琐又容易出错。如果能将所有脚本整合到一个紧凑的框架中,将会方便很多。这就是PowerOPS框架(https://github.com/fdiskyou/PowerOPS)的用武之地。

PowerOPS框架是多人合作的成果(我不在其中),他们的名字列在GitHub页面底部。该框架本质上是后渗透阶段常用PowerShell脚本的集合,包括PowerView、Invoke-Mimikatz、Invoke-PSExec等。每个脚本都嵌入在C#代码中,因此无需携带和加载脚本文件。只需编译代码、运行可执行文件,即可享受强大的PowerShell风格界面,通过简单命令运行脚本功能,甚至可以在界面中运行常规PowerShell命令,而无需实际调用powershell.exe二进制文件。


开始使用PowerOPS

前提条件

  • 目标系统需安装.NET Framework 4.0或更高版本。本例中,我安装了Microsoft Management Framework 4(https://www.microsoft.com/en-us/download/details.aspx?id=40855)。
  • 从GitHub下载PowerOPS项目并解压。

编译项目

  1. 打开命令提示符,切换到下载目录。
  2. 针对x64架构编译,使用以下命令:
    1
    
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf3856ad364e35\System.Management.Automation.dll" /reference:"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.IO.Compression.dll" /out:C:\users\fmc\Desktop\PowerOPS_x64.exe /platform:x64 "C:\Users\fmc\Downloads\PowerOPS-master\PowerOPS-master\PowerOPS\*.cs"
    
  3. 针对x86架构编译,使用以下命令:
    1
    
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /unsafe /reference:"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0__31bf856ad364e35\System.Management.Automation.dll" /reference:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.Compression.dll" /out:C:\users\fmc\Desktop\PowerOPS_x86.exe /platform:x86 "C:\Users\fmc\Downloads\PowerOPS-master\PowerOPS-master\PowerOPS\*.cs"
    
  4. 编译成功后,桌面(或指定位置)会生成PowerOPS_x64.exe或PowerOPS_x86.exe。

运行PowerOPS

双击可执行文件,启动命令界面。输入show查看可用模块。

模块和命令

  • 查看模块中的命令:get-command -module <module_name>,例如get-command -module PowerUp
  • 运行命令:直接输入命令名,如Invoke-AllChecks
  • 获取命令帮助:Get-Help <command_name> -examples,例如Get-Help Invoke-ShareFinder -examples

解决Invoke-Mimikatz问题

运行Invoke-Mimikatz时可能出现错误。解决方法:

  1. 以管理员身份重新运行PowerOPS。
  2. 先运行Invoke-Mimikittenz,再运行Invoke-Mimikatz

AV绕过测试

ESET测试

  • 启用所有功能(除防火墙全面封锁外),更新数据库。
  • 运行PowerOPS和Invoke-Mimikatz:无警报。
  • 手动扫描可执行文件:无报告。

Kaspersky测试

  • 启用所有功能(除白名单和防火墙封锁外)。
  • 扫描可执行文件:无问题。
  • 运行Invoke-Mimikatz:首次成功,但再次运行时被检测并删除文件。
  • 原因:Kaspersky加载缓慢,检测在加载窗口期内无效。

改进方法:使用Procdump脚本

为避免直接运行Mimikatz被检测,采用以下步骤:

  1. 使用PowerShell Procdump脚本(http://poshcode.org/4751)转储目标机器的lsass进程。
  2. 修改脚本,添加10秒睡眠时间确保转储完成。
  3. 添加命令:Invoke-Mimikatz -Command "sekurlsa::minidump $dmp" "sekurlsa::logonPasswords",使Mimikatz针对转储文件运行。

将脚本集成到PowerOPS

  1. 将Procdump脚本转换为Base64编码。
  2. 在PowerOPS.cs中添加新函数(如ProcDump),解码Base64并返回字符串。
  3. 在Program.cs中添加pipeline.Commands.AddScript调用新函数。
  4. 在DisplayModules函数中添加Get-ProcessDump字符串。
  5. 重新编译PowerOPS。
  6. 以管理员身份运行,输入show确认功能已添加。
  7. 运行:Get-ProcessDump (ps lsass),成功转储lsass并提取密码。

结论

PowerOPS框架将常用PowerShell脚本整合到单一工具中,无需直接使用powershell.exe即可运行脚本,并能绕过部分AV检测。对于其他AV,可通过修改脚本和行为窗口期绕过检测。该框架还内置应用白名单绕过技术(未在本文详述),是渗透测试人员的实用工具,强烈推荐尝试!

关注Brian on Twitter @fullmetalcache

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计