• initial enumeration of Kerberos
  • dumping tickets
  • pass the ticket attacks,
  • kerberoasting
  • AS-REP roasting
  • implanting skeleton keys
  • golden/silver tickets

  • ASREQP ROAST

  • ASREQ kerbrute -enum users
  • ASREQ ROAST
  • Kerberoast
  • Golden Ticket
  • Silver Ticket
  • Diamond Ticket
  • Sapphire Ticket
  • Bronze Ticket
  • Unconstrained Delegation
  • Constrained Delegation
    • Kerberos Relaying
    • Pass the ticket
    • S4u2self abuse
    • Encryption downgrade
    • Overpass the hash
    • SAMAccountName Spoofing
    • Ticket creaton with SID history (similar to Golden Ticket)
    • SPN jacking
    • Shadow Credentials
    • Pass the Cache (for linux)
    • UNPac the Hash
    • Pass the Key

      kerberos 介绍

      Kerberos 是 Microsoft Windows 域的默认身份验证服务。通过使用第三方票证授权和更强的加密,它旨在比 NTLM 更“安全”。尽管 NTLM 有更多的攻击向量可供选择,但 Kerberos 仍然有一些潜在的漏洞,就像我们可以利用的 NTLM 一样。

Common Terminology

  • Ticket Granting Ticket (TGT):票证授予票证是一种身份验证票证,用于从 TGS 向域中的特定资源请求服务票证。
  • Key Distribution Center (KDC):密钥分发中心是一种用于发布 TGT 和服务票证的服务,由 Authentication Service 和 Ticket Granting Service 组成。
  • Authentication Service (AS):身份验证服务发出 TGT 以供域中的 TGS 使用,以请求访问其他机器和服务票证。
  • Ticket Granting Service (TGS):票证授予服务获取 TGT 并将票证返回到域上的机器。

  • Service Principal Name (SPN) :服务主体名称是赋予服务实例以将服务实例与域服务帐户相关联的标识符。 Windows 要求服务具有域服务帐户,这就是服务需要 SPN 集的原因。

  • KDC Long Term Secret Key (KDC LT Key):KDC 密钥基于 KRBTGT 服务帐户。它用于加密 TGT 和签署 PAC。
  • Client Long Term Secret Key (Client LT Key) :服务密钥基于服务帐户。它用于加密服务票证的服务部分并签署 PAC。
  • Session Key :发行 TGT 时由 KDC 发行。用户在请求服务票证时将向 KDC 提供会话密钥以及 TGT。
  • Privilege Attribute Certificate (PAC):PAC 拥有用户的所有相关信息,它与 TGT 一起发送到 KDC,由 Target LT Key 和 KDC LT Key 签名,以验证用户。

    AS-REQ w/ Pre-Authentication In Detail

    当用户从 KDC 请求 TGT 时,Kerberos 身份验证中的 AS-REQ 步骤开始。为了验证用户并为用户创建 TGT,KDC 必须遵循这些确切的步骤。
    第一步是用户加密时间戳 NT 哈希并将其发送到 AS。 KDC 尝试使用来自用户的 NT 散列来解密时间戳,如果成功,KDC 将为用户发布 TGT 以及会话密钥。

    Ticket Granting Ticket Contents

    为了了解服务票证是如何创建和验证的,我们需要从票证的来源开始; TGT 由用户提供给 KDC,作为回报,KDC 验证 TGT 并返回服务票证。

获得的票据内容

image.png

Service Ticket Contents

要了解 Kerberos 身份验证的工作原理,您首先需要了解这些票证包含什么以及如何验证它们。服务票据包含两部分:服务提供部分和用户提供部分。我会把它分解成每个部分包含的内容。

服务部分:用户详细信息、会话密钥、使用服务帐户 NTLM 哈希加密票证。
用户部分:有效性时间戳、会话密钥、使用 TGT 会话密钥加密。
image.png

Kerberos Authentication Overview

image.png
AS-REQ - 1.) 客户端请求身份验证票证或票证授予票证 (TGT)。
AS-REP - 2.) 密钥分发中心验证客户端并发回加密的 TGT。
TGS-REQ - 3.) 客户端将加密的 TGT 与客户端想要访问的服务的服务主体名称 (SPN) 一起发送到票证授予服务器 (TGS)。
TGS-REP - 4.) 密钥分发中心 (KDC) 验证用户的 TGT 以及用户有权访问服务,然后向客户端发送服务的有效会话密钥。
AP-REQ - 5.) 客户端请求服务并发送有效的会话密钥以证明用户具有访问权限。
AP-REP - 6.) 服务授予访问权限

