将Active Directory密码哈希设置为SHA1值?

时间:2010-07-22 02:09:11

标签: hash active-directory passwords

我正在将用户从外部系统同步到我们的系统中。我需要在Active Directory中设置用户密码。

我只提供了外部用户密码的SHA1,setPassword将对我输入的内容进行哈希处理。

  • 是否将用户unicodePwd设置为实际哈希字段?
    • 如果是这样,我可以将其设置为提供的哈希值吗?
    • 如果没有,我如何/可以设置Active-Directory存储的哈希值?

3 个答案:

答案 0 :(得分:1)

AD不存储一种类型的哈希。当您更改密码时,DC会收到密码的纯文本版本,检查其复杂程度,然后生成并存储MD4,MD5,PBKDF2(4096 * SHA1)和其他几种哈希值。这是因为每个身份验证机制(NTLM,Kerberos,Digest,...)使用不同的哈希函数,AD需要支持它们。

密码哈希值存储在以下AD属性中:unicodePwd,dBCSPwd,lmPwdHistory,ntPwdHistory和supplementalCredentials。出于安全原因,您无法通过LDAP或ADSI读取它们。但我最近找到了一种方法来检索它们并创建了一个可以做到的PowerShell cmdlet

Get-ADReplAccount -SamAccountName John -Domain Contoso -Server LON-DC1

还有一种记录不完整的方法可以通过遗留SAMR protocol将MD4哈希值(AKA NT哈希值)推送到工作站或AD。由于没有公开此功能的内置命令,我也创建了PowerShell cmdlets来执行此操作。

要生成NT哈希,您可以使用此PowerShell命令:

$hash = ConvertTo-NTHash (Read-Host -AsSecureString)

最后,此命令将NT哈希推送到AD:

Set-SamAccountPasswordHash -SamAccountName john -Domain ADATUM -NTHash $hash -Server dc1.adatum.com

这些命令可用于在本地帐户和域帐户之间或AD和Samba之间迁移密码。但请注意,Kerberos-AES和WDigest身份验证不适用于此帐户,只适用于NTLM和Kerberos-RC4。

答案 1 :(得分:0)

据我了解,您无法将unicodePwd设置为实际的哈希字段。您可以根据需要使用userPasswd进行自己的检查,但Active Directory不会使用它。

答案 2 :(得分:0)

据我所知,你想要的是不可能的。您可以使用至少三种不同的协议在AD中更改/设置密码:

100%确定无法使用LDAP,但您可能需要检查其他两个,因为可能有某种方法可以使用它们。