前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一篇文章搞懂跨森林攻击

一篇文章搞懂跨森林攻击

作者头像
Ms08067安全实验室
发布2024-07-20 12:18:40
770
发布2024-07-20 12:18:40
举报
文章被收录于专栏:Ms08067安全实验室

跨森林信任介绍

森林信任和域信任有相似之处,但也有不同之处。下图为ms08067.cn和ms08067.hk之间的信任:

森林信任

在上图的森林信任中,两个森林互相信任。这也是比较常见的森林信任形式。

和域信任一样,森林信任也可以是单向或者双向的。森林信任在域之间是可传递的,比如dev.ms08067.cn将信任dev.ms08067.hk,但是在多个森林之间不可传递,如果ms08067.hk信任另一个森林,如ms08067.us,ms08067.cn不会自动信任ms08067.us。

在森林内部,快捷信任(shortcut trust)可以加快认证过程。同样,外部信任(external trust)也可以创建快捷信任,如上图的uat.dev.ms08067.cn和lab.dev.ms08067.hk。

外部信任也是非传递的,即如果ms08067.cn和ms08067.hk之间没有建立信任,则除了有快捷信任的uat.dev.ms08067.cn和lab.dev.ms08067.hk域,其他域之间没有信任关系。

在跨森林信任中,比如上图,在子域如sales.ms08067.cn的用户可以查询和访问sales.ms08067.hk域的资源。我们也可以跨越森林边界枚举所有公开的信息,但能访问哪些服务取决于我们的组成员关系。

但是,从枚举的角度,森林内信任和森林间信任存在一定区别。在森林间信任存在一个可选的配置,select authentication,该设置可以限制了跨森林信任的访问,我们可以只允许特定的用户访问特定的对象。

在上图的例子中,sales.ms08067.cn域中的任何用户都可以查询sales.ms08067.hk域中的所有对象。但如果配置了select authentication,则会创建一个映射,只允许sales.ms08067.cn中指定的用户对sales.ms08067.hk中指定的对象执行查询。

这种限制将大大降低了攻击者枚举外部信任的能力,增强了森林间信任的安全性。但是要实现这种配置需要大量的设计和管理的准备,成本比较高,所以很少被实施。

跨森林枚举

在森林枚举时,第一步是枚举所有存在的森林信任。我们可以使用.NET的Forest.GetAllTrustRelatonships方法进行枚举。下面例子中,我们从dev.ms08067.cn域以dave用户权限进行枚举:

代码语言:javascript
复制
([System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()).GetAllTrustRelationships()

森林信任枚举

从输出可以看到源森林为ms08067.cn,对目的森林ms08067.hk存在信任关系,而且是双向信任。我们也可以使用PowerView的Get-ForestTrust方法进行枚举,输出结果和上图类似。

如果selective authentication没有启用,我们可以使用Get-DomainTrust指定根域的方式,枚举对ms08067.hk中子域的信任,然后对发现的子域继续进行枚举:

代码语言:javascript
复制
Get-DomainTrust -Domain ms08067.cn    

跨森林域信任枚举

输出显示了ms08067.cn的信任关系。我们也可以使用PowerView的Get-DomainTrustMapping方法自动枚举所有的域和森林信任:

代码语言:javascript
复制
Get-DomainTrustMapping 

PowerView自动枚举信任

从输出可以看到有森林内(WITHIN_FOREST)的信任,也有森林间(FOREST_TRANSITIVE)的信任。

在完成了对森林信任及对应子域信任的枚举后,我们可以开始枚举受信任森林(trusted forest)中的用户,组及其他信息。

PowerView的Get-DomainUser可以指定域进行搜索,下图为枚举ms08067.hk用户的部分输出:

代码语言:javascript
复制
Get-DomainUser -Domain ms08067.hk

跨森林用户枚举

因为森林是安全边界,所以可能比较难快速地找到明确的攻击向量。一个简单方法是搜索两个森林中有相同用户名的用户,因为他们可能属于同一个员工。如果存在这样的账户,则很可能两个账户之间使用相同的密码。

另外,在ms08067.cn的用户,也可能是ms08067.hk域某个组的成员。这种类型的组成员关系还是比较常见的,因为它是一种授予资源访问权限的比较简单的方法。

我们可以使用PowerView的Get-DomainForeignGroupMember方法枚举受信任森林或者域中的组:

代码语言:javascript
复制
Get-DomainForeignGroupMember -Domain ms08067.hk

受信任森林组成员枚举

从上图输出可以看到,当前域的用户jeff,是ms08067.hk中myGroup组的成员。取决于myGroup组的访问权限,如果我们能入侵当前域的jeff用户,则可能获得ms08067.hk的访问权限。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 跨森林信任介绍
  • 跨森林枚举
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档