Windows ❀ 网络认证

Windows网络认证

1、基础概述
在工作组中,无论是局域网中的一台机器还是很多机器,它们能够通信的话都无法相互建立一个完美的信任机制,只有有一个可以信任的信托机构,对两方进行认证,这样就有第三方来证实双方的可信任性;

SMB(Server Message Block)通信协议是微软和英特尔在1987年制定的协议,主要是作为微软网络的通信协议,SMB是在会话层和表示层以及小部分应用层的协议,SMB使用了NetBIOS的应用程序接口API,一般端口使用为139,445;另外,它是一个开放性的协议,允许了协议扩展使它可以变得多更大更复杂,最近微软又将SMB改名为CIFS,并加入了新特色;

2、NTLM协议
是一种网络协议,它是基于挑战/响应(Challenge/Response)认证机制的一种认证模式,这个协议只支持Windows;NTLM协议的认证需要三个消息完成:协商、挑战、认证;

  • 协商-主要用于确认双方协议版本、加密等级等;
  • 挑战-服务器在收到客户端的协商消息之后,会读取其中的内容,并从中选择出自己所能接受的服务内容、加密等级、安全服务等,并生成一个随机数Challenge,然后生成Challenge消息返回给客户端,该消息就是挑战/响应认证机制的主要功能体现;
  • 认证-验证主要是在挑战完成后,验证结果,是认证的最后一步;

首先客户端向服务器发送一些用户信息以及主机信息,服务器接收到请求之后会生成一个十六位的随机数称为Challenge,使用登陆用户名对应的NTLM Hash加密Challenge生成Challenge 1,同时将Challenge发送给客户端;
Challenge是服务器随机生成的、NTLM Hash是服务器根据客户端提供的用户名寻找出来的Hash加密生成Net NTLM Hash;
客户端接收到Challenge后使用将要登录到账户对应的NTLM Hash加密Challenge生成Response之后发送给服务器,服务器接收到客户端发送过来的Response之后,对比Challenge1与Response是否相等,从而进行验证;

3、详细过程

  • 输入密码,然后Lsass会把密码的NTLM Hash后的值存储到本地;
  • 客户端把用户名的明文发送给服务器;
  • 服务器收到用户名之后会判断用户名是否存在,不存在认证失败;存在后服务器会生成一个十六位进制的随机数,并且从本地查找share_user对应的NTLM Hash,使用NTLM Hash加密Challenge,生成一个Net-NTLM Hash存在内存中,并将Challenge发送给客户端;
  • 当客户端收到Challenge后,用第一步存储的NTLM Hash对其加密,然后再将加密后的Challenge发送给服务器,也就是Response,表现形式为Net-NTLM Hash;
  • 服务器在收到Response后,会向DC发送针对客户端的验证请求,该请求主要包含以下三方面的内容:客户端用户名、客户端NTLM Hash加密的Challenge、原始的Challenge;
  • 当DC接收到发送过来的请求后,会根据用户名到DC的账号数据库(ntds.dit)里面找到该用户名对应的NTLM Hash,然后把这个Hash拿出来和发送过来的Challenge值进行比对,相同则认证成功;

4、NTLM协议版本区别
V1和V2最显著的区别就是Challenge与加密算法不同;

  • V1 8位;
  • V2 16位;
上一篇:Python Challenge -mission13 第13关


下一篇:php 获取剩余时间, 日,时,分展示...