文章总结: 本文详细介绍了dsamain工具将离线AD数据库挂载为LDAP服务进行侦察的方法,攻击者可借此识别高价值账户与安全组,并利用secretsdump.py等工具提取密码哈希。防御建议包括监控dsamain使用、保护高权限组成员资格、加密数据库文件及实施纵深防御策略。 综合评分: 85 文章分类: 渗透测试,红队,内网渗透,安全工具,漏洞分析
Active Directory 安全攻防(八)
原创
寰宇秘阁 寰宇秘阁
寰宇密阁
2026年7月24日 10:00 安徽
在小说阅读器读本章
去阅读
一、dsamain
1.1 工具简介
dsamain 是随 Active Directory 域服务一同安装在域控制器上的内置命令行工具。它的核心功能是:将一个离线的 AD 数据库文件(ntds.dit)以只读 LDAP 接口的形式对外提供访问。
换句话说,dsamain 可以把一个静态的数据库快照”复活”为一个可查询的目录服务实例,管理员或攻击者可以使用标准的 AD 管理工具(如 Active Directory Users and Computers、LDP.exe、ADExplorer 等)连接到这个 LDAP 接口,像浏览正常运行的 AD 一样浏览数据库中的所有逻辑内容。
1.2 设计初衷与滥用场景
设计初衷:微软提供 dsamain 的目的是让管理员能够方便地查看 AD 数据库快照的历史状态,用于:
- 比较不同时间点的 AD 对象变化
- 在执行权威还原前确认需要恢复的对象
- 审计历史配置
滥用场景:攻击者在通过 ntdsutil 快照或其他方式获取了 ntds.dit 文件后,可以使用 dsamain 将其挂载为 LDAP 服务,从而系统性地浏览数据库中的全部逻辑信息,包括:
- 所有用户账户及其属性
- 所有安全组及其成员关系
- 组织单元(OU)结构
- 计算机账户
- 信任关系配置
- GPO 链接信息
1.3 基本使用方法
dsamain 的典型启动命令如下:
dsamain -dbpath "C:\temp\ntds.dit" -ldapPort 10389
| 参数 | 说明 |
| — | — |
| -dbpath | 指定离线 AD 数据库文件的路径 |
| -ldapPort | 指定 LDAP 监听端口(需避开已占用的 389 端口) |
启动成功后,dsamain 会在指定端口上开启一个只读的 LDAP 服务。此时可以使用任何支持 LDAP 的工具连接到 localhost:10389 进行查询。
使用 AD 管理工具连接:
打开 Active Directory Users and Computers,右键点击根节点选择”更改域控制器”,手动输入 localhost:10389,即可像浏览正常 AD 一样浏览快照中的内容。
使用 LDP.exe 连接:
连接 → 连接到服务器:localhost,端口:10389
1.4 只读特性
需要强调的是,dsamain 提供的是只读访问。通过这个接口无法修改数据库中的任何内容。但这并不意味着它对攻击者没有价值——恰恰相反,侦察(Reconnaissance) 是攻击链中至关重要的一环。
二、从 dsamain 中寻找高价值目标
通过 dsamain 浏览离线数据库,攻击者的核心目标是识别高价值账户和安全组,为后续的凭据提取和权限提升确定优先目标。
2.1 关键安全组
从管理员的角度来看,以下安全组是最需要保护的;从攻击者的角度来看,这些组的成员是最有价值的攻击目标:
| 安全组 | 风险说明 | | — | — | | Administrators | 域内置管理员组,对域控制器拥有完全控制权限 | | Domain Admins | 域管理员组,对域内所有对象拥有广泛的管理权限 | | Enterprise Admins | 企业管理员组,在整个林范围内拥有最高权限 | | Backup Operators | 备份操作员组,成员可以备份和还原文件,包括 AD 数据库 | | 域控制器计算机账户 | DC 的机器账户本身拥有复制 AD 数据的权限 |
2.2 为什么 Backup Operators 特别值得关注
在上述安全组中,Backup Operators 往往被低估,但它实际上是一个极其危险的组。其成员拥有以下关键能力:
- 备份文件的权限:可以读取系统上的任何文件,包括受 ACL 保护的文件(如
ntds.dit、SYSTEM注册表 hive) - 还原文件的权限:可以将修改过的文件写回系统
这意味着 Backup Operators 的成员理论上可以:
- 备份(读取)AD 数据库文件
- 在离线环境中修改数据库内容(例如提升某个账户的权限)
- 将修改后的文件还原(写回)到域控制器
虽然在实际操作中,直接替换正在运行的 ntds.dit 文件会受到文件锁定的限制,但 Backup Operators 的备份权限本身就足以让攻击者获取数据库副本。
2.3 所有权接管能力
上述高权限组的成员还拥有一个关键能力:接管 AD 数据库中对象的所有权(Take Ownership)。
在 AD 的安全模型中,对象的所有者可以修改该对象的 ACL(访问控制列表),从而授予自己或其他账户任意权限。这意味着:
- 即使某个对象的 ACL 明确拒绝了管理员的访问
- 管理员仍然可以先接管所有权,再修改 ACL,最终获得完全控制权
这一机制在正常管理中是必要的安全保障,但在攻击场景中则成为了权限提升的重要手段。
2.4 侦察工作流
攻击者使用 dsamain 进行侦察的典型工作流如下:
1. 通过 ntdsutil 快照获取 ntds.dit
↓
2. 使用 dsamain 挂载为 LDAP 服务
↓
3. 枚举所有高权限安全组的成员
↓
4. 识别服务账户、特权账户
↓
5. 确定攻击优先级
↓
6. 使用专用工具提取目标账户的密码哈希
三、从离线数据库提取密码哈希
dsamain 提供的 LDAP 接口虽然可以浏览逻辑信息,但无法直接读取密码哈希(密码属性在 LDAP 查询中不可见)。要提取密码哈希,需要使用专门的离线数据库解析工具。
3.1 常用工具
以下是两个经典的开源工具,均可在 Kali Linux 等渗透测试平台上使用:
NTDSXtract
- 项目地址:https://github.com/csababarta/ntdsxtract
- 功能:从 AD 数据库中提取用户账户信息和密码哈希
- 工作原理:直接解析 ESE 数据库格式,读取存储在
datatable中的账户数据
LibEseDB
- 项目地址:https://github.com/libyal/libesedb
- 功能:通用的 ESE(Extensible Storage Engine)数据库解析库
- 工作原理:提供底层的 ESE 数据库读取能力,可以导出数据库中的表和记录
3.2 典型提取流程
使用这些工具提取密码哈希的一般流程如下:
步骤 1:使用 libesedb 导出数据库表
esedbexport ntds.dit
步骤 2:使用 NTDSXtract 解析导出的数据
dsusers.py <datatable> <link_table> --syshive SYSTEM --passwordhashes --lmoutfile LM.out --ntoutfile NT.out
步骤 3:获得所有账户的 NTLM 哈希
3.3 其他主流工具
除了上述两个工具外,安全社区还开发了更多现代化的替代方案:
| 工具 | 说明 |
| — | — |
| Impacket secretsdump.py | Python 工具,可直接从 ntds.dit + SYSTEM 提取哈希,使用最为广泛 |
| DSInternals | PowerShell 模块,提供 Get-ADDBAccount 等 cmdlet,功能全面 |
| mimikatz | 支持 lsadump::dcshadow 等多种 AD 攻击模式 |
以 secretsdump.py 为例:
secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL
该命令会输出所有账户的用户名和 NTLM 哈希,格式如下:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy:::
四、防御建议
4.1 监控 dsamain 的使用
dsamain.exe 在正常运维中使用频率极低。任何 dsamain 进程的启动都应该触发安全告警:
监控规则:
- 进程名称:dsamain.exe
- 关注参数:-dbpath、-ldapPort
- 告警级别:高
4.2 保护高权限组成员资格
- 定期审计 Administrators、Domain Admins、Enterprise Admins、Backup Operators 的成员
- 遵循最小权限原则,避免将不必要的账户加入高权限组
- 特别关注 Backup Operators 组——许多组织忽视了这个组的风险
4.3 保护数据库文件和备份
| 防护层面 | 具体措施 | | — | — | | 磁盘加密 | 对域控制器启用 BitLocker | | 备份加密 | 确保 AD 备份文件本身经过加密存储 | | 备份访问控制 | 严格限制谁可以访问备份存储位置 | | 快照清理 | 定期检查并删除不必要的 VSS 快照 |
4.4 纵深防御思维
保护 AD 数据库需要多层防御:
第一层:防止攻击者获取域控制器的管理权限
第二层:即使获取了管理权限,通过监控检测异常操作
第三层:即使数据库被提取,通过强密码策略增加破解难度
第四层:即使哈希被提取,通过定期轮换密码缩短有效窗口
五、总结
dsamain 工具将离线的 AD 数据库文件转化为可通过标准 LDAP 工具浏览的只读目录服务,使攻击者能够系统性地识别高价值目标账户和安全组。结合 NTDSXtract、LibEseDB、secretsdump.py 等哈希提取工具,攻击者可以从离线数据库中获取所有域账户的密码哈希。
dsamain 和各类哈希提取工具的存在提醒我们,AD 数据库一旦落入攻击者手中,其中的所有信息——从组织结构到密码哈希——都将完全暴露。保护 AD 数据库文件本身,与保护 AD 的逻辑权限配置同等重要。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:寰宇密阁 寰宇秘阁 寰宇秘阁《Active Directory 安全攻防(八)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论