# 跨域理论

当我们最终接管了当前域，接下来要做的便是占领更多的域，主要通过利用域信任以及其他的不当配置来实现。在那之前，我们需要熟悉一些跨域理论相关的名词，因为跨域理论较为复杂，涉及到的理论知识比较多。

### **概念与名词**

##### **域信任**

域信任是 AD 的一个关键组件，它使一个域中的用户能够对另一个域中的系统和资源进行身份验证和访问。理解域信任的几个方面很重要，包括信任的方向和对资源的访问。信任的方向可以是单向的，也可以是双向的。单向信任是在两个域之间创建的单向身份认证路径，如果域 A 信任域 B，则域 B 中的用户可以访问域 A 中的资源。但是，域 A 中的用户不能访问域 B 中的资源，单向信任发生在不同的森林之间。双向信任是相互的信任，每个域中的用户都可以访问另一个域中的资源。因此，如果域 A 和域 B 之间存在双向信任，则域 A 中的用户可以访问域 B 中的资源，反之亦然。双向信任必定建立在在同一片森林里，可能建立在不同的森林间。尽管信任决定着资源访问的方向，但在建立信任后，域信任不会自动授予来自受信任域的用户访问信任域中所有资源的权限，对资源的实际访问受权限和组成员身份以及特权有关。

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

信任还可以根据传递性进行分类。传递信任则是，如果域 A 信任域 B，域 B 信任域 C，则域 A 信任域 C。

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

那么非传递信任 (单向或双向) 仅限于信任关系中的两个域。在**同一森林内**，任意域都是**双向信任**和**可传递**的。但在森林之间，则默认不成立，例如 森林 A 信任森林 B，森林 B 信任 森林 C，但森林 A 不信任 森林 C，森林 A 甚至不知道森林 C 的存在。

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

例如，在我们靶场里，white-bird 域与 raven-med 域相互信任，med-factory 域信任 raven-med 域，但是 med-factory 的信任不能间接延续到 white-bird 域。但是，互相信任的森林各自之中的子域则可以互相访问，因为 prod 域是 raven-med 的子域，因此 white-bird 域与 prod 域也是互相信任，med-factory 域也单向信任 prod 域。

##### **域管理员与企业管理员**

这是 AD 中的两个高特权分组，域管理员仅对其特定域具有管理权限，而企业管理员对森林中所有域具有管理访问权限。下图分别是 PROD 与 RAVEN-MED 中 administrator 的信息，我们发现只有 **RAVEN-MED\\Administrator** 属于企业管理员分组。

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

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

##### **外部安全主体**

AD 中的外部主体对象表示来自**受信任的**外部域的安全主体，这用于将受信任域中的用户或组添加到信任域中的安全组。例如在 Med-factory 域中 (Med-factory 信任 Raven-med)，Administrators 组内有个外部成员，该成员为 Raven-med 中的 ExtAdmin 组。

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

##### **SID 历史**

SID History/ExtraSids 是一个适用于**迁移场景**的属性，当用户、组或其他安全主体对象从一个域移动到另一个域时，会为该对象分配一个新的 SID，但旧的 SID 会存储在 **SID History** 属性中，这允许安全主体在迁移后通过添加他们以前的 SID 来保持对以前域中资源的访问。

##### **信任密钥 (跨域密钥)**

信任密钥本质上是在创建信任关系时在两个域之间建立的密钥，信任密钥用于保护两个域之间的通信并确保域彼此的真实性。例如 **prod** 域与 **raven-med** 域互相信任，因此在 raven-med 域中存在着 **prod$** 的信任账户，在 prod 域中存在着 **raven-med$** 的信任账户，信任账户是特殊的账户类型，在用户管理工具中不可见，但的确存在。下图分别是 Dc01 与 Dc02 上的视角，我们可以看到同一个信任方向 (例如都是从 PROD 到 RAVEN-MED) 的密钥在 2 个域中是相同的。

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

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

##### **跨域 TGT**

在 Kerberos 身份认证的上下文中，当一个域中的用户需要访问另一个域中的服务时，将使用跨域 TGT (Inter-realm TGT)。用户所在域与服务所在域共享该跨域 TGT，以允许对用户进行身份验证。

##### **SID 过滤器**

**森林是域信任的安全边界**，而 SID 过滤器是 AD 信任关系中使用的一项安全功能，域在建立信任后，通常会默认启用 SID 过滤器，以提供一定程度的保护，以防止试图使用 SID 历史获得对资源的未授权访问，即不再盲目 SID 组归属了。域中的每个帐户和组都有一个 SID，其中包括域中所有 SID 都相同的域前缀，以及域中唯一的 RID。Windows 为新建的用户、主机。群组赋予**高于或等于 1000 的 RID**，这意味着如果 SID 包含小于 1000 的 RID，则 SID 对应于内置安全主体，例如认证用户 、所有人，或域管理员。

通过过滤掉 RID 小于 1000 的 SID，有助于防止用户授予自己不应有的特权。例如，域 A 中的攻击者设法将域 B 中的域管理员组的 SID 添加到他们自己的访问令牌中，如果没有 SID 过滤器来过滤掉该 SID，那么该攻击者将能够获得对域 B 的域管理员权限。值得注意的是，是可以在域信任上禁用 SID 过滤器的。

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

<div class="pointer-container" id="bkmrk-%C2%A0-5"><div class="pointer anim is-page-editable"><svg class="svg-icon" data-icon="link" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg><div class="input-group inline block"> <button class="button outline icon" data-clipboard-target="#pointer-url" title="复制链接" type="button"><svg class="svg-icon" data-icon="copy" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></button></div><svg class="svg-icon" data-icon="edit" role="presentation" viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"></svg></div></div>### **跨域理论**

有了对上述概念的理解，让我们来了解一下跨域访问服务的过程吧。从本质上讲，域信任所做的只是将两个域的身份验证系统链接起来，并允许身份验证通信通过引用系统在它们之间流动。如果用户请求访问位于所在域之外的资源的 SPN，则他们的域控制器将返回指向外部域 KDC 的引用票据。

用户的 TGT 包含在此 TGS-REP 引用票据中，并且此票证使用域信任密钥加密/签名的，而不是第一个域的 krbtgt 帐户的密钥。 此票据通常称为跨域 TGT。然后，外部域通过信任密钥对其进行解密来验证/解密引用票据中包含的 TGT，然后继续正常 Kerberos 流程的其余部分。流程图如下所示：

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

AS-REQ：用户向当前域的域控制器请求 TGT  
AS-REP：KDC 将 TGT 返回给认证用户  
TGS-REQ：用户向 KDC 请求访问目标域中某服务的 TGS  
TGS-REP：当前域没有目标域 krbtgt 的密钥，因此返回的是使用**跨域密钥**加密的**跨域 TGT**  
TGS-REQ：跨域 TGT 被传递到目标域，请求特定服务  
TGS-REP：跨域 TGT 被跨域密钥解密和验证，然后 TGS 被返回给用户

有了对跨域认证和访问的理解后，我们接下来讨论各种情况下的跨域利用。