访问令牌在提权中的作用
TOPIC SOURCE
Invoker:一款功能强大的渗透测试实用工具
在一次渗透演练中,攻击者通过一条看似普通的网络共享路径,意外获取了winlogon.exe的访问令牌,随后在本地打开了whoami,输出竟是NT AUTHORITYSYSTEM。这一次的“惊喜”,正是访问令牌在提权链条里最关键的环节。
访问令牌的核心属性
Windows 访问令牌是一套结构化的数据集合,包含用户的 SID、所属组、已授予的特权(如SeDebugPrivilege、SeTcbPrivilege)以及安全描述符。系统在每次进程创建时,将当前线程的令牌复制为子进程的令牌,决定了该进程能否访问受保护的对象。
提权路径:从普通用户到SYSTEM
实际攻击往往遵循三步走:定位高权限进程 → 窃取或复制其令牌 → 借助令牌启动新进程。其中最常见的手段是使用OpenProcessToken获取目标进程句柄,再调用DuplicateTokenEx生成可供CreateProcessAsUser使用的全新令牌。
- 利用
tasklist /v或Process Explorer锁定拥有SeDebugPrivilege的系统服务。 - 通过
OpenProcess获取该服务的句柄,随后调用OpenProcessToken读取其令牌。 - 执行
DuplicateTokenEx,将令牌提升为主令牌(Primary Token),并以CreateProcessAsUser启动cmd.exe。
防御视角的误区
很多安全团队只在日志里关注SeDebugPrivilege的使用,却忽视了令牌复制本身的审计。事实上,DuplicateTokenEx在没有显式特权提升的情况下,同样会留下可追溯的事件ID 4672。若配合Process Creation的子事件(4688),即可在攻击者完成提权前捕获异常。
“提权的根本不是代码的复杂度,而是令牌的误用。”——《Windows 安全内部》

参与讨论
这个提权路径讲得挺清楚的
之前测试时也碰到过类似情况,token复制确实容易被忽略
为啥要特别关注DuplicateTokenEx这个函数?
感觉防御部分写得有点简单
winlogon的token这么好拿吗?不太信🤔
从普通用户到SYSTEM三步走总结得不错
4672事件ID具体在哪个日志里查?