Windows 使用令牌来确保帐户拥有执行特定操作的正确权限。当用户登录或通过身份验证时,帐户令牌会分配给帐户。这通常由 LSASS.exe 完成(将其视为身份验证过程)。
该访问令牌包括:
- 用户SID(安全标识符)
- 组 SID
- 特权
(英文版):
- User SIDs(security identifier)
- Group SIDs
- Privileges
除此之外。更详细的信息可以从这里找到。
有两种类型的访问令牌:
- 主要访问令牌(Primary access tokens):与登录时生成的用户帐户关联的令牌
- 模拟令牌(Impersonation tokens):允许特定进程(或进程中的线程)使用另一个(用户/客户端)进程的令牌来访问资源
对于模拟令牌,有不同的级别:
SecurityAnonymous:当前用户/客户端无法冒充其他用户/客户端
SecurityIdentification:当前用户/客户端可以获得客户端的身份和权限,但不能冒充客户端
SecurityImpersonation:当前用户/客户端可以模拟本地系统上客户端的安全上下文
SecurityDelegation:当前用户/客户端可以模拟远程系统上客户端的安全上下文
其中安全上下文是包含用户相关安全信息的数据结构。
帐户的权限(在创建时授予帐户或从组继承)允许用户执行特定操作。以下是最常被滥用的特权:
- SeImpersonatePrivilege
- SeAssignPrimaryPrivilege
- SeTcbPrivilege
- SeBackupPrivilege
- SeRestorePrivilege
- SeCreateTokenPrivilege
- SeLoadDriverPrivilege
- SeTakeOwnershipPrivilege
- SeDebugPrivilege
关于模拟特权:
要介绍模拟特权,我想首先引用@decoder_it的一句话:“如果你具有了SeAssignPrimaryToken或SeImpersonate特权,那么你就具有了SYSTEM的权限”。显然,这句话说得太过简单,但事实也并非遥不可及。
这两个特权确实非常强大,通过这两个特权,我们可以在其他用户的上下文中运行代码,甚至创建新的进程。如果我们拥有SeImpersonatePrivilege特权,就可以调用CreateProcessWithToken();如果我们拥有SeAssignPrimaryTokenPrivilege特权,就可以调用CreateProcessAsUser()。
incognito提权
使用whoami /priv查看可用权限
![[Pasted image 20231120110417.png]]
可以看到启用了两个权限(SeDebugPrivilege、SeImpersonatePrivilege)
因此尝试使用incognito进行令牌权限提升
使用load incognito命令加载拓展
![[Pasted image 20231120105958.png]]
查看可用令牌
list_tokens -g
![[Pasted image 20231120110040.png]]
可以看到Administrator可用
使用
impersonate_token "BUILTIN\Administrators"
使用administrator的模拟令牌
![[Pasted image 20231120110326.png]]
可以看到权限已经到system权限了