Kerberos Tickets Overview

您将看到的主要票证是授予票证的票证,这些票证可以以各种形式出现,例如 Rubeus 的 .kirbi 和 Impacket 的.ccache。您将看到的主要票是 .kirbi 票。
票证通常采用 base64 编码,可用于各种攻击。授予票证的票证仅与 KDC 一起使用以获取服务票证。
将 TGT 提供给服务器后,服务器将获取用户详细信息、会话密钥,然后使用服务帐户 NTLM 哈希加密票证。然后,您的 TGT 会给出加密的时间戳、会话密钥和加密的 TGT。然后,KDC 将对 TGT 进行身份验证并返回所请求服务的服务票证。
普通的 TGT 仅适用于与其连接的给定服务帐户,但是 KRBTGT 允许您获取所需的任何服务票证,从而允许您访问所需域上的任何内容。

Attack Privilege Requirements

  • Kerbrute Enumeration—无需域访问
  • Pass the Ticket ————以用户身份访问所需的域
  • Kerberoasting————-以任何需要的用户身份访问
  • AS-REP Roasting——-以任何需要的用户身份访问
  • Golden Ticket ———需要完整的域妥协(域管理员)
  • Silver Ticket——-需要服务哈希
  • Skeleton Key——-需要完整的域妥协(域管理员)

    Kerbrute 枚举-ASREQ

    Kerbrute 是一种流行的枚举工具,用于通过滥用 Kerberos 预身份验证来暴力破解和枚举有效的活动目录用户。

Abusing Pre-Authentication Overview

通过强制 Kerberos 预身份验证,您不会触发帐户登录失败事件,这可能会向蓝队抛出红旗。当通过 Kerberos 进行暴力破解时,您可以通过仅向 KDC 发送单个 UDP 帧来进行暴力破解,从而允许您从单词列表中枚举域上的用户。

使用用户字典从域控制器中暴力破解用户帐户
image.png

Rubeus 暴力破解票据

Rubeus 是攻击 Kerberos 的强大工具。 Rubeus 是对 kekeo 工具的改编,由著名的活动目录专家 HarmJ0y 开发。
Rubeus 具有多种攻击和功能,使其成为攻击 Kerberos 的通用工具。许多工具和攻击中的一部分包括

  • overpass the hash
  • ticket requests and renewals
  • ticket management
  • ticket extraction
  • harvesting
  • pass the ticket
  • AS-REP Roasting
  • Kerberoasting

该工具有太多的攻击和功能,我无法涵盖所有这些,因此我将仅介绍我认为对于了解如何攻击 Kerberos 最重要的那些,但是我鼓励您研究和了解更多关于 Rubeus 及其整体的信息这里有许多攻击和功能 - https://github.com/GhostPack/Rubeus

Harvesting Tickets w/ Rubeus

Harvesting 收集正在传输到 KDC 的票证并将其保存以用于其他攻击,例如票证传递攻击。
Rubeus.exe harvest /interval:30 该命令告诉 Rubeus 每 30 秒收获一次 TGT

image.png

Brute-Forcing / Password-Spraying w/ Rubeus

Rubeus 既可以暴力破解密码,也可以破解密码喷射用户帐户。当暴力破解密码时,您使用单个用户帐户和密码单词表来查看哪个密码适用于给定的用户帐户。在密码喷射中,您提供一个密码,例如 Password1,然后对域中所有找到的用户帐户进行“喷射”,以找出可能拥有该密码的用户帐户。

这种攻击将获取一个给定的基于 Kerberos 的密码,并将其喷洒到所有找到的用户上,并给出一个 .kirbi 票证。此票证是一个 TGT,可用于从 KDC 获取服务票证,也可用于通过票证攻击等攻击。

在使用 Rubeus 进行密码喷洒之前,您需要将域控制器域名添加到 windows 主机文件中。您可以使用 echo 命令将 IP 和域名添加到机器中的 hosts 文件中:
echo 10.10.124.92 CONTROLLER.local >> C:\Windows\System32\drivers\etc\hosts

