tothi/rbcd-attack

GitHub: tothi/rbcd-attack

基于 Impacket 的 Python 脚本,用于从域外对 Windows AD 执行 Kerberos 基于资源的约束委派攻击。

Stars: 613 | Forks: 72

# 滥用 Kerberos 基于资源的约束委派 ## 长话短说 本仓库是关于在 Windows Active Directory 域中对 Kerberos 基于资源的约束委派(Resource-Based Constrained Delegation)进行的实战攻击。 该攻击**仅使用 Python3 [Impacket](https://www.secureauth.com/labs/open-source-tools/impacket)**(及其依赖项)实现。已在 [Arch](https://www.archlinux.org/) 上使用最新的 Impacket(撰写本文时为 0.9.21)进行了测试。 ![Attack Log](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a182695197122823.png) ## 攻击概述 简而言之,在不深入细节的情况下,该攻击的目标是一台域计算机,具体来说是与其相关的服务主体(Service Principals)。 我们需要的前置条件如下: * 一个对目标计算机具有写入权限的域账户(具体是对目标计算机域对象的 `msDS-AllowedToActOnBehalfOfOtherIdentity` 属性具有写入权限) * 创建新计算机账户的权限(这通常是默认设置,请参阅 `MachineAccountQuota`) * 对 DC 的 LDAP (389/tcp) 和 SAMR (445/tcp)(或 LDAPS (636/tcp))访问权限 * 对 DC 的 Kerberos (88/tcp) 访问权限 极高层次的攻击路径: 1. 创建一个虚假计算机 2. 滥用目标计算机的 `msDS-AllowedToActOnBehalfOfOtherIdentity` 属性 3. 为目标计算机请求模拟的服务票据(S4U) 收益: * 如果被模拟的账户拥有特权,模拟的服务票据可能允许对目标上的服务(如 CIFS、HTTP 等)进行高级别访问。有时甚至可以实现计算机接管。 ## 常用工具集 此攻击的常用工具集通常在已加入域的 Windows 计算机上运行,使用: * [Powermad](https://github.com/Kevin-Robertson/Powermad) 用于添加新计算机账户 * [PowerSploit](https://github.com/PowerShellMafia/PowerSploit) dev 分支的 [Powerview](https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1) 用于 `滥用 msDS-AllowedToActOnBehalfOfOtherIdentity` * [Rubeus](https://github.com/GhostPack/Rubeus) 用于 S4U 票据操作 ## Impacket 实现 此实现从域外使用纯 [Impacket](https://github.com/SecureAuthCorp/impacket)。 ### 创建虚假计算机 使用 Impacket 的 addcomputer.py 示例创建一个虚假计算机(名为 `evilcomputer`): ``` addcomputer.py -computer-name 'evilcomputer$' -computer-pass ev1lP@sS -dc-ip 192.168.33.203 ecorp.local/test:ohW9Lie0 ``` ### 修改委派权限 实现了本仓库中的 [rbcd.py](./rbcd.py) 脚本,该脚本将新创建的 EVILCOMPUTER 的相关安全描述符添加到目标计算机的 `msDS-AllowedToActOnBehalfOfOtherIdentity` 属性中。 ``` ./rbcd.py -f EVILCOMPUTER -t WEB -dc-ip 192.168.33.203 ecorp\\test:ohW9Lie0 ``` 该脚本大量使用了 Impacket 示例 `ntlmrelayx.py` 中的 Python 类。 有关帮助和示例,请在不带选项的情况下调用该脚本。 ### 获取模拟服务票据 现在一切就绪,可以通过 S4U2Self 查询滥用约束委派,并获取目标计算机的模拟服务票据。使用 Impacket 示例脚本 `getST.py`: ``` getST.py -spn cifs/WEB.ecorp.local -impersonate admin -dc-ip 192.168.33.203 ecorp.local/EVILCOMPUTER$:ev1lP@sS ``` 上述命令代表目标域用户 `admin` 获取 CIFS 服务票据,并将其存储在文件 `admin.ccache` 中。 将文件路径添加到 KRB5CCNAME 变量后,该票据即可供 Kerberos 客户端使用。 ``` export KRB5CCNAME=`pwd`/admin.ccache klist ``` ## 参考资料 有关滥用基于资源的约束委派的详细信息: * https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html * https://www.harmj0y.net/blog/activedirectory/a-case-study-in-wagging-the-dog-computer-takeover/ * http://www.harmj0y.net/blog/activedirectory/s4u2pwnage/ 以及关于 Kerberos 攻击最全面的演示之一: * [Elad Shamir](https://twitter.com/elad_shamir) 和 [Matt Bush](https://twitter.com/3xocyte) 在 Defcon 上的 [Constructing Kerberos Attacks with Delegation Primitives slides](https://shenaniganslabs.io/media/Constructing%20Kerberos%20Attacks%20with%20Delegation%20Primitives.pdf)
标签:ACL滥用, Active Directory, AD域安全, Checkov, Conpot, CTF学习, HTTP, Impacket, Kerberoasting, MachineAccountQuota, Plaso, Python, RBCD, S4U2Proxy, S4U2Self, Windows安全, 代码生成, 内网渗透, 协议分析, 域委派攻击, 基于资源的约束委派, 委派滥用, 数据展示, 无后门, 权限提升, 横向移动, 渗透测试工具, 红队, 编程规范