前言:记录这篇文章更多的还是想初步的了解下Windows Access Token的概念
Windows Token介绍:
Windows Token其实叫Access Token(访问令牌),它是一个描述进程或者线程安全上下文的一个对象。不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝。
这也就解释了A用户创建一个进程而该进程没有B用户的权限。
Access Token种类:
1、主令牌
2、模拟令牌
一般情况下,用户双击运行一个程序,都会拷贝explorer.exe
的Access Token,这句话自己突然想起来某些api函数基于反调试的时候的判断点。比如在程序启动后,会有一个STARTUPINFO
的结构体变量,来保存程序启动的信息,我们通过其中类型为DWORD
的参数的改变来检测程序是正常运行还是在调试器中运行的。
提权的利用点:当用户注销后,系统将会使主令牌切换为模拟令牌,而模拟令牌不会被清除,只有在重启机器后才会清除
最重要的点:正常的令牌模拟和窃取,都是需要过了 UAC 的管理员/SYSTEM 权限。并且由于权限的问题,当前账号只能看到自己的访问令牌和比自己权限低的账号的访问令牌,也就是说这种提权方法不适用于 低权限 -> 高权限
Windows Access Token产生过程:
每个进程创建时都会根据登录会话权限由LSA(Local Security Authority)分配一个Token(如果CreaetProcess时自己指定了 Token, LSA会用该Token, 否则就继承父进程Token进行运行)
Windows Access Token组成:
用户帐户的安全标识符(SID)
用户所属的组的SID
用于标识当前登录会话的登录SID
用户或用户组所拥有的权限列表
所有者SID
主要组的SID
访问控制列表
访问令牌的来源
令牌是主要令牌还是模拟令牌
限制SID的可选列表
目前的模拟等级
其他统计数据
Windows Access Token – SID (Security Identifiers)安全标识符:
安全标识符是一个唯一的字符串,它可以代表一个账户、一个用户 组、或者是一次登录。通常它还有一个SID固定列表,例如 Everyone 这种已经内置的账户,默认拥有固定的SID。
SID的表现形式:
域SID-用户ID
计算机SID-用户ID
SID列表都会存储在域控的AD或者计算机本地账户数据库中。
提权的利用过程(这里的提权可以从域管的令牌进行下手,并且列出令牌需要高权限的操作,可以从administrator->system或domain admins):
1、进行administrator上线,列出当前的主令牌
2、进行窃取system权限的模拟令牌,提权成功
参考文章:https://payloads.online/archivers/2018-11-30/1#windows-access-token-简介