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权限了

PrintSpoofer提权