freeBuf
跨域攻击分析和防御(上)
2024-04-03 15:25:27

跨域攻击

在大型公司或大型跨国企业中都拥有自己的内网,跨国公司都有各个子公司一般以建立域林进行共享资源。根据不同职能区分的部门,从逻辑上以主域和子域进行划分以方便统一管理。在物理层使用防火墙将各个子公司以及各个部门划分为不同区域。我们在渗透测试过程中如果拿到其中某个子公司或是某个部门的域控制器权限后,如果没有得到整个组织机构全部权限或我们需要寻找的资料不在此域中,往往需要其他部门或域的权限,这时候就需要选择继续进行跨域攻击拿下其他部门的域控制器或控制根域控制器的权限完成渗透工作。

跨域攻击的方法简介

常见的跨域渗透方式有常规渗透方法,如利用Web漏洞跨域拿下其他域的权限;利用已知域Hash进行PTH或PTT,如域控制器本地管理员密码可能相同;利用域信任关系完成跨域渗透。

在内网中的Web应用相比较于放置在公网的Web应用更具有脆弱性,公网中放置的Web应用服务器往往会配有WAF等设备,定期还有专业的渗透测试人员对其进行检测,但是在内网中的Web应用服务器大多为内部办公使用或作为测试服务器使用,所以内网中的Web应用服务器安全性受重视程度较低,往往会出现弱口令或是补丁未及时进行修复,该方法属于常规Web渗透,不作为本书重点讲解。

如果在已经控制当前域的域控制器权限后,我们可以检查域控制器的本地管理员密码,是否有其他域的域控制器本地管理员密码相同,在两个域之间的网络没有被隔离的情况下可以使用PTH进行横向渗透拿下其他域的域控制器权限。在很多公司中,虽然划分不同的域,但是为了节省资源管理员可能都为同一批人员,可能会出现域管理员中用户名相同的情况,可以尝试其密码是否也相同或相近。

本章着重讲解的是如何利用域信任关系进行跨域渗透。

利用域信任关系跨域攻击

域信任的作用是为了解决如何在多域环境中进行跨域资源共享,域环境不会无条件的接受来自其他域的凭证,他们只会接受来自受信任域的凭证。默认情况下,特定Windows域中的所有用户都可以通过该域中包含的资源进行身份验证。通过这种方式,域可以为其用户提供对该域中所有资源的安全访问。如果需要扩展访问到超出当前域边界的资源,需要使用域信任,域信任作为域的一种机制,允许另一个域的用户验证身份后访问本域中的资源。域信任又是利用了DNS服务器进行定位两个不同子域的域控制器,如果两个域中的域控制器不能找到另一个域,也就不存在通过域信任进行跨域资源共享了。

域信任关系简介

域信任分为单向信任和双向信任两种信任关系。单向信任是指在两个域之间创建单向的信任路径,在一个方向上的信任流,另一个方向上的访问流。在受信任域和信任域之间的单向信任中,受信任域中的用户或计算机可以访问信任域中的资源。但是,信任域中的用户无法访问受信任域中的资源,也就是说若A域信任B域,即B域中受信任的主体是可以访问A域中信任B域的资源。双向信任是指两个面向对立的单向信任的组合,信任和受信任的域彼此信任,两个方向上的信任流和访问流。这意味着可以两个方向上在两个域之间传递身份验证请求。Active Directory林中的所有域信任都是双向可传递信任。创建新子域时,将在新子域和父域之间自动创建双向可传递信任,从下级域发出的身份验证请求通过其父级向上流向信任域。

域信任还可分为外部信任和内部信任两种信任关系。默认情况下,使用Active Directory安装向导将新域添加到域树或林根域时,会自动创建双向可传递信任。在现有林中创建新域树时,将建立新的树根信任,当前域树中的两个或多个域之间的信任关系被称为内部信任,这种信任关系是可以进行传递的,如果有三个子域分别为BA域、CA域、DA域,BA域信任CA域、CA域又信任DA域,则BA域也信任DA域。外部信任是指两个不同林中的域的信任关系,外部信任不可传递。但是林信任可以是非传递性的或可传递的,具体取决于所使用的林间信任的类型,并且只能在位于不同林中的域之间创建。

在早期的域中,域信任仅限于两个域之间,也就是说域信任是不可以传递的,并且域信任都是单向的。随之Windows系统的发展,一直到Windows Server 2003时域信任变为双向信任关系并且可以进行通过信任关系进行传递。在Windows系统中,只有Domain Admins组中的用户可以管理域信任关系。

获取域信息

在域中的Enterprise Admins组(仅出现在林的根域中),该组的成员具有对目录林中所有域的完全控制作用。默认情况下,该组是林中所有域控制器上Administrators的成员。

这里要利用到一个工具lg.exe,该工具是一款使用C++编写用于管理本地用户组和域本地用户组的命令行工具。使用lg.exe工具可以帮助我们枚举远程主机用户和组的信息。

查看lab域内电脑当前权限,输入命令,如图7-1所示。

图7-1查看当前权限

查看pentest域内机器名为DC的电脑当前权限,如图7-2所示。

图7-2查看当前权限

枚举本域中用户组,指定Domain name为lab域,输入如下命令,如图7-3所示。

lg.exe lab\.

图7-3枚举本域中用户组

枚举远程机器本地组用户,指定其他域中机器名为DC的计算机, 输入如下命令,结果如图7-4所示,表示没有信任关系。

lg.exe \\dc

图7-4枚举远程机器本地组用户

如果两个域中存在域信任且当前权限也被另一个域信任,输入上述命令,结果如图7-5所示。

图7-5枚举远程机器本地组用户

获取远程系统全部用户SID,输入下列命令,如图7-6所示。

lg.exe \\dc -lu -sidsout

图7-6获取远程系统全部用户SID

这里可以使用\groupname指定获取某个组所有成员的sid,如图7-7所示。

图7-7 指定获取某个组所有成员的sid

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
文章目录