最近,我在一次活动中发现,我拥有一个可以修改 Active Directory 组策略对象 (GPO) 的帐户的纯文本凭据。事实证明,这是一个有趣的挑战,因为即使通过吸管进行黑客攻击(在本例中仅限 SOCKS),组策略文件和属性也可以被我们随意修改。
目标:使用组策略将文件从我们的攻击机器拉到域控制器。注意:如果您需要更简单的操作,例如修改注册表项,则可以使用Microsoft 提供的 GPO cmdlet。
一些先决条件:
-
具有 GPO 修改权限的用户的纯文本凭据(在我们的例子中是域控制器的 GPO)
-
受害者网络的 SOCKS 代理
-
加载了 PowerView cmdlet 的 Windows 攻击虚拟机(如果目标域控制器上的端口 9389(ADWS)处于打开状态,则还可以使用 Active Directory cmdlet)
概述
注意:您不需要对 GPO 具有完全控制权限 — 您只需修改对象本身。这是我在测试环境中通常看到的情况。在我们的例子中,我们有lab.comelevated1的纯文本凭据。
GPMC 中的 GPO 权限
GPO 本身作为文件存储在 \domain.comSYSVOLdomainPolicies 中。文件夹本身由创建策略对象时分配的 GUID 表示。有趣的是,在组策略管理控制台 (GPMC) 中被分配权限的用户和组也会将这些权限传递给文件夹和文件。
GPO NTFS 权限
我知道您可能倾向于认为您只需修改策略文件本身,然后让 gpupdate 处理其余部分。在某些情况下,这样做可能有效,但在我们的场景中,我们需要运行组策略客户端扩展,特别是文件扩展。有两种类型的扩展:客户端扩展 (CSE) 和管理工具扩展,它们插入 GPMC 工具本身,以便您可以编辑策略。让事情变得更加复杂的是,GPO 扩展还具有唯一的 GUID,其中最常见的由 Microsoft在此处列出。
每个 GPO 在 Active Directory 中都作为 CN=Policies、CN=System、DC=domain、DC=com 中的groupPolicyContainer类对象列出。
Adsiedit.msc 中的 groupPolicyContainer 对象
这些对象中的每一个都具有详细说明 GPO 本身信息的属性。指定策略需要哪些 CSE 的属性是gPCMachineExtensionNames。
gPCMachineExtensionName 属性
就我而言,我的默认域控制器‘s GPO 的gPCMachineExtensionNames值为
[{827D319E-6EAC-11D2-A4EA-00C04F79F83A}{803E14A0-B4FB-11D0-A0D0-00A0C90F574B}]
请注意此处的格式:[{GUID1}{GUID2}]。这表示单个 GPO 扩展对,实际上是 [{客户端扩展}{管理工具扩展}]。并非所有策略都应用了这两个扩展。某些策略不会应用任何扩展,因此您可能会看到此属性的 NULL 值。有关扩展对的更多信息,请参阅Microsoft 的这篇优秀文章。此外,我链接到的另一篇文章中并未列出所有扩展。但是,它们存储在 DC(以及可能安装了 GPMC 的系统)的注册表中,位于 HKLMSoftwareMicrosoftWindows NTCurrentVersionWinlogonGPExtensions 下。
有关扩展对和滥用 GPO 的一些更有用的参考:
-
Andy 的《红队成员关于 GPO 和 OU 滥用的指南》非常棒 - https://wald0.com/?p=179
-
Sean Metcalf 关于 Sneaky AD Persistence 的精彩文章:https://adsecurity.org/?p =2716
要了解所需 GPO 修改需要哪些扩展名对,最好的方法是通过 ADSIEdit 或 PowerShell 进行测试,然后检索增量。在我们的例子中,我们希望使用“计算机首选项”>“Windows 设置”>“文件扩展名”从我们的攻击系统中检索文件。
文件客户端扩展
经过测试,这有相应的扩展对:[{00000000-0000-0000-0000-000000000000}{3BAE7E51-E3F4-41D0-853D-9BB9FD47605F}][{7150F9BF-48AD-4DA4-A49C-29EF4A8369BA}{3BAE7E51-E3F4- 4 1D0-853D-9BB9FD47605F}]。
我们的目标是将所需的扩展对附加到 gPCMachineExtensionNames 中列出的任何现有对上。
重要提示:您必须仔细记录所有现有扩展对以及正确的新扩展对,以便正确更新。如果您向 GPO 添加错误的扩展对(例如,如果您的 GUID 有拼写错误(例如,GUID 有拼写错误),则会破坏目标上的组策略更新,并且系统日志中会出现神秘的错误。
组策略处理错误
现在我们了解了扩展对,那么对象本身的权限呢?幸运的是,Active Directory 可以满足您的需求。当您通过 GPMC 使用新用户编辑权限更新 GPO 时,这些权限也会传递给对象和属性。:-)
属性权限
攻击
对于 SOCKS 管道,我在 Windows 主机上使用Proxifier。我喜欢 Proxifier,因为它允许我代理整个应用程序(例如 PowerShell),而无需记住使用诸如代理链之类的东西。就我而言,我通过 SOCKS 端口 10000 上的信标代理 powershell.exe 进程。
Proxifier 规则
支线任务:在上面的屏幕截图中,如果仔细观察,您会看到我已经代理了Azure Data Studio,这是一个很棒的 GUI,可用于直接与目标网络和 Azure 云数据库上的 MSSQL 交互。如果要代理 Azure Data Studio,则必须代理以下二进制文件:
azuredatastudio.exe;MicrosoftSqlToolsServiceLayer.exe;SqlToolsResourceProviderService.exe;MicrosoftSqlToolsCredentials.exe
使用 Test-NetConnection 确保你可以通过代理连接到目标域控制器。如果可以,那么一切就绪了。现在我们还有三步:
-
将正确的文件添加到 GPO 文件夹。
-
增加 GPT.ini 中的版本号
-
使用任何必要的扩展对更新目标策略的 gPCMachineExtensionNames 属性。
我再怎么强调也不为过——首先在实验室中进行测试。如果您不知道自己在做什么,您可能会破坏大量系统上的组策略处理。如果您没有 Active Directory 实验室,请建立一个。
1.更新 GPO 文件夹
为了执行特定的攻击,我们需要在域控制器上的 GPO 文件夹中复制以下文件夹结构。
- GUID Folder
---- MACHINE
-------- Preferences
------------ Files
---------------- Files.xml
Files.xml 路径
如果文件夹不存在,请创建它们。我在屏幕截图中显示的是 Windows 资源管理器,但通过 SOCKS,我将使用 Impacket 的 smbclient 之类的东西。File.xml 文件使用特定格式。请注意我的攻击机器的 UNC 路径。我没有研究前两个 clsid GUID,但从我观察到的情况来看,它们在各个安装中都是相同的。uid GUID 似乎是随机的。
文件.xml
2.增加版本
在根 GPO GUID 文件夹中,有一个文件 GPT.ini,其中包含Version属性。只需增加此文件,gpupdate 就会知道存在差异并应用新设置。
增加 GPT.ini 版本
到目前为止,如果您在这里停下来并出错了,不会有什么问题(据我所知)。组策略将正常更新,但不会对您的 File.xml 执行任何操作,因为我们尚未指定正确的扩展名对。
3.更新扩展对
就我而言,我使用 PowerView 用正确的值更新扩展对。我们首先进行一些侦察和记录。
PowerView GPO 侦察
按列出的命令顺序:
-
使用 Get-Credential 指定域凭据。
-
使用 Get-ADObject(PowerView 版本)检索 GPO 对象。
-
将对象过滤为名称中带有“控制器”的对象(例如,默认域控制器对象)。
-
注意:复制现有的扩展对值!!稍后您将需要它们来恢复您的更改,如果您搞砸了什么的话。
现在到了有趣的部分。我知道要使用的正确扩展对,因此我将使用 Set-ADObject 来更新正确的属性。
设置扩展值
再次按照列出的命令顺序:
-
通过 GUID 指定目标 GPO。这是我们唯一要修改的。
-
在现有的扩展对之前添加正确的扩展对。
-
使用 Set-ADObject -Replace 用我们的新值更新 gPCMachineExtensionNames 属性。
-
再次检索对象并确保一切正常。如果不正常,请使用 Set-ADObject 替换 $dcgpomain 对象中的正确值。
…. 耐心等待….. gpupdate 运行....
如果一切顺利,您应该会看到来自 DC 的身份验证命中。
SMB 文件检索
这只是 GPO 修改可以做什么的一个例子。没有理由你不能复制二进制文件然后执行它。我将把它留给读者作为练习。:-)
防御措施
您可以采取预防和侦查措施来阻止此类攻击。
在预防方面,最好的策略是确保您定期审核与 GPO 相关的权限。这可能很繁琐,尤其是在考虑嵌套组等因素时,但BloodHound等工具可以提供可视化帮助,帮助您了解谁可以在您的环境中做什么。
对于检测,您可以在计算机配置 > 策略 > Windows 设置 > 安全设置 > 高级审核策略配置 > 审核策略 > DS 访问中启用 GPO 设置审核目录服务更改。当修改 GPO 策略时,这将在域控制器上的安全事件日志中为您提供事件 ID 5136,包括
gPCMachineExtensionNames 属性。一个好的防御项目可能包括映射出很少使用的扩展对,这可能导致运行组策略的主机本地执行代码。
https://trustedsec.com/blog/weaponizing-group-policy-objects-access
原文始发于微信公众号(Ots安全):利用组策略对象访问进行攻击
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论