Masteryxy/CMSTPLua-Reflective-UAC-Bypass

GitHub: Masteryxy/CMSTPLua-Reflective-UAC-Bypass

基于反射式DLL注入和ICMLuaUtil COM接口的Windows UAC绕过工具,支持无文件内存执行。

Stars: 8 | Forks: 2

# COM BypassUAC - 反射式 DLL 注入 该项目是一个旨在利用 COM (组件对象模型) 接口结合反射式 DLL 注入技术来绕过 Windows UAC (用户账户控制) 的工具。 ## 概述 该项目是一个构建用于绕过 Windows 系统上 UAC 保护的反射式 DLL。它由两个主要组件组成: 1. **反射式 DLL 加载器** – 在内存中加载并执行 DLL 的机制 2. **UAC 绕过** – 使用 COM 接口以提升的权限启动程序 ## 特性 * **反射式 DLL 注入**:完全从内存加载 DLL,无需接触磁盘 * **UAC 绕过**:使用 COM 接口 `ICMLuaUtil` 绕过 UAC * **多架构支持**:x86 (32位), x64 (64位), 以及 ARM * **隐蔽性**:不在磁盘上留下痕迹 * **最小依赖**:仅使用 Windows API 函数 ## 工作原理 ### 1. 反射式 DLL 注入 反射式 DLL 注入是一种直接将 DLL 加载到内存中而不使用标准 Windows API (`LoadLibrary`, `GetProcAddress`) 的技术。 该项目中的加载器通过以下步骤工作: 1. **PE 头搜索**:通过在内存中向后扫描来定位 PE (可移植可执行文件) 头 2. **查找 Kernel32.dll**:通过 PEB (进程环境块) 获取引用 3. **解析 API 函数**:使用基于哈希的查找来查找所需的 API: * `LoadLibraryA` * `GetProcAddress` * `VirtualAlloc` * `NtFlushInstructionCache` 4. **内存分配**:为 DLL 分配内存 5. **PE 加载**:将 PE 头和节复制到新的内存区域 6. **导入表处理**:加载所需的 DLL 并解析导入 7. **重定位处理**:修正基地址差异 8. **调用 DllMain**:调用 DLL 的入口点 ### 2. UAC 绕过机制 UAC 绕过是通过使用 Windows 内部的 `ICMLuaUtil` COM 接口执行的: 1. **创建 COM Moniker**:生成以下格式的 moniker `Elevation:Administrator!new:{CLSID}` 2. **创建 COM 对象**:调用 `CoGetObject` 创建提升权限的 COM 实例 3. **ShellExec 调用**:使用 `ICMLuaUtil::ShellExec` 以提升的权限运行目标程序 ### 执行流程 ``` [DLL Injection] → [ReflectiveLoader] → [DllMain] → [CMLuaUtilBypassUAC] → [Elevated Program] ``` ## 需求 ### 构建环境 * **Visual Studio 2022** * **Windows SDK** * **C/C++ 编译器** ### 运行环境 * **Windows Vista 或更高版本** (支持 UAC 的系统) * **非管理员用户账户** (推荐用于测试 UAC 绕过) ## 构建 ### 使用 Visual Studio 构建 1. 克隆或下载该项目 2. 在 Visual Studio 中打开 `reflective_dll.sln` 3. 构建项目: * `Build` → `Build Solution` (Ctrl+Shift+B) ## 用法 ### 基本用法 此 DLL 必须使用反射式注入注入到目标进程中。注入后: 1. `ReflectiveLoader` 被调用 2. DLL 将自身加载到内存中 3. `DllMain` 被调用并附带 `DLL_PROCESS_ATTACH` 4. 从 `lpReserved` 参数读取目标程序路径 5. `CMLuaUtilBypassUAC` 执行 UAC 绕过 ### 示例使用场景 ``` // Example: Loader injecting the DLL // 1. Load DLL into memory LPVOID pDllBuffer = LoadDllFromFile("comBypassUac.dll"); // 2. Find the ReflectiveLoader function REFLECTIVELOADER pReflectiveLoader = GetReflectiveLoader(pDllBuffer); // 3. Prepare the target program path char* targetProgram = "C:\\Windows\\System32\\cmd.exe"; // 4. Call ReflectiveLoader (passing the program path via lpReserved) pReflectiveLoader(targetProgram); ``` ### 指定目标程序 DLL 通过 `lpReserved` 参数接收目标程序路径。 这是在 UAC 绕过后将以提升的权限执行的程序。 ### 文件描述 #### `src/ReflectiveDll.c` * 主 DLL 入口点 (`DllMain`) * `CMLuaUtilBypassUAC`:UAC 绕过函数 * `CoCreateInstanceAsAdmin`:创建提升权限的 COM 实例 * `ICMLuaUtil` 接口定义 #### `src/ReflectiveLoader.c` * `ReflectiveLoader`:从内存加载 DLL 的主函数 * PE 头解析 * 导入表解析 * 重定位处理 * 基于哈希的 API 解析 #### `bypassuac.h` * `ICMLuaUtil` 的 COM 接口定义 * CLSID 和 IID 声明 * 函数原型 ## 技术细节 ### COM 接口: ICMLuaUtil 该项目依赖于 Windows 内部的 `ICMLuaUtil` 接口: * **CLSID**: `{3E5FC7F9-9A51-4367-9063-A120244FBEC7}` (CMSTPLUA) * **IID**: `{6EDD6D74-C007-4E75-B76A-E5740995E24C}` (ICMLuaUtil) ### 基于哈希的 API 查找 反射式加载器使用预计算的哈希值而不是字符串名称来解析 API 函数,从而隐藏二进制文件中的敏感字符串: ``` #define KERNEL32DLL_HASH 0x6A4ABC5B #define LOADLIBRARYA_HASH 0xEC0E4E8E #define GETPROCADDRESS_HASH 0x7C0DFCAA #define VIRTUALALLOC_HASH 0x91AFCA54 ``` ### PE 重定位 当 DLL 加载到不同的基地址时,必须更正所有相对地址。 加载器处理 PE 重定位表以应用这些调整。 ## 许可证 该项目采用 MIT 许可证授权。有关更多信息,请参阅 [LICENSE 文件](LICENSE)。
标签:COM接口, CSV导出, DLL注入, Hakrawler, ICMLuaUtil, PEB, Shellcode, UAC Bypass, UML, Windows API, x64, x86, 代理, 免杀技术, 内存加载, 协议分析, 安全测试, 安全规避, 客户端加密, 客户端加密, 技术调研, 攻击性安全, 无文件攻击, 暴力破解检测, 本地提权, 权限提升, 流量审计, 知识库安全, 端点可见性