NTLM 笔记
https://learn.microsoft.com/zh-cn/windows-server/security/kerberos/ntlm-overview
https://learn.microsoft.com/zh-cn/windows/win32/secauthn/microsoft-ntlm
NTLM 身份验证是 Windows Msv1_0.dll 中包括的一系列身份验证协议。 NTLM 身份验证协议包括 LAN Manager 版本 1 和 2 以及 NTLM 版本 1 和 2。 NTLM 身份验证协议根据一种证明是服务器或域控制器的挑战/响应机制对用户和计算机进行身份验证,用户要知道该服务器和域控制器的与帐户关联的密码。 在使用 NTLM 协议时,每当需要新的访问令牌时,资源服务器必须执行以下操作之一来验证计算机或用户的身份:
- 如果计算机或用户的帐户是域帐户,请联系域控制器的部门域认证服务来获取该帐户的域。
- 如果该计算机或用户的帐户是本地帐户,请在本地帐户数据库中查找该帐户。
NTLM 协议是一种基于 Challenge/Response(质询/响应)的验证机制,由三种类型消息组成:
- Type 1(协商,Negotiate)
- Type 2(质询,Challenge)
- Type 3 (认证,Authentication)
NTLM 协议有 NTLM v1 和 NTLM v2 两个版本,目前使用最多的是 NTLM v2。两者最主要的区别是 Challenge 值与加密算法不同,共同之处是都是用 NTLM Hash 进行加密。

- (交互式身份验证仅) 用户访问客户端计算机并提供域名、用户名和密码。 客户端计算密码的加密 Hash,并放弃实际密码
- 客户端以将用户名明文发送到服务器
- 服务器生成一个称为质询或 nonce 的 8 字节随机数,并将其发送到客户端
- 客户端使用用户密码的哈希加密此质询,并将结果返回给服务器。 这称为响应
- 服务器将以下三项发送到域控制器:
- 用户名
- 发送到客户端的质询
- 从客户端收到的响应
- 域控制器使用用户名从安全帐户管理器数据库中检索用户密码的哈希。 它使用此密码哈希来加密质询
- 域控制器将其在步骤 6 中计算的加密质询与步骤 4 中客户端计算的响应进行比较。 如果它们相同,则身份验证成功