Rubeus.exe brute /password:Password1 /noticket 这将采用给定的密码并将其“喷洒”到所有找到的用户上,然后为该用户提供 .kirbi TGT
image.png
请注意您如何使用此攻击,因为它可能会根据帐户锁定策略将您锁定在网络之外。

使用rubeus和impacket Kerberoasting

Kerberoasting w/ Rubeus

介绍最流行的 Kerberos 攻击之一——Kerberoasting。 Kerberoasting 允许用户为具有已注册 SPN 的任何服务请求服务票证,然后使用该票证来破解服务密码。
如果服务有注册的 SPN,那么它可以是 Kerberoastable,但是攻击的成功取决于密码的强度、是否可跟踪以及破解服务帐户的权限。

要枚举 Kerberoastable 帐户,我建议使用像 BloodHound 这样的工具来查找所有 Kerberoastable 帐户,它可以让您查看如果他们是域管理员可以使用 kerberoast 的帐户类型,以及他们与域的其余部分的连接类型。这有点超出了这个房间的范围,但它是寻找目标客户的好工具。

为了执行攻击,我们将同时使用 Rubeus 和 Impacket,以便您了解用于 Kerberoasting 的各种工具。还有其他工具,例如 kekeo 和 Invoke-Kerberoast,但我会让您自己研究这些工具。

  1. Rubeus.exe kerberoast //这将转储任何 kerberoastable 用户的 Kerberos 哈希
  2. 将哈希复制到攻击者机器上并将其放入 .txt 文件中,以便我们可以使用 hashcat 破解它
  3. hashcat -m 13100 -a 0 hash.txt Pass.txt //破解hash

image.png

image.png

impacket

这将转储它可以在目标域上找到的所有 kerberosable 帐户的 Kerberos 哈希,就像 Rubeus 一样;但是,这不必在目标机器上,可以远程完成。

  1. sudo python3 GetUserSPNs.py controller.local/Machine1:Password1 -dc-ip 10.10.124.92 -request
  2. hashcat -m 13100 -a 0 hash.txt Pass.txt

image.png

使用Rubeus AS-REP Roasting

与 Kerberoasting 非常相似,AS-REP Roasting 会转储禁用 Kerberos 预身份验证的用户帐户的 krbasrep5 哈希值。与 Kerberoasting 不同,这些用户不必是服务帐户,能够 AS-REP roasting用户的唯一要求是用户必须禁用预身份验证。
继续使用 Rubeus,就像我们使用 kerberoasting 和收获一样,因为 Rubeus 有一个非常简单且易于理解的命令来 AS-REP 烘烤和攻击禁用 Kerberos 预身份验证的用户。从 Rubeus 转储散列后,我们将使用 hashcat 来破解 krbasrep5 散列
这里还有其他用于 AS-REP Roasting 的工具,例如 kekeo 和 Impacket 的 GetNPUsers.py。 Rubeus 更易于使用,因为它会自动找到 AS-REP Roastable 用户,而使用 GetNPUsers 您必须事先枚举用户并知道哪些用户可能是 AS-REP Roastable。

AS-REP Roasting Overview

在预身份验证期间,用户哈希将用于加密域控制器将尝试解密的时间戳,以验证正在使用正确的哈希并且没有重播先前的请求。
在验证时间戳之后,KDC 将为用户发出一个 TGT。如果禁用预身份验证,您可以为任何用户请求任何身份验证数据,并且 KDC 将返回一个可以离线破解的加密 TGT,因为 KDC 跳过了验证用户是否真的是他们所说的那个人的步骤。

Dumping KRBASREP5 Hashes w/ Rubeus

  1. Rubeus.exe asreproast //这将运行 AS-REP 烤命令寻找易受攻击的用户,然后转储发现的易受攻击的用户哈希。

image.png

