MSDN定义如下:
Access token. Each time a user logs on, Windows 2000 creates an access token. The access token is a representation of the user account and contains the following elements:
- Individual SID. Security identifier (SID) representing the logged-on user
- Group SIDs. SIDs representing the logged-on user's group memberships
- User Rights. Privileges (associated with each SID) granted to the user or to groups to which the user belongs
An access token is not updated until the next logon, which means that if you add a user to a group, the user must log off and log on before the access token is updated.
每当用户成功登录就会获得一个Access token,Access token中含有如下三个元素:
- 个人SID:登录用户的Security identifier
- 组SIDs:登录用户的组成员身份
- 用户权限:授予登录用户的权限,与SID相对应
Access token只有到下次登录时候才刷新,这就意味着如果在此次会话中更改了用户身份,需要重新登录才能获取到新的token。
Windows有两种类型的Token:
Delegation token
(授权令牌): 用于交互会话登录(例如本地用户直接登录、远程桌面登录)Impersonation token
(模拟令牌): 用于非交互登录(利用net use访问共享文件夹)
两种token只在系统重启后清除
具有Delegation token
的用户在注销后,该Token将变成Impersonation token
,依旧有效。
可以使用incognito.exe来操作机器中存在的token,需要bypassuac或Administrator或更高的权限:
list_tokens -u
,查看可用的token:
这里以Administrator的权限执行,可以获取到System以及之前登录的普通用户common的token。
execute -c "NT AUTHPRITY\SYSTEM" calc.exe
,窃取token执行命令:
Meterpreter中可以通过load incognito
来加载incognito。
注:这里的incognito是x64的,x86的Meterpreter将其加载之后不会获得所有的token,所以需要先通过migrate pid
将Meterpreter迁移到一个x64进程下再load。
具体功能和incognito.exe大致相同:
list_tokens -u
:查看tokenimpersonate_token "NT AUTHORITY\\SYSTEM"
:利用token切换权限
另外,用户执行的进程会拥有一份用户token的拷贝,可以使用Meterpreter中的steal_token
来从进程中窃取token(需要有System权限):
https://msdn.microsoft.com/en-us/library/bb727067.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/aa374909(v=vs.85).aspx