能否通过LDAP从Active Directory获取密码哈希?含MD4哈希咨询
能否通过LDAP从Active Directory检索MD4(NTLM)密码哈希?
简单直接给结论:不行,标准LDAP接口无法直接读取Active Directory中的MD4(NTLM)密码哈希,哪怕你用高权限账号也做不到。
为什么你的DirSync尝试看不到值?
你提到用AdDirSyncRequest控件能看到ntPwdHistory、unicodePwd这些密码相关属性但没有实际值,这是因为AD把这些属性标记为敏感属性。LDAP协议在设计时就刻意屏蔽了这类属性的返回——不管你有没有权限读取,LDAP都不会把哈希数据返回给你:
unicodePwd属性仅支持写入操作(用来修改用户密码),完全不支持读取;ntPwdHistory虽然存储了用户的历史密码哈希,但同样无法通过LDAP接口获取到实际内容。
那为什么RPC(ms-drsr)可以?
你说的DSInternals PowerShell模块用的是域复制服务(DRS)协议(ms-drsr),这是域控制器之间同步数据的私有RPC通道,和LDAP是完全独立的机制:
- 这个协议是为了让域内的DC同步完整的目录数据设计的,所以允许拥有域管理员权限或者
Replicating Directory Changes All权限的账号请求包含敏感哈希的完整数据; - 这也是为什么通过这个途径能拿到MD4哈希,而LDAP不行的核心原因。
补充说明
如果确实需要获取这些哈希(必须符合合规要求和组织政策),除了DSInternals,还有其他方式:
- 直接在域控制器上用
ntdsutil工具导出NTDS.dit数据库文件,再用专门的工具提取哈希; - 利用备份的NTDS.dit文件进行离线提取。
注意:未经授权获取用户密码哈希属于严重的安全违规行为,可能违反法律法规,请确保操作符合合规要求。
内容的提问来源于stack exchange,提问作者Daniel Schmitz
相关产品推荐
相关产品推荐