Crack those Hashes w/ hashcat

  • 将目标机器上的哈希值传输到攻击者机器上,并将哈希值放入 txt 文件中
  • 在 $krb5asrep$ 之后插入 23$,这样第一行就是 $krb5asrep$23$User…..
  • 爆破密码

    1. hashcat -m 18200 hash.txt Pass.txt

    image.png
    有一个强大的密码策略。使用强密码,哈希将需要更长的时间才能破解,从而降低这种攻击的效率
    除非必要,否则不要关闭 Kerberos 预身份验证,除了保持预身份验证打开之外,几乎没有其他方法可以完全缓解这种攻击。

    Pass the Ticket w/ mimikatz

    Mimikatz 是一个非常流行且功能强大的后期利用工具,最常用于在活动目录网络中转储用户凭据,但也可以使用 mimikatz 从 LSASS 内存中转储 TGT
    这只是对通过票证攻击如何工作的概述,因为 THM 目前不支持网络,但我挑战你在自己的网络上配置它。
    您可以在给定的机器上运行此攻击,但是由于域控制器的设置方式,您将从域管理员升级为域管理员。

    Pass the Ticket Overview

    通过从机器的 LSASS 内存中转储 TGT 来传递票证。本地安全机hook系统服务 (LSASS) 是一个内存进程,可将凭据存储在活动目录服务器上,并且可以将 Kerberos 票证与其他凭据类型一起存储,以充当网守并接受或拒绝提供的凭据。

您可以像转储哈希一样从 LSASS 内存中转储 Kerberos 票证。
当您使用 mimikatz 转储票证时,它会给我们一个 .kirbi 票证
如果域管理员票证在 LSASS 内存中,它可用于获取域管理员。
如果周围存在不安全的域服务帐户票证,则此攻击非常适合特权升级和横向移动。

如果您转储域管理员的票证,然后使用 mimikatz PTT 攻击冒充该票证,允许您充当该域管理员,则该攻击允许您升级为域管理员。
您可以认为通过票证攻击就像重用现有票证并没有创建或销毁任何票证,这里只是重用域中另一个用户的现有票证并模拟该票证。
image.png

Prepare Mimikatz & Dump Tickets

您需要以管理员身份运行命令提示符:使用与进入机器时相同的凭据。如果您没有提升的命令提示符,mimikatz 将无法正常工作。

  1. mimikatz.exe - 运行 mimikatz
  2. privilege::debug //如果没有,请确保输出 [output '20' OK],这意味着您没有正确运行 mimikatz 的管理员权限
  1. sekurlsa::tickets /export

这会将所有 .kirbi 票证导出到您当前所在的目录中
在这一步,您还可以使用我们之前收集的来自 Rubeus 的 base 64 编码票证
image.png
image.png

在寻找要模拟的票证时,我建议从 krbtgt 中寻找管理员票证,就像上面以红色标出的票证一样。

Pass the Ticket w/ Mimikatz

现在我们已经准备好票证,我们现在可以执行通过票证攻击以获得域管理员权限。

  1. 1.) kerberos::ptt <ticket> - mimikatz 中使用您之前获得的票证运行此命令。它将缓存并模拟给定的票证

image.png

  1. 2.) klist - 这里只是通过列出我们缓存的票证来验证我们是否成功模拟了票证。在接下来的攻击中,我们不会使用 mimikatz

您现在已经模拟了票证,赋予您与您所模拟的 TGT 相同的权利。为了验证这一点,我们可以查看管理员共享。

Pass the Ticket Mitigation

让我们谈谈蓝队以及如何减轻这些类型的攻击。

不要让您的域管理员登录域控制器以外的任何东西——这很简单,但是许多域管理员仍然登录到低级计算机上,留下票证,我们可以用来攻击和横向移动。

Pass The Hash with mimikatz

Golden /Silver Ticket Attack with mimikatz

Mimikatz 是一种非常流行且功能强大的后期利用工具,最常用于将用户凭据转储到活动目录网络中,但也可以使用 mimikatz 来创建银票
银票有时比金票更适合用于横移,因为它更加谨慎。如果隐身和不被发现很重要,那么银票可能是比金票更好的选择,但是创建一个的方法是完全相同的。两张票之间的主要区别在于,银票仅限于目标服务,而金票可以访问任何 Kerberos 服务。
银票的特定使用场景是您想要访问域的 SQL 服务器,但您当前的受感染用户无权访问该服务器。您可以通过对该服务进行 kerberoasting 来找到一个可访问的服务帐户以立足,然后您可以转储服务哈希,然后模拟他们的 TGT,以便从 KDC 请求 SQL 服务的服务票证,从而允许您访问域的 SQL服务器。

