概述:Windows 权限与会话管理知识索引,涵盖 UAC、令牌、提权、降权等核心概念。

本文部分内容由 AI 生成,经人工修订。

📖 知识概览

Windows 权限系统是操作系统安全的核心组成部分,涉及用户身份验证、访问控制、特权管理等多个方面。本系列文章系统性地介绍 Windows 权限与会话相关的技术原理和实践应用。

核心概念

概念说明
Token(令牌)包含用户身份和权限信息的数据结构
UAC用户账户控制,限制程序权限的机制
Privilege系统级特权,如调试、关机等
Session登录会话,管理用户交互上下文
DACL/SDDL访问控制列表及其描述语言

📚 文章索引

基础概念

文章说明
【权限与会话】Windows 令牌Windows Token 令牌结构与原理
【权限】Privilege’s constantsWindows 特权常量定义
【权限与会话】SDDL安全描述符定义语言

UAC 机制

文章说明
【权限与会话】由appinfo谈谈UAC级别UAC 级别详解与 AppInfo 服务

权限操作

文章说明
【权限与会话】提权提权技术与代码实现
【权限与会话】提权工具常用提权工具介绍
【权限与会话】降权降权启动进程的方法
【权限与会话】 Service降权启动进程服务进程降权启动技术

高级技术

文章说明
【权限与会话】Token窃取与利用Token 窃取技术与利用方式

🔑 核心知识点

1. Windows 令牌(Token)

令牌是 Windows 安全模型的核心,包含:

Token 结构:
├── 用户 SID(Security Identifier)
├── 组 SID 列表
├── 特权列表(Privileges)
├── 默认 DACL
├── 源信息(Source)
├── 过期时间
└── 模拟级别

令牌类型:

  • Primary Token:主令牌,代表进程身份
  • Impersonation Token:模拟令牌,用于线程模拟

2. UAC(用户账户控制)

UAC 通过限制管理员权限来提高安全性:

UAC 级别说明
始终通知所有更改都通知
默认仅程序更改时通知
仅程序通知(不 darken 桌面)不安全
从不通知关闭 UAC

UAC 提升路径:

用户请求提升权限
    ↓
AppInfo 服务处理
    ↓
创建提升后的进程
    ↓
返回新进程句柄

3. 特权(Privilege)

常用特权常量:

特权常量说明
SeDebugPrivilege20调试程序
SeLoadDriverPrivilege10加载驱动
SeShutdownPrivilege19关机
SeTakeOwnershipPrivilege28获取所有权
SeAssignPrimaryTokenPrivilege3分配主令牌

4. 降权与提权

提权场景:

  • 利用漏洞提升权限
  • Token 窃取与注入
  • 服务提权

降权场景:

  • 服务以低权限运行
  • 沙箱隔离
  • 最小权限原则

🛠️ 常用 API

令牌操作

// 打开进程令牌
OpenProcessToken(
    HANDLE ProcessHandle,
    DWORD DesiredAccess,
    PHANDLE TokenHandle
);
 
// 获取令牌信息
GetTokenInformation(
    HANDLE TokenHandle,
    TOKEN_INFORMATION_CLASS TokenInformationClass,
    LPVOID TokenInformation,
    DWORD TokenInformationLength,
    PDWORD ReturnLength
);
 
// 复制令牌
DuplicateTokenEx(
    HANDLE hExistingToken,
    DWORD dwDesiredAccess,
    LPSECURITY_ATTRIBUTES lpTokenAttributes,
    SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
    TOKEN_TYPE TokenType,
    PHANDLE phNewToken
);

特权操作

// 启用特权
BOOL EnablePrivilege(HANDLE hToken, LPCTSTR lpszPrivilege) {
    TOKEN_PRIVILEGES tp;
    LUID luid;
    
    if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid))
        return FALSE;
    
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    
    return AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);
}

🔗 外部参考


📝 学习建议

  1. 理解基础 - 先掌握 Token 和 SID 的概念
  2. 实践操作 - 使用工具观察和分析 Token
  3. 安全视角 - 理解提权漏洞的成因和防护
  4. 代码实现 - 编写提权/降权代码加深理解

更新时间: 2026-03-27