加入收藏 | 设为首页 | 会员中心 | 我要投稿 鞍山站长网 (https://www.0412zz.cn/)- 智能营销、数据计算、数据可视化、负载均衡、研发安全!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

非计算机专业该学习Java还是Python

发布时间:2021-02-09 11:17:15 所属栏目:外闻 来源:互联网
导读:由于服务器发送了挑战(1),并且客户端使用其秘密的哈希值对该挑战进行加密,然后使用其用户名(2)将其发送回服务器,因此服务器将在其SAM中查找用户密码的哈希值数据库(3)。收到挑战后,它还将加密先前使用此哈希(4)发送的挑战,并将其结果与用户返回

由于服务器发送了挑战(1),并且客户端使用其秘密的哈希值对该挑战进行加密,然后使用其用户名(2)将其发送回服务器,因此服务器将在其SAM中查找用户密码的哈希值数据库(3)。收到挑战后,它还将加密先前使用此哈希(4)发送的挑战,并将其结果与用户返回的挑战进行比较。如果相同(5),则说明用户已通过身份验证!否则,用户没有提供正确的秘密。

域帐户

当使用域帐户进行身份验证时,用户的NT哈希不再存储在服务器上,而是存储在域控制器上。用户希望对其进行身份验证的服务器接收其挑战的答案,但无法检查该答案是否有效。它将把这个任务委托给域控制器。

为此,它将使用Netlogon服务,该服务能够与域控制器建立安全连接。此安全连接称为安全通道,之所以可以进行这种安全连接,是因为服务器知道自己的密码,而域控制器也知道服务器密码的哈希值,他们可以安全地交换会话密钥并安全地进行通信。

我不会详细介绍,但是想法是服务器将以NETLOGON_NETWORK_INFO的结构将不同的元素发送到域控制器:

1. 客户端的用户名(Identity);

2. 先前发送给客户端的挑战(LmChallenge);

3. 客户端发送的对挑战的响应(NtChallengeResponse)。

域控制器将在其数据库中查找用户的NT哈希,对于域控制器,它不在SAM中,因为它是一个试图进行身份验证的域帐户。这次它位于一个名为NTDS.DIT的文件中,该文件是所有域用户的数据库。检索NT哈希后,它将使用该哈希和挑战计算预期的响应,并将此结果与客户的响应进行比较。

然后,一条消息将被发送到服务器(NETLOGON_VALIDATION_SAM_INFO4),指示客户端是否经过身份验证,它还将发送一组关于用户的信息。这与使用Kerberos身份验证时在PAC中发现的信息相同。

以下就是一个域控制器的验证过程:
 

综上所述,当客户端进行身份验证时,它使用其密码的MD4指纹来加密挑战。然后,让我们看看接收到此响应后服务器端会发生什么。

身份验证

如前所述,有两种不同的身份验证情况。首先,用于身份验证的帐户是一个本地帐户,因此服务器知道这个帐户,并拥有该帐户的秘密副本。第二种是使用域帐户,在这种情况下服务器不知道这个帐户或它的秘密,它必须将身份验证委托给域控制器。

本地帐户

在使用本地帐户进行身份验证的情况下,服务器将使用用户的密钥(更确切地说是用户秘密的MD4哈希) 对发送给客户端的挑战进行加密。然后,它将检查其操作的结果是否等于客户端的响应,从而证明用户拥有正确的秘密。如果没有,则用户使用的密钥不是正确的,因为挑战的加密没有给出预期的密钥。

为了执行此操作,服务器需要存储本地用户及其密码的哈希。这个数据库的名称是SAM(安全帐户管理器)。可以在注册表中找到SAM,特别是使用regedit工具时,但只能作为系统访问。不过,还可以使用psexec打开:
 

NTLM交换框顶部是红色的,底部是服务器响应CHALLENGE_MESSAGE中包含的信息。在这些交换之后,服务器拥有两件东西:

1. 发送给客户端的挑战;

2. 客户端的响应被自身的秘密加密了。

要完成身份验证,服务器只需检查客户端发送的响应的有效性。但在那之前,让我们来检查一下客户的秘密。

身份验证的秘密

我们说过,客户端使用一个哈希版本的密码作为密钥,原因如下:为了避免在服务器上以明文形式存储用户密码,它是存储的密码的哈希值。现在,此哈希是NT哈希,它不过是MD4函数的结果,不含盐值。

(编辑:鞍山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读