# 模拟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:初始版本,实现基本提权功能
---
**注意**:使用此程序前请确保您了解相关风险并已获得适当授权。