1.基础知识
1.1 基于资源的约束委派(RBCD):
是在Windows Server 2012中新加入的功能,与传统的约束委派相比,它不再需要域管理员权限去设置相关属性。RBCD把设置委派的权限赋予了机器自身,既机器自己可以决定谁可以被委派来控制我,也就是说机器自身可以直接在自己账户上配置msDS-AllowedToActOnBehalfOfOtherIdentity属性来设置RBCD。
1.2涉及到两种协议:
S4U2Self:作用其实是协议转换,在约束委派中,因为服务器不能再获取委派用户的tgt去请求tgs了,但是tgs又是认证过程所必须的,因此S4U2Self解决了这个问题,服务器可以使用它去向KDC请求一张用户身份的TGS,服务器再用这张TGS去发起S4U2proxy请求。S4U2proxy:该拓展作用是使用一张用户身份的TGS去向KDC请求一张用于访问服务器B的TGS。
1.3怎么来设置基于资源的约束委派呢?
其中msDS-AllowedToActOnBehalfOfOtherIdentity是关键, msDS-AllowedToActOnBehalfOfOtherIdentit此属性作用是控制哪些用户可以模拟成域内任意用户然后向该计算机进行身份验证。简而言之,如果我们可以修改该属性的账户那么我们就能拿到一张域管理员的票据,但该票据只对这台机器生效,然后拿这张票据去对计算机进行认证就能提权成功了(也就是说当域内存在任意一台域控和域功能级别是server 2012及以上时,可以通过给所在机器配置"msDS-AllowedToActOnBehalfOfOtherIdentity"属性来设置rbcd,然后通过s4u协议申请高权限票据进行利用)
1.4 提权原理
大概过程:RBCD本地提权的方案都是基于WEBDAV结合NTLM relay到ldap去设置msDS-AllowedToActOnBehalfOfOtherIdentity属性,允许自己委派自己。
如何通过ldap协议去设置?
首先我们得知道,机器加入域后,而对应登陆的域用户会在域内创建机器对应的计算机对象也就是计算机账户(默认域控的ms-DS-MachineAccountQuota属性设置允许所有域用户向一个域添加多达10个计算机帐户), 默认的ACl策略下,登陆机器的域用户(不仅仅是域用户,只要是注册spn的账户都可以)是对计算机对象是有写入对象属性的权限(WriteProperty)。而在域里面的计算机服务大部分都是注册为spn的服务账户,比如mssql,lls,但是spn服务器这个需要手动去Dc那里去注册,所以我们只需要用服务账户去设置本地计算机写入msDS-AllowedToActOnBehalfOfOtherIdentity属性。
如何利用?
一些场景:现在我们拥有一台普通权限的域内的机器,拥有一个注册spn域账户:
1.首先,因为我们不知道我们拿到计算机加入域的时候是哪一个域用户创建的计算机对象,但是没关系,我们手上有个spn域账户,我们可以再为计算机创建个计算机账户
2.然后我们通过我们spn域账户去给创建的计算机账户设置msDS-AllowedToActOnBehalfOfOtherIdentity属性,其实本地也可以设置,但是因为不是administrator权限,权限不够。
3.然后使用s4u2self扩展代表我们拿到服务器的administrator去向KDC请求一张TGS
4.最后一步使用s4u2proxy扩展用我们拿从s4u2self那里获取到的tgs作为验证信息再去请求一张用于访问我们拿到域内机器CIFS spn的tgs票据。
5.利用该票据,访问我们拿到域内服务器,则是administrator权限,提权成功
注意:因为spn服务,默认需要自己手动去通过DC注册的,账户并不容易拿到,但是我们如果知道域机器通过哪个域用户加入域的(mS-DS-CreatorSID),控制这个域用户一样的可以利用。
那么利用条件场景:
1.域内机器+spn账户
2.域内机器+域内用户(域内机器通过该域用户加入域)#这适合一些钓鱼情景
思考其利用场景:
我们所这个域用户其实和普通域用户没什么区别,只是这台域内机器加入这个域的时候,用的是这个域用户账户加入域的,恰巧此用户对该主机的属性具有写权限,换句话说任意用户对该主机的属性具有写权限,那么这个用户就可以对该主机进行攻击,所以可以枚举域内ACL策略,查看哪些对主机有GenericAll权限,GenericWrite、WriteProperty、WriteDacl等等权限,都是可以的,因为需要改主机的msDS-AllowedToActOnBehalfOfOtherIdentity值,设置基于资源的委派,我们创建的新的机器账户到主机的基于资源的委派。
在某些时候,我们执行的权限是iis权限,虽然在本地是低权限,但出网的权限就是机器账户的权限,这时候我们是有权利去设置自身的msDS-AllowedToActOnBehalfOfOtherIdentity属性的,用以提权也很实用。
评论