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

Hash 是否将Active Directory密码哈希设置为SHA1值?,hash,active-directory,passwords,Hash,Active Directory,Passwords,我正在将用户从外部系统同步到我们的系统。我需要在Active Directory中设置用户的密码 我只收到外部用户密码的SHA1,并且setPassword将散列我输入的任何内容 将用户的unicodewd设置为实际哈希字段吗? 如果是,我可以将其设置为提供的哈希吗 如果没有,如何/可以设置Active Directory存储的哈希 据我所知,您不能将unicodewd设置为实际的哈希字段。您可以使用userPasswd进行自己的检查,但它不被Active Directory使用。据我所知

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

我只收到外部用户密码的SHA1,并且
setPassword
将散列我输入的任何内容

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

据我所知,您不能将
unicodewd
设置为实际的哈希字段。您可以使用
userPasswd
进行自己的检查,但它不被Active Directory使用。

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

  • LDAP(实际上是LDAP)
  • -我不确定最新版本的AD是否仍然支持它

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

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

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

Get-ADReplAccount -SamAccountName John -Domain Contoso -Server LON-DC1
还有一种没有很好文档记录的方法,可以通过遗留系统将MD4哈希(也称为NT哈希)推送到工作站或AD。由于没有内置命令公开此功能,因此我也创建了相应的命令

要生成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