当使用--ntlm执行卷曲时,在WWW-身份验证头被发送回,然后第二个NTLM授权头被发送到最后返回200的结果之间发生了什么?
授权: NTLM xxxxxxxx
< HTTP/1.1 401未经授权
授权: NTLM xxxxxxxxxx
< HTTP/1.1 200 OK
我希望能够获取第一个NTLM头(这与我相信的用户名/密码保持不变),并将其构建到脚本中,获取返回的标头,并将第二个NTLM头发送回身份验证。我不明白的是如何挑战(WWW-认证头?)被接收,然后作为另一个NTLM报头发送回。
我尝试使用WWW-8月标题作为第二个NTLM-8月标题,我没有期待它的工作,但尝试。
发布于 2022-11-03 23:14:20
NTLM身份验证是一个多步骤的过程,它通过HTTP实现如下:
HTTP客户端发出HTTP请求(没有身份验证数据provided).
WWW-Authenticate: NTLM报头支持NTLM身份验证。
InitializeSecurityContext生成第一个身份验证令牌并将其发送到Authorization: NTLM <base64 encoded client token #1>报头中的服务器。
AcceptSecurityContext,后者生成服务器的令牌。服务器再次使用401 Unauthorized进行响应,但这一次在WWW-Authenticate: NTLM <base64 encoded server token>头中包含了它的令牌。
InitializeSecurityContext,生成第二个令牌,然后在Authorization: NTLM <base64 encoded client token #2>头中发送回服务器。
AcceptSecurityContext,后者(假设身份验证成功)完成了该过程,服务器返回正常的<代码>d21响应。H 222G 223G 223InitializeSecurityContext和AcceptSecurityContext都会在初始调用中返回一些附加数据,这些数据必须包含在后续调用中,从而使身份验证过程具有状态,因此所有上述步骤都必须在与服务器的相同连接上进行。
发布于 2022-11-04 09:52:18
NTLM实际上是三次请求握手,客户端在第一次请求资源时不发送任何凭据。这意味着第一个请求是匿名的,即使已经为资源配置了凭据。当启用Windows身份验证并禁用匿名身份验证时,此匿名请求将导致HTTP 401状态。
第二个请求是NTLM挑战,其中客户端使用包含NTLM (Type-1消息)的附加“授权”头重新发送原始请求。然后,服务器以HTTP 401状态将NTLM质询(Type-2消息)发送回客户端。
第三个请求将是客户机通过向授权头添加一个问题响应(NTLM Type-3消息)再次发送的原始请求。然后,服务器对用户进行身份验证,如果成功,则返回具有HTTP 200状态的响应。
https://stackoverflow.com/questions/74309331
复制相似问题