### 继上题，为什么 ADCS 这个漏洞能获取域管理员权限，原理是什么

1. ADCS 漏洞（ESC8）的核心原理

ADCS 漏洞（也被称为 ESC8，因为它是由 SpecterOps 发现的攻击链之一）是配置缺陷而非代码漏洞。攻击者利用的是 ADCS 证书模板中的一个或多个不安全配置

一个典型的可被利用的证书模板具有以下特征：

- 权限配置不安全：这个证书模板的“注册（Enrollment）”权限被授予了低权限用户，甚至是匿名用户。这意味着，任何人都可以向证书颁发机构（CA）请求一个基于这个模板的证书
- 用途配置不安全：这个证书模板的用途（Extended Key Usage）被设置为 `Client Authentication`，这意味着它颁发的证书可以用于客户端身份验证
- 不安全的证书主体名（Subject Name）：这个模板允许请求者自定义证书中的主体名（Subject Name）。主体名是用于在 Kerberos 认证中识别用户身份的关键字段

2. 攻击链的详细步骤

1. 信息收集：攻击者首先需要通过侦察，找到域内存在的 ADCS 服务器，并识别出那些配置不安全的证书模板
   - 工具：`Certify.exe` 是一个常用的工具，可以扫描域内的 ADCS 服务器，并列出所有证书模板的配置，高亮显示那些存在漏洞的模板
   - 关键信息：攻击者会寻找那些 `Client Authentication` 权限开启、且主体名可控的模板
2. 以低权限用户身份请求高权限证书：
   - 攻击者使用一个低权限的域用户，或者通过前面提到的 NTLM Relay 等方法，以任何一个普通域用户的身份，向 ADCS 服务器发起证书请求
   - 在请求时，攻击者利用模板允许自定义主体名的缺陷，将请求的主体名（`Subject Name`）设置为一个高权限用户，例如域管理员
   - 为什么能成功？ 理论上，CA 应该验证请求者的身份和其请求的主体名是否匹配。但由于模板配置不安全，CA 没有进行这项验证，直接颁发了一个证书，其主体名是攻击者指定的域管理员
3. 利用证书获取 Kerberos TGT：
   - 攻击者获得这个伪造的证书后，就可以使用像 `Rubeus.exe` 这样的工具
   - `Rubeus` 可以利用这个证书，向域控制器发送 Kerberos 认证请求。这个过程被称为 `PKINIT`，是 Kerberos 协议的一个扩展，允许客户端使用证书进行身份验证
   - 为什么能成功？ 域控制器会看到这个证书，并根据证书中的主体名（`Subject Name`）来识别用户身份。它会认为这个请求来自一个合法的域管理员，并为其颁发一个域管理员的 Kerberos 票据（TGT）
4. 域完全控制：
   - 一旦攻击者获得了域管理员的 TGT，就相当于获得了域管理员的密码哈希，可以伪造任何其他用户的票据（Golden Ticket），或者使用 `psexec`、`WMI` 等工具，在不提供密码的情况下，以域管理员的身份执行任意命令，从而实现对整个域的完全控制