本文作者:掉到鱼缸里的猫(Ms08067内网安全小组成员)
说明:本文仅在Windows Server 2016 R2上进行测试,不保证其他版本环境下结果一致。
域是Windows网络操作系统的安全边界,域内主机各种策略由域控制器统一设定,域中所有主机共享一个集中式的目录数据库,包含着整个域内的对象。父域和子域之间构成域树,多个域树构成域林,林中的第一个被创建的域,作为该林的根域。Windows NT中,名称空间是平行的,尽管可以将NT域配置为彼此信任,但每个域都是一个完全独立的实体。
目录林根级域包含 Enterprise Admins 和 Schema Admins 组。这些服务管理员组用于管理林级操作,例如添加和删除域以及实现架构更改。
内传(内向信任,Direct Inbound):信任此域的域,这个域(当前域)中的用户,可以在指定域、领域或林中得到身份验证。
外传(外向信任,Direct Outbound):受此域信任的域,指定的域、领域或林中的用户可以在这个域中得到身份验证。
双向:内传 + 外传
企业内部来自间接信任域的用户可以在信任域中进行身份验证。
外部信任:林外部的两个域之间的不可传递的信任。
林信任:两个林之间的可传递信任,允许一个林中的任何域中用户在另一个林中的任何域收到身份验证。只有林的根域之间才可以使用这个选项。
全域性身份验证:windows将自动对指定域用户使用本地域的所有资源进行身份验证,在默 认情况下可以进行IPC连接。
选择性身份验证:windows将不会自动对指定域的用户使用本地域的任何资源进行身份验证,需要由管理员向指定域用户授予每个服务器的访问权。
这样一来,域之间的相互信任关系就可以大致分为三类:林中父子域、林中树和树、不同林的域之间的信任关系。
实验环境:
dc1:创建域 lab1.local ,作为父域,同时也是该林的根。
dc2:作为子域 sub.lab1.local 加入父域 lab1.local
加入域之前,dc2是无法查询到域中的任何信息
加入域(查询目标域,可以使用域用户,但是加入域的时候需要使用域管理员用户的凭据)
加入域之后可以查询到信任关系如下:
可以查询另外的域中的信息,并且两个域之间的身份凭据是相互认可的。
但是在没有分配权限时,是没有权限访问远程目录的;同时父域用户因为未在子域中登记,所以无法通过认证。
实验环境:
dc1:创建域 lab1.local
dc2:作为子域 sub.lab1.local 加入父域 lab1.local
dc3:作为林中的另一个树 lab3.local
信任情况如下:可以看到, lab1.local 和 lab3.local 之间存在双向信任,但是 lab3.local 和sub.lab1.local 之间没有方向记录。
此时 lab3.local 域中用户可以查询同林 lab1.local 以及其子域 sub.lab1.local 的信息,用户凭据也可得到认证。
此时林根的域管用户可以访问 lab3.local 的资源,但是 lab3.local 的域管用户没有其他资源的权限。
查询林根域的方法:
1. powershell:
Get-ADRootDSE|select rootDomainNamingContext
2. vbs:
Set objRootDSE = GetObject("LDAP://RootDSE")
Wscript.Echo "Root Domain: " &
objRootDSE.Get("RootDomainNamingContext")
实验环境:
dc1:创建域 lab1.local
dc2:创建子域 sub.lab1.local
dc3:创建域树 lab3.local
dc4:创建域 lab4.local
3.1.1 两个林根域之间
单向外传信任
使用全域性身份验证时,信任查询如下:对于lab4是传出,则对于lab1就是传入。
lab1 的用户身份在 lab4 中可以得到有效认证,但是在未授权的情况下无法访问资源:
而子域 sub.lab1.local 和同林树域 lab3 中的用户无法在 lab4 中得到认证。
使用选择性身份认证时,当不进行任何配置时,lab1的用户无法通过lab4的认证:
单向内传信任
信任关系查询
选择性身份验证时,lab4的用户无法进行身份验证。
修改为全域认证后,可以访问 lab1 ,但是无法访问子域和同林域。
3.1.2 外部域和子域之间
单向外传信任时,信任关系查询结果:
这里虽然通过命令无法查询到,但是直接查看子域的信任关系属性,是可以看到的:
仅 lab4 可以查询 sub , lab1 、 lab3 均无法查询:
修改为双向之后,仅 sub 、 lab4 之间可以互相认证, lab3 、 lab1 与 lab4 之间均无法查询:
3.1.3 外部域与林中树
仅在 lab3 和 lab4 之间可以查询到信任关系,同样通过可视化工具可以在其他域控(比如 dc2 )上查询到 lab3 和 lab4 之间的信任记录,此时, lab3 和 lab4 之间可以完成用户的认证, lab1 、 sub 与lab4 之间无法完成。
林根域和其他林的子域、树根域之间只能外部信任
添加林之间的信任时会提示目标林中的其他名称后缀情况:
添加双向信任后:
添加信任后,两个林之间所有的域用户身份都可以在其他域中得到认证:
默认配置下:
1.父域和子域之间:自动产生可传递的双向信任关系,两个域之间的身份凭据相互认可,同时父域管理员可以访问子域资源,反之不行。
2.林中的树之间:树根之间自动产生双向可传递信任关系,另一个域树的子域也会显示出来(但是不 会显示信任传递方向),任意域的用户在其他域中都可以得到认证,仅林根域管理员具有其他同林 域资源的访问权限。
3. 外部信任:只能访问参与配置的域的信息(也就是 nltest中有显示的域),无法获取到林中其他域的信息。
4. 林信任:任意域之间的用户都能得到认证。
林根域之间的外部信任和林信任的区别:
林信任下,另一个根域的信任信息中会标记 Attr: 0x8;
外部信任则是 Attr: quarantined
5. 外传、内传是站在命令执行者角度观察;只有参与配置的两个域之间可以通过 nltest命令查询到另一方。
dsquery和 net use在不同情形下的提示:
在其他主机上无法使用dsquery,因为没有这个程序 这不是废话
以win10 为例,将2016 的文件拷出
dsquery.exe.mui 放入:C:\Windows\zh-CN
dsquery.exe 放入:C:\Windows\System32
使用PTH可以进行查询
但是IPC不行
MS08067实验室官网:www.ms08067.com
公众号:" Ms08067安全实验室"
Ms08067安全实验室目前开放知识星球: WEB安全攻防,内网安全攻防,Python安全攻防,KALI Linux安全攻防,二进制逆向入门
最后期待各位小伙伴的加入!