Windows - 令牌窃取原理及利用

2020-11-25 10:44:31 浏览数 (1)

令牌窃取

令牌(Token)是系统的临时密钥,相当于账户名和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的,它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌持续存在系统中,除非系统重新启动。

令牌最大的特点就是随机性,不可预测,一般黑客或软件无法猜测出来,令牌有很多种,比如访问令牌(Access Token)表示访问控制操作主题的系统对象;密保令牌(Security Token)又叫作认证令牌或者硬件令牌,是一种计算机身份效验的物理设备,会话令牌是交互会话中唯一的身份标识符。

伪造令牌攻击的核心是 Kerberos 协议。

其中注意:令牌窃取并非提权!

令牌窃取

Kerberos 协议


Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。

Kerberos 协议的流程图如下:

客户端请求证书的过程如下:

(1)客户端向认证服务器发送请求,要求得到证书

(2)认证服务器收到请求后,将包含客户端密钥的加密证书发送给客户端。该证书包含服务器Ticket(包含服务器密钥加密的客户机身份和一份会话密钥)和一个临时加密密钥(又称为会话密钥,Session Key)。当然,认证服务器也会向服务器发送一份该证书,使服务器能够验证登录的客户端的身份。

(3)客户端将Ticket传给服务器。如果服务器确认该客户端的身份,就允许它登录服务器。客户端登录服务器后,攻击者就能通过入侵服务器来窃取客户端的令牌。


MSF 令牌窃取


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

这里有两种类型的令牌:

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

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

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

列举令牌只能列出当前用户和比当前用户权限更低用户的令牌,例如当前权限是system或者是administrator,那么我们就可以看到系统中所有的令牌。

令牌窃取实战:

首先是获取到了目标机器的 meterpreter shell:

MSF中内置了令牌窃取工具incognito,我们直接使用:

代码语言:javascript复制
use incognito

由于我当前的权限是一个普通域用户,所以令牌窃取只能窃取到当前用户本身:

代码语言:javascript复制
list_tokens -u

那么如果我们获取到的shell是一个system权限的shell,那么我们就可以窃取到system和比system权限低的用户

接下来切换域管的令牌:

代码语言:javascript复制
impersonate_token 'GODAdministrator'

这里需要注意的是,使用令牌时,最好使用引号将其括起,因为某些令牌的名字中间含有空格,可能会报错。另外在输入主机名用户名时,需要输入两个反斜杠(\)

如果我们不需要此权限,那么可以使用命令 rev2self 返回原先的权限shell:

参考文章:

http://hackergu.com/powerup-stealtoken-rottenpotato/

0 人点赞