出身寒微,不是耻辱,能屈能伸,方为丈夫。
约束性委派的利用
原理
非约束性委派被委派的机器会直接得到发布委派的用户的TGT,是十分不安全的,因此微软推出了约束性委派,还扩充kerberos协议,添加了s4u2self与s4u2proxy协议,以增加安全性。这两个协议的具体细节可以查看:windows中关于委派(delegation)的理解这篇文章。下面我简述一下约束性委派的过程,假设有这么一种情况,用户A委派service1去访问service2,那么大概的访问过程如下:
用户A访问service1。
service1通过s4u2self协议代表用户A去请求一个可以访问service1自身的可转发的ticket,这个ticket代表域控授权service1可以以用户A的身份进行操作。
service1以用户A的身份访问KDC请求一个访问service2的可转发的ticket
service1获取到ticket并以用户A的名义访问service2。
第一个ticket表示域控授权service1代表用户A来访问service1,第二个ticket代表域控授权service1代表用户来访问service2。总的来说s4u2self解决的问题就是,确定了某台主机可以代表某用户来对自己进行操作。s4u2proxy解决的问题是确定了某台主机可以代表某用户对其他主机进行操作。
综上所述,对约束性委派利用对核心就是获得可转发的ticket票据。获取根据约束性委派的执行过程可知,只要控制配置约束性委派服务的机器,并获得了它的密码,那么我们就可以劫持这台主机的kerberos请求过程,最终获得任意用户权限的ticket票据,这一行为可通过kekeo完成。
实验过程
补充:windows创建服务账号的方式
首先创建test1用户
SPN必须是域林中的唯一值,包括父域子域,否则会报错,因为子域已创建test用户
windows注册服务账户(域控才可以)
setspn -u -s host/test1 test1
可以查询test1的spn
setspn -u test1
创建好后就可以给账号配置约束性委派了:
先查询域内配置了约束性委派的服务账号,只有配置使用任何身份验证协议才能查询出约束性委派的服务账号。
Import-Module ./Powerview.ps1
Get-DomainUser -TrustedToAuth -Properties distinguishedname,useraccountcontrol,msds-allowedtodelegateto| fl
文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。
免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。
转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。
CSDN:
https://rdyx0.blog.csdn.net/
公众号:
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect
博客:
https://rdyx0.github.io/
先知社区:
https://xz.aliyun.com/u/37846
SecIN:
https://www.sec-in.com/author/3097
FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85