# 模拟msf中的getsystem实现提权 **Repository Path**: cutecuteyu/escalation_privilege_as_msf_getsystem ## Basic Information - **Project Name**: 模拟msf中的getsystem实现提权 - **Description**: No description available - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-11-06 - **Last Updated**: 2025-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SYSTEM权限提权程序 这是一个C++程序,通过多级权限申请和进程创建策略实现从普通用户权限提权到SYSTEM权限。程序采用渐进式权限申请和智能进程查找机制,确保在多种Windows系统环境下的兼容性。 ## 功能特性 ### 核心功能 - **中文环境支持**:自动设置控制台编码,完美支持中文显示 - **调试权限启用**:自动获取SE_DEBUG_NAME权限,允许访问系统进程 - **智能进程查找**:优先查找winlogon.exe,其次查找svchost.exe进程 - **多级权限申请**:采用渐进式权限申请策略(最小权限→标准权限→完全权限) - **令牌复制机制**:使用模拟令牌而非主令牌,提高兼容性 - **多级进程创建**:支持CreateProcessWithTokenW和CreateProcessAsUserW两种创建方式 ### 技术特性 - **64位编译**:兼容现代Windows系统(Windows 7/8/10/11) - **错误处理**:完善的错误检测和详细的错误信息输出 - **资源管理**:自动清理句柄资源,防止内存泄漏 - **安全模拟**:使用令牌模拟机制,确保操作安全性 ## 编译说明 ### 方法1:使用编译脚本(推荐) 1. 确保已安装G++编译器(MinGW-w64或Cygwin) 2. 双击运行 `compile.bat` 3. 编译成功后生成 `privilege_escalation.exe` ### 方法2:手动编译 ```bash g++ -m64 -O2 -static -o privilege_escalation.exe main.cpp -ladvapi32 ``` ## 使用说明 ### 运行要求 1. **必须以管理员权限运行**(右键→以管理员身份运行) 2. 需要UAC(用户账户控制)权限 3. 适用于Windows 7/8/10/11系统 4. 需要安装G++编译器(MinGW-w64或Cygwin) ### 运行步骤 #### 方法1:使用批处理文件(推荐) 1. 双击运行 `run_as_admin.bat` 自动以管理员权限启动程序 2. 或右键点击 `privilege_escalation.exe` → "以管理员身份运行" #### 方法2:手动编译和运行 1. 编译程序:双击 `compile.bat` 或手动执行编译命令 2. 以管理员权限运行生成的可执行文件 ### 程序执行流程 程序启动后将自动执行以下详细步骤: #### 阶段1:环境初始化 - ✅ 设置控制台UTF-8编码,解决中文乱码问题 - ✅ 配置系统本地化环境 - ✅ 初始化宽字符输出函数 #### 阶段2:权限准备 - ✅ 启用SE_DEBUG_NAME调试权限 - ✅ 验证权限启用状态 - ✅ 输出权限启用成功信息 #### 阶段3:进程查找 - ✅ 创建系统进程快照 - ✅ 智能查找SYSTEM权限进程(优先winlogon.exe,其次svchost.exe) - ✅ 输出找到的进程PID信息 #### 阶段4:令牌获取 - ✅ 使用渐进式权限策略打开目标进程 - ✅ 打开进程安全令牌 - ✅ 复制SYSTEM模拟令牌 - ✅ 输出令牌获取成功信息 #### 阶段5:进程创建 - ✅ 模拟令牌身份 - ✅ 尝试使用CreateProcessWithTokenW创建进程 - ✅ 如果失败,自动降级使用CreateProcessAsUserW - ✅ 输出进程创建成功信息 #### 阶段6:权限验证 在新打开的cmd窗口中执行以下命令验证权限: ```cmd whoami ``` 应该显示:`NT AUTHORITY\SYSTEM` ### 预期输出示例 ``` [*] 开始提权到SYSTEM权限... [+] 调试权限已启用 [+] 找到SYSTEM进程,PID: 1234 [+] 成功获取SYSTEM令牌 [+] SYSTEM权限的cmd进程已创建 [+] 提权成功!已打开SYSTEM权限的cmd窗口 ``` ## 技术原理 ### 提权流程详解 #### 第一步:中文环境设置 - **控制台编码设置**:使用`SetConsoleOutputCP(CP_UTF8)`和`SetConsoleCP(CP_UTF8)`设置UTF-8编码 - **本地化环境配置**:通过`std::locale::global()`设置系统本地化,支持中文显示 - **宽字符输出**:使用`WriteConsoleW`直接输出宽字符,避免编码转换问题 #### 第二步:调试权限启用 - **令牌获取**:使用`OpenProcessToken`打开当前进程令牌 - **权限查找**:通过`LookupPrivilegeValue`获取SE_DEBUG_NAME权限的LUID - **权限调整**:使用`AdjustTokenPrivileges`启用调试权限 - **错误检查**:通过`GetLastError() == ERROR_SUCCESS`验证权限启用成功 #### 第三步:智能进程查找 - **进程快照创建**:使用`CreateToolhelp32Snapshot`创建系统进程快照 - **进程枚举**:通过`Process32First`和`Process32Next`遍历所有进程 - **优先级策略**:优先查找`winlogon.exe`(更容易访问),其次查找`svchost.exe` - **PID记录**:记录第一个找到的SYSTEM权限进程PID #### 第四步:多级权限申请 - **渐进式权限策略**: - 第一级:`PROCESS_QUERY_LIMITED_INFORMATION`(Windows Vista+) - 第二级:`PROCESS_QUERY_INFORMATION`(Windows 2000+) - 第三级:`PROCESS_ALL_ACCESS`(完全权限,可能被拒绝) - **令牌权限组合**:使用`TOKEN_DUPLICATE | TOKEN_QUERY | TOKEN_IMPERSONATE`最小必要权限 #### 第五步:令牌复制机制 - **模拟令牌创建**:使用`DuplicateTokenEx`创建`TokenImpersonation`类型的模拟令牌 - **权限最大化**:使用`MAXIMUM_ALLOWED`请求所有可用权限 - **安全级别**:设置`SecurityImpersonation`安全模拟级别 #### 第六步:多级进程创建 - **令牌模拟**:首先使用`ImpersonateLoggedOnUser`模拟令牌身份 - **首选创建方式**:使用`CreateProcessWithTokenW`创建进程(`LOGON_WITH_PROFILE`) - **备选创建方式**:如果失败,使用`CreateProcessAsUserW`创建进程 - **令牌转换**:使用`DuplicateTokenEx`将模拟令牌转换为主令牌(`TokenPrimary`) ### 核心API函数详解 | API函数 | 功能说明 | 关键参数 | |---------|----------|----------| | `OpenProcessToken` | 打开进程安全令牌 | `TOKEN_ADJUST_PRIVILEGES \| TOKEN_QUERY` | | `LookupPrivilegeValue` | 查找权限LUID | `SE_DEBUG_NAME`(调试权限) | | `AdjustTokenPrivileges` | 调整令牌权限 | `SE_PRIVILEGE_ENABLED`(启用权限) | | `CreateToolhelp32Snapshot` | 创建进程快照 | `TH32CS_SNAPPROCESS`(进程列表) | | `Process32First/Next` | 枚举进程 | `PROCESSENTRY32`结构 | | `OpenProcess` | 打开目标进程 | 渐进式权限参数 | | `DuplicateTokenEx` | 复制令牌 | `MAXIMUM_ALLOWED, TokenImpersonation` | | `CreateProcessWithTokenW` | 使用令牌创建进程 | `LOGON_WITH_PROFILE` | | `CreateProcessAsUserW` | 以用户身份创建进程 | 主令牌参数 | ### 错误处理机制 - **详细错误输出**:每个关键步骤都有错误代码和描述信息输出 - **资源清理**:所有句柄都有对应的`CloseHandle`调用 - **降级策略**:主要方法失败时自动尝试备选方案 - **异常处理**:使用try-catch处理本地化设置异常 ## 安全注意事项 ⚠️ **重要警告**: 1. **仅用于学习和研究目的** 2. **不要在生产环境中使用** 3. **可能被安全软件检测为恶意程序** 4. **使用时请确保有合法授权** 5. **建议在虚拟机中测试** ## 文件说明 ### 核心文件 | 文件名 | 功能描述 | 技术细节 | 备注 | |--------|----------|----------|------| | main.cpp | 主程序文件,包含完整的提权逻辑实现 | 包含6个核心函数:
- PrintMessage:格式化输出函数
- EnableDebugPrivilege:调试权限启用
- FindSvchostPID:智能进程查找
- GetSystemToken:渐进式权限申请
- CreateProcessWithToken:多级进程创建
- main:主程序流程控制 | 核心实现文件,约400行代码 | | compile.bat | 编译脚本,自动编译程序 | 使用G++编译器,包含以下参数:
- `-m64`:64位编译
- `-O2`:优化级别2
- `-static`:静态链接
- `-ladvapi32`:链接Windows安全API库 | 双击运行,自动生成可执行文件 | | run_as_admin.bat | 自动以管理员权限运行程序 | 使用PowerShell脚本请求UAC提升权限
自动检测并运行编译后的可执行文件 | 双击运行,简化用户操作 | | privilege_escalation.exe | 编译后的可执行文件 | 64位Windows可执行文件
静态链接,无需额外依赖库
约200KB大小 | 需要管理员权限运行 | | README.md | 项目说明文档 | 包含完整的技术文档、使用指南和故障排除 | 本文档 | ### 代码结构说明 #### main.cpp 文件结构 ``` main.cpp ├── 文件级注释(程序功能、作者、版本等) ├── 头文件包含区域 │ ├── Windows API头文件 │ ├── 标准库头文件 │ └── 宽字符支持头文件 ├── 函数声明区域 │ ├── PrintMessage函数声明 │ ├── EnableDebugPrivilege函数声明 │ ├── FindSvchostPID函数声明 │ ├── GetSystemToken函数声明 │ └── CreateProcessWithToken函数声明 ├── 函数实现区域 │ ├── PrintMessage函数实现(格式化输出) │ ├── EnableDebugPrivilege函数实现(调试权限) │ ├── FindSvchostPID函数实现(进程查找) │ ├── GetSystemToken函数实现(令牌获取) │ └── CreateProcessWithToken函数实现(进程创建) └── main函数实现 ├── 环境初始化阶段 ├── 权限准备阶段 ├── 进程查找阶段 ├── 令牌获取阶段 ├── 进程创建阶段 └── 结果输出阶段 ``` ### 编译配置说明 #### 编译器要求 - **编译器**:G++ (MinGW-w64或Cygwin) - **版本**:支持C++11标准 - **平台**:Windows x64 #### 编译参数详解 - `-m64`:生成64位代码,确保与64位Windows兼容 - `-O2`:优化级别2,平衡性能与代码大小 - `-static`:静态链接,减少运行时依赖 - `-ladvapi32`:链接Windows安全API库,支持权限操作 ### 运行环境要求 - **操作系统**:Windows 7/8/10/11 (64位) - **权限**:管理员权限(UAC提升) - **依赖**:无需额外运行时库(静态编译) - **安全**:可能需要安全软件白名单 ## 故障排除 ### 常见问题及解决方案 #### 编译相关问题 1. **编译失败:"hToken未声明"** - **原因**:变量名拼写错误 - **解决方案**:确保使用正确的变量名`token`而不是`hToken` - **检查**:查看CreateProcessWithTokenW函数调用参数 2. **编译警告:字符串常量转换** - **原因**:直接使用L"cmd.exe"字符串常量 - **解决方案**:使用wchar_t数组存储命令行参数 - **示例**:`wchar_t cmdLine[] = L"cmd.exe";` 3. **链接错误:找不到advapi32.lib** - **原因**:缺少Windows安全API库链接 - **解决方案**:确保编译命令包含`-ladvapi32`参数 - **完整命令**:`g++ -m64 -O2 -static -o privilege_escalation.exe main.cpp -ladvapi32` #### 运行相关问题 4. **运行失败:"OpenProcessToken失败,错误代码: 5"** - **原因**:权限不足或进程访问被拒绝 - **解决方案**: - 确保以管理员权限运行 - 检查目标进程是否存在且可访问 - 程序已实现多级权限申请策略自动处理 5. **中文显示乱码** - **原因**:控制台编码设置不正确 - **解决方案**:程序已自动设置UTF-8编码和本地化环境 - **验证**:检查程序输出是否正常显示中文 6. **找不到SYSTEM进程** - **原因**:系统中没有合适的SYSTEM权限进程 - **解决方案**: - 程序优先查找winlogon.exe,其次查找svchost.exe - 确保系统中有这些进程运行 - 检查进程快照创建是否成功 #### 权限相关问题 7. **权限验证失败** - **验证步骤**: ```cmd whoami # 查看当前用户 net user # 查看用户权限 net localgroup administrators # 查看管理员组 ``` - **预期结果**:显示`NT AUTHORITY\SYSTEM` 8. **安全软件阻止** - **现象**:程序被安全软件识别为可疑行为 - **解决方案**: - 在安全软件中添加白名单 - 在虚拟机环境中测试 - 确保有合法授权使用 ### 调试技巧 1. **查看详细错误信息** - 程序会输出详细的错误代码和描述 - 使用错误代码在Microsoft文档中查找具体含义 2. **检查进程状态** - 使用任务管理器查看进程列表 - 确认winlogon.exe和svchost.exe进程存在 3. **验证编译环境** - 运行`g++ --version`检查编译器版本 - 确保PATH环境变量包含G++路径 4. **查看系统日志** - 使用事件查看器查看Windows安全日志 - 检查是否有权限相关的审计事件 ## 法律声明 本程序仅供教育和技术研究使用。使用者应对其行为负全部法律责任。请遵守当地法律法规,仅在授权范围内使用。 ## 更新日志 - v1.0:初始版本,实现基本提权功能 --- **注意**:使用此程序前请确保您了解相关风险并已获得适当授权。