说明
- Kerberoasting 攻击发生在Kerberos协议的TGS_REP阶段,KDC的TGS服务返回一个由服务Hash加密的ST给客户端。
- 由于该ST是用服务Hash进行加密的,因此客户端在拿到该ST后可以用于本地离线爆破。
攻击的过程
- 攻击者提供一个正常的域用户密码对域进行身份认证,KDC在验证账户和密码的有效性后,会返回一个TGT。该TGT用于以后的ST请求。
- 攻击者使用获得的TGT请求针对指定SPN的ST。在请求服务票据的TGS-REQ进程中,攻击者可以指定其支持的Kerberos 加密类型为RC4_HMAC_MD5(ARCFOUR-HMAC MD5),因为RC4_HMAC_MD5加密算法相比于其他加密算法更容易被破解。
Kerberoasting攻击在实战中主要分为如下4步
- 查询域内注册于域用户下的SPN;
- 请求指定SPN的ST;
- 导出请求的ST;
- 对该导出的ST进行离线爆破。
选择攻击主机
- 攻击主机必须是域控主机内的user,而不是当前主机下的用户,如果是当前主机下的用户,那么当前主机只是加入了域,而并非和域控相关联。
- xie\hack
- 321@qq.com
SPN的发现
- 这是Kerberoasting攻击的第一步。首先,发现域内所有注册于域用户下的SPN认情况下。
- 域内会有一个注册在用户krbtgt下的SPN kadmin/changepw。但该SPN对于Kerberoasting 攻击是没有意义的,因为用户krbtgt的密码是随机生成的,几乎不可能爆破出来。
-
RiskySPN
- RiskySPN 是一个PowerShell 脚本的集合,专注于检测与SPN相关的账户是否滥用。
- 该脚本可以帮助我们自动识别弱密码服务票据,根据用户账户和密码过期时间来查找最容易包含弱密码的票据。
- 执行如下命令,该脚本会自动查找并过滤出(自动去除注册于krbtgt下的kadmin/changepw)当前域内注册于域用户下的可能包含弱密码的SPN的详细信息。
- Import-Module .\Find-PotentiallyCrackableAccounts.ps1;
- Find-PotentiallyCrackableAccounts -FullData
-
- #PowerShell脚本用法
- Import-Module .\GetUserSPNs.ps1
- #PowerShell脚本用法
-
PowerView.ps1
- PowerView.ps1是 PowerSnolit 中Recon 目录下的一个PowerShell脚本,该脚本可用于查询过滤出域用户下注册了SPN的用户,包括krbtgt用户,并返回用户的详细信息。
- 执行命令如下:
- Import-Module .\PowerView.ps1
- Get-NetUser -SPN
- 执行命令如下:
请求服务票据
- 当过滤出注册于用户下的SPN之后,我们就需要请求这些SPN的服务票据了。
-
Impacket 请求
- Impacket中的GetUserSPNs.py脚本可以请求注册于用户下的所有SPN的服务票据,也可以请求注册于指定用户下的SPN的服务票据。该脚本使用命令如下:
- 请求注册于用户下的所有SPN的服务票据,并以hashcat能破解的格式保存为hash.txt文件
- python .\GetUserSPNs.py -request -dc-ip 192.168.1.88 xie.com/administrator:321@qq.com -outputfile a.txt
-
Rubeus 请求
- Rubeus 中的Kerberoast 支持对所有用户或特定用户执行Kerberoasting 操作,它的原理在于先用LDAP查询域内所有注册在域用户下的SPN(除了kadmin/changepw)。
- 再通过发送TGS包,直接输出能使用John或 hashcat爆破的Hash。该工具使用命令如下:
- #请求注册于用户下的所有SPN的服务票据,并以hashcat能破解的格式保存为hash.txt文件
- Rubeus.exe kerberoast /format:john /outfile:hash.txt
- #请求注册于用户下的所有SPN的服务票据,并以hashcat能破解的格式保存为hash.txt文件
-
mimikatz 请求
- 使用mimikatz请求指定SPN的服务票据的命令如下,请求的服务票据将保存在内存
中。 - #请求指定SPN的服务票据
- kerberos::ask/target:MSSQLSvc/WIN-08U6QBF1C4U.xie.com:1433
- 使用mimikatz请求指定SPN的服务票据的命令如下,请求的服务票据将保存在内存
导出服务票据
- 在请求服务票据的过程中,有的工具可以直接将票据打印出来保存为文件。
- 有的工具会将票据保存在内存中,对于保存在内存中的票据,我们可以使用工具将其从内存中导出来。
查看内存中的票据
- 首先,我们需要查看内存中保存的票据。可以使用以下命令进行查看:
- #直接在cmd窗口执行
- klist
-
- 查看了内存中的票据后,我们就需要将其导出为文件了。
使用mimikatz导出票据
-
使用mimikatz将内存中的票据导出来的命令如下,执行完成后,会在mimikatz同目录下导出 .kirbi格式的票据文件。
-
mimikatz.exe "kerberos::list /export" "exit"
-
离线破解服务票据
- 通过前面几步取得了.kirbi票据文件或 hashcat、John能直接破解的文件,接下来就需要本地离线破解服务票据了。
kerberoast
- kerberoast 是用于攻击Kerberos实现的一些工具的集合。该工具中的 tgsrepcrack.py脚本可以对mimikatz导出的.kirbi格式的票据进行爆破。
- 使用 tgsrepcrack.py脚本离线破解.kirbi文件的命令如下
- python2 tgsrepcrack.py pass.txt 3-40a40000-hack@LDAP\~WIN-08U6QBF1C4U.xie.com\~xie.com-XIE.COM.kirbi
- 这里我报错了 自己去安装对应得库 去试试
- python2 tgsrepcrack.py pass.txt 3-40a40000-hack@LDAP\~WIN-08U6QBF1C4U.xie.com\~xie.com-XIE.COM.kirbi
hashcat
- 针对Impacket和Rebeus 请求的票据格式,可以使用hashcat执行如下命令来进行爆
- hashcat -m 13100 hash.txt pass.txt --force
Kerberoasting 攻击防御
- 对防守方或蓝队来说,针对检测和防御来说
- 确保服务账户和密码为强密码,具有随机性并定期修改。
- Kerberoasting 能成功的最大因素就是KDC返回的ST是用RC4_HMAC_MD5加密算法加密的,攻击者可以比较简单地进行爆破。
- 如果配置强制使用AES256_HMAC方式对Kerberos 票据进行加密,那么即使攻击者获取了ST,也无法将其破解。但这种加密方式存兼容性问题。
- 可以定期使用zBang工具检测当前域内危险的SPN。首先运行zBang,在弹出的界面中选择 Risky SPNs,再单击Launch按钮。
- 过一会儿就可以看到zBang运行成功,然后我们通过RiskySPN Results页面就可以看到结果,得到2个危险得spn