代码之家  ›  专栏  ›  技术社区  ›  sre

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

  •  5
  • sre  · 技术社区  · 16 年前

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

    我只提供了SHA1的外部用户的密码和密码 setPassword 将散列任何我输入的内容。

    • 正在设置用户的 unicodePwd 实际的散列字段?
      • 如果不是,如何/可以设置Active Directory存储的哈希?
    3 回复  |  直到 16 年前
        1
  •  0
  •   JPBlanc    14 年前

    据我所知你不能 unicodePwd 到实际的散列字段。你可以用 userPasswd 作为您自己的检查,但它没有被使用的Active Directory。

        2
  •  2
  •   Michael Grafnetter    11 年前

    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
    

    还有一种缺乏文档记录的方法可以通过遗留系统将MD4散列(也称为NT散列)推送到工作站或AD SAMR protocol . 由于没有公开此功能的内置命令,因此我创建了 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。

        3
  •  0
  •   ShaMan-H_Fel    14 年前

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

    我100%确信LDAP不能被使用,但是您可能想检查另外两个,因为可能有一些方法可以使用它们。