内网-跨域攻击
跨域攻击
1.跨域攻击介绍
内网中的域林
很多大型企业都拥有自己的内网,一般通过域林进行共享资源。根据不同职能区分的部门,从逻辑上以 主域和子域进行区分,以方便统一管理。在物理层,通常使用防火墙将各个子公司及各个部门划分为不 同的区域。

跨域攻击方法
1、常规渗透方法(利用web漏洞)
2、哈希传递票据攻击
3、利用域信任关系

域信任关系
建立域之间的信任关系,是为了一个域的用户能方便地访问其他域的资源,同时也方便了对域网络的管 理和维护,域信任作为域中的一种机制,允许另一个域的用户在通过身份验证后访问本域中的资源。同 时,域信任利用DNS服务器定位两个不同子域的域控制器,如果两个域中的域控制器都无法找到另一个 域,也就不存在通过域信任关系进行跨域资源共享了
域信任关系分类
域信任关系分为单向信任和双向信任
单向信任:是指在两个域之间创建单向的信任路径,即在一个方向上是信任流,在另一个方向上是访问 流,受信任域内的用户(或者计算机)可以访问信任域内的资源,但信任域内的用户无法访问受信任域 内的资源。也就是说,A域信任B域,那么B域内受信任的主体可以访问A域内信任B域的资源。
双向信任:是指两个单向信任的组合,信任域和受信任域彼此信任,在两个方向上都有信任流和访问 流。这意味着,可以从两个方向在两个域之间传递身份验证请求。活动目录中的所有信任关系都是双向 可传递的。在创建子域时,会在新的父域和子域之间自动创建双向可传递信任关系,从下级域发出的身 份验证请求可以通关其父域向上流向信任域
域信任关系也可以分为内部信任和外部信任
内部信任:在默认情况下,用活动目录安装向导将新域添加到域树或林根域中,会自动创建双向可传递信 任。在现有林中创建域树时,将建立新的树根信任,当前域树中的两个或多个域之间的信任关系被称为 内部信任。这种信任关系是可传递的。例如,有三个子域BA,CA,DA,BA域信任CA域,CA域信任DA域, 则BA域也信任DA域
外部信任是指两个不同林中的域的信任关系。外部信任是不可传递的,而且是单向的。
只有domain admins组中的用户可以管理域信任关系
2.搭建和查看域信任关系
搭建域树(内部信任)
如果是复制的虚拟机请运行 C:\Windows\System32\sysprep\sysprep.exe 重新获取SID
1、修改计算机名和修改IP地址,DNS指向父域
2、安装 AD域服务
除了这里全都下一步 最后安装
3、升级为域控
4、添加到现有林 点击更改提供父域的账号密码
5、正常安装直到结束
6.pc-2008-2(10.210.100.144)加入子域
搭建域森林(外部信任)(未搭建)
1、修改计算机名和修改IP地址,DNS指向根域
2、安装 AD域服务
3、升级为域控
4、添加到现有林
5、正常安装即可
获取域信息
在域中,Enterprise Admins组(出现在林中的根域中)的成员具有对目录林中所有域的完全控制权限。在默认情况下,该组包含林中所有域控制器上具有Administrators权限的成员
查看当前域中计算机的权限
1 |
|
使用lg工具获取域的相关信息
查看域信任关系
1 |
|
获取当前域中的用户组
1 |
|
获取远程机器的本地用户组
1 |
|
获取远程系统中的用户SID
1 |
|
3.利用域信任密钥获取目标域
实验环境
IP | 所属域 | 域中地位 | 机器名 | 当前登录用户 |
---|---|---|---|---|
10.210.100.10 | hack.com | 根域的域控 | DC | hack\administrator |
10.210.100.150 | abc.hack.com | 子域域控 | DC2 | abc\administrator |
10.210.100.144 | abc.hack.com | 子域中的机器 | PC-2008-2 | abc\liwei |
当前已经控制abc.hack.com域,其中包括 DC2机器和PC-2008-2机器
实验步骤
1.发现有根域
2.当前无法访问DC.HACK.COM
1 |
|
3.使用mimikatz获取 当前域的 SID, 父域的 SID ,子域域管的NTLM ,信任密钥
1 |
|
子域sid:S-1-5-21-3991110149-857536787-685120577
父域sid:S-1-5-21-2431442348-1717482385-2017137259
信任密钥:8c5948ade6a77b4276a8710327ce83f3
4.在普通的域内用户中创建创建高权限票据
1 |
|
5.上传asktgs.exe和kirbikator.exe工具,asktgs.exe伪造票据,kirbikator.exe注入票据
6.创建CIFS服务的票据进行复制文件的操作
1 |
|
7.将票据注入内存
1 |
|
8.访问域控
1 |
|
9.复制恶意文件,如果复制失败,请注入host服务票据。
1 |
|
10.伪造host服务,进行创建计划任务
1 |
|
11.注入内存
1 |
|
12.重新复制
13.创建计划任务(需要重新注入host票据)
1 |
|
14.执行计划任务
1 |
|
- dc上线:
4.利用krbtgt值获取目标域
实验环境
IP | 所属域 | 域中地位 | 机器名 | 当前登录用户 |
---|---|---|---|---|
10.210.100.10 | hack.com | 根域的域控 | DC | hack\administrator |
10.210.100.150 | abc.hack.com | 子域域控 | DC2 | abc\administrator |
10.210.100.144 | abc.hack.com | 子域中的机器 | PC-2008-2 | abc\liwei |
当前已经控制abc.hack.com域,其中包括 DC2机器和PC-2008-2机器
实验步骤
清除票据
1 |
|
获取Krbtgt散列
1 |
|
66664f8ca84afb2d6fa9947469140fc7
获取关键信息
1 |
|
子域sid:S-1-5-21-3991110149-857536787-685120577
父域sid:S-1-5-21-2431442348-1717482385-2017137259
构造并注入黄金票据
1 |
|
访问目标域
1 |
|
复制恶意文件
1 |
|
执行计划任务
1 |
|
启动计划任务
1 |
|
上线
5.委派攻击的概述
委派是什么
先看一下kerberos协议
我们要去买票,但是自己又不想去,我们就可以委托中间商,给我们买票,这个就是委派
域委派是指将域内用户的权限委派给服务账户,使得服务账号能够以用户的权限在域内展开活动。
委派是域中的一种安全设置,可以允许某个机器上的服务代表某个用户去执行某个操作,主要分为三种:
1、非约束性委派:不做任何限制,可以访问任何资源 例如 文件系统 oa系统 域控等
2、约束性委派:限制访问某些指定的资源
3、基于资源的约束性委派
委派攻击的工作场景
一个域内用户访问WEB服务,但是一些资源在文件服务上,这个时候就需要委派
怎么设置委派
在域内只有主机账号(整个主机)和服务账号(例如主机上的web服务)才有委派属性
主机账号:活动目录中的computers组内的计算机,也被称为机器账号
服务账号:域内用户的一种类型,是服务器运行服务时所用的账号,将服务运行起来加入域内,比如:SQLServer,MYSQL等;域用户通过注册SPN也能成为服务账号。
1 |
|
开启委派如图
6.非约束委派攻击
非约束委派使用场景
从使用的角度:用户张三访问一台机器A,于是向KDC发起认证,KDC会检查A的机器账号的属性,如果是非约束委派的话,会把用户的TGT放在ST票据中并一起发送给A,这样A在验证ST票据的同时也获取到了用户的TGT,并把TGT储存在自己的lsass进程中以备下次重用,从而A就可以使用这个TGT,来模拟这个张三访问任何服务。
从攻击角度来说:如果攻击者拿到了一台配置了非约束委派的机器权限,可以诱导管理员来访问该机器,然后可以得到管理员的TGT,从而模拟管理员访问任意服务,相当于拿下了整个域环境,或者结合打印机漏洞让域管用户强制回连以缓存TGT
一个域内用户访问WEB服务,但是一些资源在文件服务上,这个时候就需要委派,需要web系统代表用户A去访问文件服务的资源
非约束委派的漏洞
如果是域管访问web系统,我们就可以通过web系统伪造域管的身份登录域控
利用非约束委派域控主动访问控制域
实验环境
机器位置 | IP | 机器名 | 机器登录用户 | 所属域 | 委派配置 |
---|---|---|---|---|---|
域控 | 10.210.100.10 | DC | hack\administrator | hack.com | 域控 |
域内机器 | 10.210.100.40 | PC-WEB | hack\r1cky | hack.com | 配置了非约束委派 |
实验前提:控制了域内的一台机器pc-web,并且该机器的服务账号配置了非约束委派,如下:
1、使用Adfind查询域内非约束委派机器账号
1 |
|
查询具有委派的服务账号
1 |
|
2、我们先去访问域控,是不能访问的
1 |
|
3、这个时候如果域管访问了pc-web机器我们的内存中就会有域管的TGT,就可以访问任意机器了,在与域控上执行访问PC-WEB(在域控上执行)
1 |
|
4、去pc-web导出内存中的票据
1 |
|
导出失败 需要提权
5、进行票据传递就可以获取域控的权限了
1 |
|
6、访问域控
7、使用计划任务,服务,或者无文件的powershell上线
1 |
|
利用非约束委派域控被动访问控制域控
机器位置 | IP | 机器名 | 机器登录用户 | 所属域 | 委派配置 |
---|---|---|---|---|---|
域控 | 10.210.100.10 | DC | hack\administrator | hack.com | 域控 |
域内机器 | 10.210.100.40 | 2012-2(OA) | administrator | hack.com | 配置了非约束委派 |
实验前提:控制了域内的一台机器OA,并且该机器的服务账号配置了非约束委派,如下:
一般域管不会主动访问我们,我们可以利用 Windows 打印系统远程协议(MS-RPRN)中的一种旧的但是默认启用的方法,在该方法中,域用户可以使用 MS-RPRN RpcRemoteFindFirstPrinterChangeNotification(Ex) 方法强制任何运行了 Spooler 服务的计算机以通过 Kerberos 或 NTLM 对攻击者选择的目标进行身份验证。
非约束性委派主机结合 Spooler 打印机服务漏洞,让域控机器DC强制访问已控的具有本地管理员权限的非约束性委派机器 OA ,从而拿到域管理员的 TGT,进而接管域控。(2008机器可能复现不了,因为版本的问题)
进行实验之前一定要把所有的防火墙关闭
1、首先利用Rubeus在 OA 上以本地管理员权限执行以下命令,每隔一秒监听来自域控机器DC的登录信息
1 |
|
这里执行失败(下面为他人成功示例)
再利用SpoolSample强制域控打印机回连,需在域用户进程上执行,所以这里切换成了普通域用户帐号去执行
1 |
|
Rubeus监听到票据
Rubeus导入票据
1 |
|
获取域内用户的hash
1 |
|
如果当前的用户是管理员就可以使用PTH攻击,如果是普通的域用户就使用黄金票据
使用计划任务,服务,或者无文件的powershell上线
1 |
|
7.约束性委派攻击
约束性委派场景
当这个用户不在域内,他在出差,不能使用kerberos去认证,只能使用其他协议认证web系统,那同样WEB系统也需要访问文件服务的资源,这个时候如何认证呢?
Widnows Server2003之后微软引入了非约束委派。由于非约束委派的不安全性或者场景受限(配置了非约束委派的机器在 LSASS 中缓存了用户的TGT票据可模拟用户去访问域中任意服务),微软于2007年为 Kerberos 协议进行扩展引入S4U(service for user)协议,该协议分为两个子协议
这两个扩展都允许服务代表用户从KDC请求票证。
约束委派限制了S4U2proxy协议的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务
1、S4u2self(Service for User to Self)
2、S4U2proxy(Service for User to Proxy)
这两个扩展都允许服务代表用户从KDC请求票证
约束委派限制了S4U2proxy协议的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务
存在的问题
1、服务账号B可以代表A申请访问B的票据,那么可不可以代表域管申请域管访问B的票据呢?在这个过程中,不需要域管参与,服务B自身就可以完成
2、服务账号B可以代表A申请访问C的票据,那么可不可以代表域管申请域管访问C的票据呢?在这个过程中,不需要域管参与,服务B自身就可以完成
约束性委派攻击流程
用户(A)访问WEB系统(B),B代表A去向KDC申请访问B的TGT和ST1(使用S4u2self),用户A拿到了ST1就可以访问B了,如果在B上配置了约束性委派(A到C的约束委派),则B能够使用S4U2Proxy协议将用 户发给自己的可转发的ST1票据以用户的身份发给KDC,KDC返回B一个访问C的票据ST2,这样B就可以以用户的身份访问C
1 |
|
存在的问题是什么呢?
B会获取A的TGT,只要能伪造A的TGT,就可以用TGT申请ST1票据(伪造管理员申请ST1票据)
实验场景
实验前提:我们已经控制了ZS的电脑,发现该电脑配置了约束性的委派,并且可以读取到该电脑的机器用户的HASH值
1、查询约束性委派的机器和用户
1 |
|
查询到PC-ZS电脑配置了约束委派,委派的目标是DC的CIFS服务
2、使用mimikatz获取机器账户NTLM Hash
1 |
|
3、使用kekeo申请配置了约束委派机器账户PC-ZS$的TGT
1 |
|
利用TGT通过伪造S4U请求以administrator身份访问PC-ZS的ST
1 |
|
mimkatz注入
1 |
|
访问域控