# 黄金票据

此时，我们已经拿到了域管理员的身份，并且可以随意地查询到任何用户的凭证，那么怎么进行之后的利用呢？

### **黄金票据**

回顾一下 Kerberos 的认证流程，当用户申请 TGT 的时候，DC使用 krbtgt 的 NTLM 哈希加密了 TGT。当然了，krbtgt 的 NTLM 哈希仅对域控制器所知。正因为如此，如果我们得到了 krbtgt 的密码哈希，那么我们可以用来任意地创建 TGT 票据。我们会在下文也提到白银票据，相比伪造一张服务票据，伪造 TGT 的优势在于可以以模仿的用户访问域内任何主机任何资源。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2022-10/scaled-1680-/4xec3qYqwWPVbQif-image.png)](https://raven-medicine.com/uploads/images/gallery/2022-10/4xec3qYqwWPVbQif-image.png)

获得 krbtgt 的哈希也很简单，因为在制作黄金票据的时候，我们往往已经拿下了整个域，因此可以是通过 DCSync 获取 krbtgt 的哈希，可以在域控制器上从 **Lsass.exe** 进程中提取。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/QnOzPZsE6FS8NBcM-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/QnOzPZsE6FS8NBcM-image.png)

有了 krbtgt 的哈希后，我们还需要指定要模仿的用户、域的 FQDN、以及域的 SID。最终，我们可以使用 Rubeus 来制作黄金票据：

```
Rubeus.exe golden /aes256:8d253b4d7db4f28ccbb653ba5dfc3ba878bd376d99ab4859d575201935d79157 /user:administrator /domain:prod.raven-med.local /sid:S-1-5-21-1674258736-4167122442-1078531953 /nowrap
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/ssRo9mDowzv6lXif-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/ssRo9mDowzv6lXif-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/NXW3RxpgWSgnJdBD-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/NXW3RxpgWSgnJdBD-image.png)

制作之后，可以将票据保存为 kirbi 文件，然后通过 CobaltStrike 的 kerberos\_ticket\_use 命令导入从而访问任意资源。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/CB0bJA4ti0wGoShC-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/CB0bJA4ti0wGoShC-image.png)

### **KB5008380 补丁**

随着 **KB5008380** 补丁的下发，Kerberos 票据中 PAC 部分增加了额外的校验以及请求票据的用户信息。可以通过修改注册键 **PACRequestorEnforcement** 来决定想要的 PAC 校验行为：**支持旧的 PAC**、**新旧 PAC 都兼容**、**只支持新 PAC**。

PAC 数据负责用户授权，它包含访问不同服务的权限。 PAC 数据是通过 Kerberos 身份验证和授权流程从一张票据复制到另一张票据。当用户首次成功通过 KDC (AS\_REQ) 的身份验证时，用户会收到一个包含用户加密 PAC 数据的 TGT 作为响应 (AS\_REP)，TGT 中的 PAC 包含授权数据 ，即用户组归属列表。之后，当用户请求 TGS 访问特定服务 (TGS\_REQ) 时，PAC 按原样从 TGT 被复制到 TGS (下面的第三步和第四步)。 当 TGS 用于访问服务 (AP\_REQ) 时，服务会检查 PAC 以验证用户的访问权限。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/vU1c4GKHOwwVeeMf-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/vU1c4GKHOwwVeeMf-image.png)

PAC 授权数据位于 **KERB\_VALIDATION\_INFO** 结构体中的 **GroupIds** 属性。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/Y17oHhmWE7LpDUg5-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/Y17oHhmWE7LpDUg5-image.png)

该补丁在 PAC 中提供了一个新的结构体，其中包含用户安全标识符 (SID)。 SID 由 KDC 验证 (上图中的第三步)，票证中的用户名 (cname) 被解析为 SID 并与新的 **PAC\_REQUESTOR** 值进行比较。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/vnwRIQNkCAXfgnQB-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/vnwRIQNkCAXfgnQB-image.png)

也因为这个更改，增加了新的安全事件：**票据没有请求者**、**请求者不一致**。那么在强制执行新 PAC 结构的环境里，对于黄金票据攻击，我们需要指定**新的 PAC 结构**以及**存在的域用户**，一些安全工具也相应进行了更新 ([https://github.com/gentilkiwi/mimikatz/pull/380](https://github.com/gentilkiwi/mimikatz/pull/380))。

### **白银票据**

伪造的服务票据则是使用了特定主机的 AES256 密钥或者 NTLM 签名所伪造的白银票据，有了白银票据，我们可以模仿任何用户访问该主机上的任何服务，对于中短期的持久化较有帮助。虽然白银票据支持 AES256 密钥以及 NTLM 哈希，但是依旧更建议使用 AES256 密钥，原因在**密钥传递**小节哪里说过。我们依旧可以使用 Rubeus 来制作白银票据。我们需要以下参数：

```
要模仿的用户
域的FQDN
目标主机及服务
主机帐号的AES256密钥
域的SID
```

如果要制作一张访问 File01 主机上服务的白银票据，命令如下：

```
rubeus.exe silver /service:cifs/file01.prod.raven-med.local /aes256:c9e598cd2a9b08fe31936f2c1846a8365d85147f75b8000cbc90e3c9de50fcc7 /user:administrator /domain:prod.raven-med.local /sid:S-1-5-21-1674258736-4167122442-1078531953 /nowrap
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/2V97IbWLxE8PO8H5-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/2V97IbWLxE8PO8H5-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/EXFjD4i1JJnVkVib-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/EXFjD4i1JJnVkVib-image.png)

将创建的白银票据保存在本地，然后导入到牺牲会话中，发现得以成功访问目标服务了。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-06/scaled-1680-/ZPkgfmwviaP0Q1bD-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-06/ZPkgfmwviaP0Q1bD-image.png)

为了根据我们的需要创建白银票据，我们可以参考如下列表来指定要维持访问的权限：

<table border="1" id="bkmrk-%E8%AE%BF%E9%97%AE%E7%B1%BB%E5%9E%8B-%E6%9C%8D%E5%8A%A1-psexec-cifs-" style="border-collapse: collapse; width: 100%; height: 177.6px;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr style="height: 29.6px;"><td style="height: 29.6px;">**访问类型**</td><td style="height: 29.6px;">**服务**</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">PsExec</td><td style="height: 29.6px;">CIFS</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">WMI</td><td style="height: 29.6px;">HOST, RPCSS</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">WinRM</td><td style="height: 29.6px;">HOST, HTTP</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">计划任务</td><td style="height: 29.6px;">HOST</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">DCSync</td><td style="height: 29.6px;">LDAP (仅在域控制器上)</td></tr></tbody></table>