01阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02基本介绍
在红队内网渗透中,PowerShell 常常被用于执行各种任务,然而也常常受到安全工具的监控。因此,寻找和开发一个能够有效规避检测的 PowerShell 替代工具是非常有意义的。本文将介绍一款名为 Sharp4PowerShell.exe 的工具,它能够在保持 PowerShell 强大功能的同时,规避检测工具的监控。
03使用方法
Sharp4PowerShell工具的基本用法非常简单,类似于系统自带的 PowerShell。以启动计算器(calc.exe)为例,可以使用以下命令:
Sharp4PowerShell.exe "Start-Process calc"
上述命令将启动 Windows 计算器进程,与在系统 PowerShell 中执行 Start-Process calc 达到的效果相同。
另外,还可以通过控制台完成命令的交互,类似获得一个交互式的Shell窗口,如下所示。
Sharp4PowerShell.exe "Invoke-Expression whoami"
除了直接执行 PowerShell 脚本外,Sharp4PowerShell.exe 还支持执行 base64 编码后的 PowerShell 命令,这有助于在受监控的环境中隐藏命令内容。执行 base64 编码命令的用法如下
Sharp4PowerShell.exe -decode {base64_encoded_command}
04原理解析
以下是 Sharp4PowerShell.exe 的核心代码逻辑,首先,代码使用 PowerShell.Create() 方法创建了一个新的 PowerShell 运行实例,用于执行后续的 PowerShell 命令
PowerShell powerShell = PowerShell.Create();
如果用户输入的第一个参数为 -encodedcommand 或 -enc,则表示用户提供了 base64 编码的 PowerShell 命令。代码会逐个读取参数,并将其解码为 Unicode 字符串
string text = "";
for (int i = 1; i < args.Length; i++)
{
text += Encoding.Unicode.GetString(Convert.FromBase64String(args[i]));
}
powerShell.AddScript(text);
如果没有使用 base64 编码,代码会将传入的参数直接拼接成一个 PowerShell 脚本并执行
string text2 = "";
for (int j = 0; j < args.Length; j++)
{
text2 += args[j];
}
powerShell.AddScript(text2);
综上,Sharp4PowerShell.exe 是一款功能强大的工具,通过替代系统 PowerShell 运行环境,并支持 base64 编码的命令执行,它能够在红队渗透中有效绕过检测工具。
05.NET安全知识库
星球文化20+个专题栏目涵盖了点、线、面、体等知识面!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。