微软试图为域用户提供更大的灵活性,使资源的所有者能够配置哪些帐户是可信的,并允许委派给他们。这可以通过修改用于控制目标资源访问的属性“ms-DS-AllowedToActOnBehalfOfOtherIdentity”来实现的。具体而言,如果计算机帐户等资源设置了此属性,则允许帐户代表计算机帐户执行操作。为了能够修改此属性,帐户需要具备该对象的写入权限,而默认情况下该权限是没有的。但是,如果可以触发 SYSTEM 帐户并将身份验证中继到 Active Directory,则帐户可能会获得委派权限,从而充当提升的用户。
通过基于资源的约束委派提升特权并不是一个新话题,Elad Shamir 和 Will Schroeder 过去曾对此进行过讨论。此攻击向量遵循一系列步骤并依赖于用户服务 (S4U) Kerberos 扩展,该扩展使服务(例如 CIFS)能够代表另一个用户请求和获取服务票证。通过基于资源的约束委派提权的方法包括以下步骤:
1.发现计算机账户配额;
2.启用 WebClient 服务;
3.创建计算机帐户;
4.NTLM中继;
5.哈希计算;
6.请求服务票;
7.票证转换;
8.通过 Kerberos 身份验证访问;
下图说明了基于资源的约束委派的步骤:
寻找计算机账户配额
默认情况下,域中的用户最多可以创建 10 个计算机帐户。属性“ms-DS-MachineAccountQuota”的值定义了可以创建多少个计算机帐户。从 Active Directory 的角度来看,这可以通过查看域属性中的属性编辑器来观察到这一点。
计算机账户配额
但是,可以通过在红队操作期间查询 Active Directory 对象来检索上述值。 SharpView 相当于用 C# 开发的 PowerView,因此可以直接从植入程序中使用。执行下面的命令将枚举所有域对象。
SharpView——域对象
属性“ms-ds-machineaccountquota”的值将显示在输出中。
SharpView——计算机账户配额
另一种方法是使用 StandIn,它只能查询感兴趣的域对象。
StandIn——计算机账户配额对象
“ms-ds-machineaccountquota”的值将显示在控制台中。
StandIn——计算机账户配额
启用 WebClient 服务
在Windows 10、Windows 11等较新版本操作系统中,安装了web客户端服务,但默认未启用。服务的状态可以通过在PowerShell控制台执行以下操作来获得。
WebClient Service – Status
为了使该技术生效,WebDav 服务需要处于运行状态,因为 WebDav 不协商签名,因此将允许来自当前计算机帐户的身份验证中继。标准用户没有权限启用该服务。 James Forshaw 发布了一个概念证明,它通过触发自定义 ETW 事件来解决此问题,该事件将从标准用户的角度启用该服务。
c++代码——启用Web客户端
将代码编译为可执行文件并在目标主机上运行二进制文件以启用该服务。
启用 WebClient 服务
在命令提示符中,可以通过执行以下命令查询服务:
WebClient服务
创建计算机帐户
如上所述,默认情况下域用户最多可以创建 10 个计算机帐户。如果提供凭据,可以使用各种工具从加入域的系统和未加入域的系统中创建计算机帐户。 Ruben Boonen 开发了一个名为 StandIn 的 .NET 活动目录后开发工具包,可以从植入程序中使用它来执行与基于资源的约束委派相关的任务,例如创建计算机帐户。执行以下命令将使用随机密码在域上创建一个新的计算机帐户。
StandIn——创建计算机帐户
Impacket 包含一个 python 脚本,它可以从非域加入系统创建计算机帐户。
Impacket——添加新计算机
另外,这个任务也可以通过PowerShell来执行,因为Kevin Robertson开发的PowerMad模块包含一个可以创建新计算机帐户的功能。
Import-Module .\Powermad.psm1 New-MachineAccount -MachineAccount Pentestlaboratories -Domain purple.lab -DomainController dc.purple.lab
PowerMad——新计算机帐户
如果系统已经针对基于资源的约束委派进行了配置,则可以使用现有的计算机帐户,而不是使用上述方法之一创建新的计算机帐户。 StandIn 的“委派”标志可以显示所有具有基于资源的受限委派权限的帐户,包括具有不受约束和受限委派权限的帐户。
StandIn——发现为基于资源的受限委派配置的帐户
NTLM中继
由于已经创建了一个新的计算机帐户并且 Web 客户端服务正在主机上运行,因此下一步是从 Impacket 配置“ntlmrelayx”以进行委派。一旦捕获了来自合法计算机帐户的身份验证,将被转发到域控制器以通过 LDAP 进行身份验证。由于初始身份验证将通过 HTTP 接收,因此需要在目录中放置图像。伪造的计算机账户“DESKTOP-Pentestlab$”将成为委派权限的目标。
Ntlmrelayx——委派访问
为了强制系统帐户通过网络进行身份验证,NCC 集团开发了接受 WebDav 路径的 Change-Lockscreen。为了使身份验证成功,需要使用主机名而不是 IP 地址,因为 WebDav 客户端会在 Intranet 区域中自动进行身份验证。需要注意的是,WebClient 服务将使用更改锁屏触发器来启用,并且可以避免启用Web 客户端服务的步骤。
身份验证触发器——Change-LockScreen
计算机帐户 (Hive$) 将通过 Kali 实例上的 HTTP 进行身份验证,并将尝试在随机路径上查找图像。在域控制器上中继身份验证后,虚假计算机帐户 (DESKTOP-Pentestlab$) 将获得对 Hive$ 帐户的委派权限。
ntlmrelayx ——基于资源的约束委派
如果使用 rbcd python 脚本提供域凭据,则该攻击也可以从未加入的域系统执行,该脚本可自动执行该过程。
Python 实现——rbcd
与具有委派权限的计算机帐户对应的值将出现在计算机对象 (Hive) 的“msDS-AllowedToActOnBehalfOfOtherIdentify”属性中。
Active Directory——基于资源的约束委派
哈希计算
从密钥传递中心 (KDC) 获取票证的请求需要密码的哈希表示而不是纯文本值。由于计算机帐户的密码是已知的,因此可以使用 Rubeus 的“哈希”操作来计算给定密码的哈希值。
计算哈希——计算机账户
请求服务票证
计算机帐户“DESKTOP-Pentestlab$”具有受约束的委派权限,因此可以使用 Rubeus 代表管理员帐户请求通用 Internet 文件系统 (CIFS) 的服务票证。这是通过使用用户服务 (S4U) Kerberos 扩展来实现的,该扩展能够代表用户请求服务票证。由于将颁发的票证属于管理员帐户,因此可用于通过 Kerberos 进行身份验证,以提升的用户身份访问主机。将为为委派创建的计算机帐户 (DESKTOP-Pentestlab$) 请求初始票证。
TGT 请求——计算机账户
使用“用户服务”操作,将向管理员帐户的当前域控制器的 Kerberos 分发中心 (KDC) 请求票证。
管理员TGS
最后使用 Kerberos 扩展 S4U2proxy 将代表管理员帐户为 CIFS 服务请求票证。应该注意的是,即使请求的票证不会被标记为可转发,它仍然可以用于访问服务。
CIFS 服务票证
上述过程可以通过使用python实用程序“getST”直接从Impacket执行。与Rubeus相比,该工具不需要对计算机帐户密码进行散列,而是需要对纯文本进行哈希处理。可以通过执行以下命令来请求服务票证:
CIFS 票证——getST
票证将在当前工作目录中保存为 .ccache。
转换票证
Rubeus 的最终票证授予票证 (TGT) 是基于 64 编码的。为了用于 Kerberos 身份验证,票证需要采用 .ccache 格式。执行以下命令将解码票证并将输出写入 .kirbi 文件。
Base64 - Kirbi Ticket
Impacket 包含一个 python 实用程序,它可以将具有 .kirbi 扩展名的 Kerberos 票证转换为 .ccache。
票证转换器——从kirbi 到 ccache
“KRB5CCNAME”环境变量应设置为 .ccache 票证的位置,以便在 Kerberos 身份验证期间使用来自缓存的票证。
环境变量——Kerberos 票证
通过 Kerberos 身份验证访问
获取属于管理员帐户的票证意味着它可用于从更高的角度访问目标服务。 来自 Impacket 的“wmiexec”和“psexec”都支持 Kerberos 身份验证,因此可用于以管理员或系统身份访问主机,完成权限提升方案。
Wmiexec——Kerberos 身份验证
执行“psexec”将在目标主机上创建一个服务,它被认为是不安全的。 但是,它可以通过使用“-k”和“-no-pass”标志指定管理员帐户和目标主机来使用 Kerberos 身份验证来执行。
Psexec——Kerberos 身份验证
或者仅使用相同的标志和目标主机。
psexec——Kerberos 身份验证
本文翻译自:https://pentestlab.blog/2021/10/18/resource-based-constrained-delegation/如若转载,请注明原文地址