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项目并解压。
编译项目
- 打开命令提示符,切换到下载目录。
- 针对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"
- 针对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"
- 编译成功后,桌面(或指定位置)会生成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
时可能出现错误。解决方法:
- 以管理员身份重新运行PowerOPS。
- 先运行
Invoke-Mimikittenz
,再运行Invoke-Mimikatz
。
AV绕过测试
ESET测试
- 启用所有功能(除防火墙全面封锁外),更新数据库。
- 运行PowerOPS和
Invoke-Mimikatz
:无警报。 - 手动扫描可执行文件:无报告。
Kaspersky测试
- 启用所有功能(除白名单和防火墙封锁外)。
- 扫描可执行文件:无问题。
- 运行
Invoke-Mimikatz
:首次成功,但再次运行时被检测并删除文件。 - 原因:Kaspersky加载缓慢,检测在加载窗口期内无效。
改进方法:使用Procdump脚本
为避免直接运行Mimikatz被检测,采用以下步骤:
- 使用PowerShell Procdump脚本(http://poshcode.org/4751)转储目标机器的lsass进程。
- 修改脚本,添加10秒睡眠时间确保转储完成。
- 添加命令:
Invoke-Mimikatz -Command "sekurlsa::minidump $dmp" "sekurlsa::logonPasswords"
,使Mimikatz针对转储文件运行。
将脚本集成到PowerOPS
- 将Procdump脚本转换为Base64编码。
- 在PowerOPS.cs中添加新函数(如ProcDump),解码Base64并返回字符串。
- 在Program.cs中添加
pipeline.Commands.AddScript
调用新函数。 - 在DisplayModules函数中添加
Get-ProcessDump
字符串。 - 重新编译PowerOPS。
- 以管理员身份运行,输入
show
确认功能已添加。 - 运行:
Get-ProcessDump (ps lsass)
,成功转储lsass并提取密码。
结论
PowerOPS框架将常用PowerShell脚本整合到单一工具中,无需直接使用powershell.exe即可运行脚本,并能绕过部分AV检测。对于其他AV,可通过修改脚本和行为窗口期绕过检测。该框架还内置应用白名单绕过技术(未在本文详述),是渗透测试人员的实用工具,强烈推荐尝试!
关注Brian on Twitter @fullmetalcache