点击蓝字关注我哦
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属性的,用以提权也很实用。
实战
首先模拟场景为二,1.域内机器 2.当前域用户(域内机器通过该域用户加入域)
域内机器:windows2012
域内用户:w2012(域内机器通过该域内账户加入域)描述为(windows2012)
1.先查询域内机器所对应的加入域内所使用的账户
可以看到域内机器windows2012 通过w2012域用户,当前登陆用户也为w2012。
然后直接可以利用工具RBCD.exe打一下
192.168.75.254 为域控ip地址
Redteam.com 为域名
W2012-test为新创建的机器账户,密码为123456
Windows2012 为需要提权的域内机器(这里创建的机器账户就是为这台机器创建的) 验证一下:
可以看到创建成功了
查看一下本地机器的基于资源的委派设置:
也设置好了
然后我们就可以利用s4u2self扩展代表我们拿到服务器的administrator去向KDC请求一张TGS,最后一步使用s4u2proxy扩展用我们拿从s4u2self那里获取到的tgs作为验证信息再去请求一张用于访问windows2012机器CIFS spn的tgs票据
1.利用我们新创建的机器账户,这里使用的Rubeus,当然你也可以使用impackt中的ge tst.py
申请的票据注入内存。
这里:w2012是我随意在域控上面创建的域用户,windows2012 是通过该账户加入域的,通过该域用户,我们就可以提权windows2012 administrator权限。
现在公众号不好输出工具,工具也没啥,就是改改了ateam大哥的源码,然后有一个地方始终没有实现,就是无法通过输入域账户密码来实现认证,百度试了很久,因为不熟悉c#的活动目录类,太菜了。
工具将放在星球里,大家请见谅!星球学习氛围良好,技术交流多,星球一直秉承着实战分享,技术分享,免杀分享,共同学习共同进步的理念,欢迎大家的加入。
END
看完记得点赞,关注哟,爱您!
扫码领hacker资料,常用工具,以及各种福利
来源:中外学术情报 转载自:双一流高校 7月27日,中山大学药学院发生一起实验安全事故。 当天,中山大学药学院发布通报,称实验室在清理此前毕业生遗留在烧瓶内的未知白色固体,一博士生用水冲洗时发生炸裂。炸裂产生的玻璃碎片刺穿该生手臂动脉血管。 随后,该生已经被送…
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论