无境域靶场:Delegation RBCD on SPN-less users 打法解析

设计思路解析

入口向日葵 RCE,省略,之后会在边界找到 Kim:p@ss1234 这个用户的信息,以此开始

d2b5ca33bd20251031160902

d2b5ca33bd20251031160934

查询到 Kim 这个用户不仅可以以 WINRM 的方式登录DC,也可以使用 WMI

d2b5ca33bd20251031161317

使用 WMIEXEC 是被拒绝访问了,SMBEXEC 和 PSEXEC 大概率也是这样

d2b5ca33bd20251031161701

在Windows上可以使用:https://github.com/adityatelange/evil-winrm-py也可以安装 Ruby 带 DevKit 版本来进行Windows上的打包,中间修改密码的关系就省略了,详情可以看靶场的 WriteUp

设计的思路:

Kim:p@ss1234 -> 修改Jim的密码登录 winrm(Generic All) -> Jim可以强制修改mht的密码,但无法登录winrm(FocuseChangePasswd)-> mht对Tom(Generic Write权限)破解出来Tom的密码 -> Tom 委派到AD$ -> RBCD on SPN-less User -> AD Administrator

d2b5ca33bd20251031181150

RBCD on SPN-less users,这就是为什么使用 GetUserSPNs.py 不能获取到Tom的Hash

可以看到 Tom 虽然对 AD 有 AllowedToAct 但是无法使用 getST 获取到服务票据

d2b5ca33bd20251031182159

d2b5ca33bd20251031182352

GetUserSPNs.py 设计初衷是 “枚举 + 请求真实 SPN”,Tom 在 SEC.LAB 域内没有SPN

接着使用 targetedKerberoast 枚举域内用户的哈希

d2b5ca33bd20251031171842

最后使用 RBCD on Less SPN User 的打法获取到域管理员票据进行横向移动

获取一个没有 SPN 的、但被允许对目标机器进行委派的用户账户的 TGT(票据授予票据),并从中提取出该 TGT 的会话密钥(session key),将该用户账户的密码哈希替换为上一步中获得的 TGT 会话密钥,结合 S4U2self 和 U2U,使用这张服务票据(Pass-the-Ticket),以高权限用户的身份访问目标系统

d2b5ca33bd20251031175430

d2b5ca33bd20251031175240

d2b5ca33bd20251031175219

d2b5ca33bd20251031174313

d2b5ca33bd20251031175515

© 版权声明
THE END
喜欢就支持一下吧
点赞35 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容