1.RBCD简介
本篇文章是在基于资源的约束委派的基础上的一个利用,篇幅会比较短,但个人认为利用面还是挺广泛的。于是就写一下。
首先,需要了解的是RBCD的基础知识:
可以参考我的这本篇文章,如果你还不了解Kerberos,可以看一下这篇
简单回顾一下:
基于资源的约束委派(RBCD)只支持2012及2012以上,它与非约束委派,约束委派有个一个很大的区别,就是不需要管理员去单独配置。RBCD把设置的权限给了计算机本身,那么,既计算机本身可以决定‘我’可以委派谁来控制我,换句话说就是计算机自身可以直接在自己账户上配置msDS-AllowedToActOnBehalfOfOtherIdentity属性来设置RBCD。
2.S4U2Self和S4U2Proxy
既然是RBCD,就一定绕不开两个协议,S4U2Self和S4U2Proxy,这两个协议的作用,主要是解决计算机以自己身份申请票据已达到完成认证的目的。
2.1.S4U2Self
S4U2Self
通过此扩展可以拿到一张标识任意用户身份的ST,使用S4U2Self的原因,是因为,如果用户非Kerberos协议登录网站,那么就涉及到协议转换的问题,因此需要使用S4USelf。如果用户是使用Kerberos协议进行认证并登录该服务器的,那么,在该服务器上会有该用户的ST,就不需要使用S4USelf去申请ST,直接使用该的ST。这个协议的本质,其实是解决协议转换问题。当该用户user使用非Kerberos协议请求Server A的时候,Server A是没有user用户的ST的,但是Server A要去获取Server B的访问权限需要user用户的ST,因此S4U2Self解决了这个问题,Server A服务器可以使用它去向KDC请求一张user身份的ST,Server A服务器再用这张ST去发起S4U2proxy请求。S4U2proxy
该拓展作用是使用一张user用户身份的ST去向KDC请求一张用于访问Server B的ST,这张ST的身份还是user用户,这样Server A就可以利用uesr用户的权限去访问Server B上的文件了。
3.msDS-AllowedToActOnBehalfOfOtherIdentity
默认情况下,属性在ldap中是查不到的,需要单独配置才可以。谁配置了msDS-AllowedToActOnBehalfOfOtherIdentity属性,就说明谁配置了RBCD。
msDS-AllowedToActOnBehalfOfOtherIdentity的values是这样的:
O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;serverA的sid)
其中O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO
未固定写法,;;;
后面为被委派的用户的SID
如上图,values:D:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-5199876-230042057-2391242617-1113)
说明:CN=SR,CN=Computers,DC=test,DC=org
配置了S-1-5-21-5199876-230042057-2391242617-1113
的委派
针对这,可以根据rabbit
大佬的思路来理解:配置了msDS-AllowedToActOnBehalfOfOtherIdentity
,values
指向域内某个用户,就可以理解为,该计算机将鉴定权能力交出去,相当于,该计算机完全信任委派的用户。
按照上图就是:
CN=SR,CN=Computers,DC=test,DC=org
配置了S-1-5-21-5199876-230042057-2391242617-1113
的委派,就相当于CN=SR,CN=Computers,DC=test,DC=org
信任S-1-5-21-5199876-230042057-2391242617-1113
3.1.谁可以配置?
既然知道了配置了RBCD的具体表现以及含义,那么问题来了,谁能修改msDS-AllowedToActOnBehalfOfOtherIdentity的values
,准确的来讲,应该是:谁可以添加msDS-AllowedToActOnBehalfOfOtherIdentity的values
并修改values
这里直接抛结论:
机器用户
mS-DS-CreatorSID 账号(mS-DS-CreatorSID的valuse的值对应的objectSid)
4.攻击利用
这里复盘一下攻击步骤:
第一步,连接域控ldap创建计算机账户
xiaolongxia
第二步,通过ldap协议在域控上设置
sr
的msds-allowedtoactonbehalfofotheridentity的值为O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;xiaolongxia的sid)
第三步,使用
xiaolongxia
凭据拿到一张TGT
该工具集成上面的前三步,唯一不同的是,该工具将所有计算机的msds-allowedtoactonbehalfofotheridentity的值都设置成了新建的机器用户xiaolongxia
PS:这里感谢rabbit师傅提供的工具
第四步,使用s4u2self代表administrator拿到一张ST
第五步,拿从s4u2self那里获取到的ST作为验证信息再去请求一张用于访问
sr
机器CIFS spn的ST票据。
第六步,提升权限
5.数据包分析
这里只简单看一下几个数据包
这个数据包,表示第三步:使用xiaolongxia
凭据拿到一张TGT
这里表示,通过s4u2self代表administrator拿到一张ST,对自己进行请求。其中,从s4u2self申请ST所需要的TGT,它放在了TGQ-REQ -> padata -> PA-DATA PA-TGS-REQ ->padata-value->ap-req 结构体中
拿到的ST是由xiaolongxia
的hash加密,s4u2self这个步骤作用是xiaolongxia
拿自己的tgt票据请求一张访问xiaolongxia
的ST,且该ST的身份是administrator,而这张ST是用xiaolongxia
的hash加密的
最后一步,我们拿从s4u2self那里获取到的ST作为验证信息再去请求一张用于访问sr
机器CIFS spn的ST票据,也就是s4u2proxy这一步。
6.攻击面
企业可能会有一个专门的账号,用来拉新用户加入域,该账号通常只有普通域用户权限,如果我们控制了这个账户呢?
当我们渗透进入一个域环境,发现并没有足够的权限扩,行动有限,那么我们可以查看,当前机器是谁拉进来的,如果我们能控制该用户呢?
一个域用户X可能会在域中创建多台机器(比如笔记本和台式机都需要加入域),当我们有了改用户的权限时,可以利用RBCD继续攻击其他mS-DS-CreatorSID是该域用户的机器。