KRBTGT Overview

为了充分了解这些攻击的工作原理,您需要了解 KRBTGT 和 TGT 之间的区别。
KRBTGT 是 KDC 的服务帐户,这是向客户发放所有票证的密钥分发中心。
如果您冒充此帐户并使用 KRBTGT 创建一个黄金票证,您就可以为您想要的任何东西创建一个服务票证。 TGT 是 KDC 颁发的服务帐户的票证,并且只能访问 TGT 来自的服务,就像 SQLService 票证一样。

Golden/Silver Ticket Attack Overview

黄金票据攻击通过转储域上任何用户的票据授予票据来工作,这最好是域管理员

  • 对于黄金票据,您将转储 krbtgt 票据,
  • 对于白银票据,您将转储任何服务或域管理员票。

这将为您提供服务/域管理员帐户的 SID 或安全标识符,该标识符是每个用户帐户的唯一标识符,以及 NTLM 哈希。然后,您在 mimikatz 黄金票据攻击中使用这些详细信息,以创建一个模拟给定服务帐户信息的 TGT。

Dump the krbtgt hash

  1. privilege::debug - ensure this outputs [privilege '20' ok]

image.png

  1. lsadump::lsa /inject /name:krbtgt
  • 这将转储hash以及创建金票所需的安全标识符。
  • 要创建银票,您需要更改 /name: 以转储域管理员帐户或服务帐户(如 SQLService 帐户)的哈希值。

    Create a Golden/Silver Ticket

    1. Kerberos::golden /user:Administrator /domain:controller.local /sid: /krbtgt: /id:
    这是创建金票创建银票的命令,只需将服务 NTLM 哈希放入 krbtgt 槽,将服务帐户的 sid 放入 sid,并将 id 更改为 1103。
    我将向您展示创建金票的演示,您可以自己创建银票。
    image.png

Use the Golden/Silver Ticket to access other machines

  1. misc::cmd

这将使用 mimikatz 中的给定票证打开一个新的提升命令提示符。

image.png
2.) 访问您想要的机器,您可以访问的内容取决于您决定从中取票的用户的权限,但是如果您从 krbtgt 取票,则您可以访问整个网络,因此称为黄金票;但是,银票只能访问用户可以访问的那些,如果它是域管理员,它几乎可以访问整个网络,但是它比金票稍微低一些。

Kerberos Backdoors with mimikatz

除了使用金票和银票保持访问权限外,mimikatz 在攻击 Kerberos 时还有另一个技巧。与金票和银票攻击不同,Kerberos 后门更加微妙,因为它的行为类似于 rootkit,将自身植入域林的内存中,允许自己使用主密码访问任何机器。
Kerberos 后门通过植入一个滥用 AS-REQ 验证加密时间戳的方式的万能密钥来工作。万能密钥只能使用 Kerberos RC4 加密。
mimikatz 万能密钥的默认哈希值是 60BA4FCADC466C7A033C178194C03DF6,这使得密码 -“mimikatz”
这只是一个概述部分,不需要您在机器上做任何事情,但是我鼓励您继续自己并添加其他机器并使用带有 mimikatz 的万能键进行测试。

Skeleton Key Overview

如上所述,万能密钥通过滥用 AS-REQ 加密时间戳来工作,时间戳是使用用户 NT 哈希加密的。然后域控制器尝试使用用户 NT 哈希解密此时间戳,一旦植入了万能密钥,域控制器就会尝试使用用户 NT 哈希和万能密钥 NT 哈希来解密时间戳,从而允许您访问域林。

Preparing Mimikatz

  1. privilege::debug

Installing the Skeleton Key w/ mimikatz

  1. misc::skeleton

是的!就是这样,但不要低估这个小命令它非常强大
image.png

Accessing the forest

默认凭据为:“mimikatz”
例如:

  1. net use c:\\DOMAIN-CONTROLLER\admin$ /user:Administrator mimikatz

现在无需管理员密码即可访问共享
例如:

  1. dir \\Desktop-1\c$ /user:Machine1 mimikatz

在不知道哪些用户可以访问 Desktop-1 的情况下访问 Desktop-1 的目录
万能钥匙不会自行持久化,因为它在内存中运行,它可以使用其他工具和技术编写脚本或持久化,

Resources