Windows提权 —— 令牌窃取提权
令牌窃取提权
一、令牌及伪造令牌介绍
令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。这些令牌将持续存在于系统中(除非系统重新启动)。
令牌的最大特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。
- 访问令牌(Access Token )代表访问控制操作主休的系统对象。
- 密保令牌(Security Token )也叫作认证令牌或者硬件令牌,是一种用于实现计算机身份校验的物理设备,例如U盾。
- 会话令牌(SessionToken)是交互会话中唯一的身份标识符。
伪造令牌攻击的核心是 Kerberos 协议。 Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。Kerberos协议的工作机制如下:
客户端请求证书的过程如下:
- 客户端向认证服务器发送请求,要求得到证书。
- 认证服务器收到请求后,将包含客户端密钥的加密证书发送给客户端。该证书包含服务器Ticket(包含由服务器密钥加密的客户机身份和一份会话密钥)和一个临时加密密钥(又称为会话密钥,Session Key)。当然,认证服务器也会向服务器发送一份该证书,使服务器能够验证登录的客户端的身份。
- 客户端将Ticket传送给服务器。如果服务器确认该客户端的身份,就允许它登录服务器。
客户端登录服务器后,攻击者就能通过入侵服务器来窃取客户端的令牌。
其中注意:令牌窃取并非提权!
二、MSF 假冒令牌
两种类型的令牌:
- Delegation Tokens,也就是授权令牌,它支持交互式登录(例如,可以通过远程桌面登录及访问);
- Impersonation Tokens,也就是模拟令牌,它支持非交互式的会话。
两种令牌会在系统重启后才会清除;授权令牌在用户注销后,会变为模拟令牌会依旧有效。
- 假设已经获取到了目标机器的meterpreter Shell ,列出可用的令牌;
load incognito
list_tokens -u
注:列举令牌只能列出当前用户和比当前用户权限更低用户的令牌,例如当前权限是system或者是administrator,那么我们就可以看到系统中所有的令牌。
- 切换令牌。
impersonate_token 机器名\\用户名
注:使用令牌时,最好使用引号将其括起,因为某些令牌的名字中间含有空格,可能会报错。另外在输入主机名\用户名时,需要输入两个反斜杠(\)。
- 不需要此权限,那么可以使用命令
rev2self
返回原先的权限shell。
三、MSF Rotten Potato 提权
烂土豆(Rotten Potato)提权是一个本地提权,是针对本地用户的,不能用于域用户。
提权利用
当拿到一个服务用户的shell(一定是服务用户)时:
- 列举当前的令牌;
- 上传并执行烂土豆;
upload /root/RottenPotato/rottenpotato.exe
execute -cH -f rottenpotato.exe
- 列出令牌发现得到了SYSTEM权限的shell。
提权的原理
- 欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到控制的TCP终端。
- 对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
- 模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。