NTLM协议分析介绍

一、NTLM简介

NTLM Hash的计算: (1).先将用户密码转换为十六进制格式。 (2).将十六进制格式的密码进行Unicode编码。(3).使用MD4摘要算法对Unicode编码数据进行Hash计算

二、NTLM认证

NTLM验证是一种Challenge/Response 验证机制,由三种消息组成:通常称为type 1(协商),类型type 2(质询)和type 3(身份验证)。

  • 用户登录客户端电脑

  • (type 1)客户端向服务器发送type 1(协商)消息,它主要包含客户端支持和服务器请求的功能列表。

  • (type 2)服务器用type 2消息(质询)进行响应,这包含服务器支持和同意的功能列表。但是,最重要的是,它包含服务器产生的Challenge(一个 16 位的随机字符串)。

  • (type 3)客户端用type 3消息(身份验证)回复质询。用户接收到步骤3中的challenge之后,使用用户hash与challenge进行加密运算得到response,将response,username,challeng发给服务器。消息中的response是最关键的部分,因为它们向服务器证明客户端用户已经知道帐户密码。

  • 服务器拿到type 3之后,使用challenge和用户hash进行加密得到response2与type 3发来的response进行比较。如果用户hash是存储在域控里面的话,那么没有用户hash,也就没办法计算response2。也就没法验证。这个时候用户服务器就会通过netlogon协议联系域控,建立一个安全通道,然后将type 1,type 2,type3 全部发给域控(这个过程也叫作Pass Through Authentication认证流程)

  • 域控使用challenge和用户hash进行加密得到response2,与type 3的response进行比较

协商过程

一、第一步客户端会向服务端发起第一次协商请求(是以 SMB_V1 进行的) ,报文中可见, 客户端声明了它所能支持的功能列表及协议版本

二、服务端会返回它"同意"的功能及协议版本

三、客户端会向服务端发起,第二次协商请求, 而这次的请求格式就是根据第一次协商好的功能及协议版本进行的, 比如, 此处就明确了后面全部采用SMBV2 来通信, 注, 从一个高版本系统登录到一个低版本系统时 smb 会在前期协商时自动降级以适配服务端

 四、第二次协商所返回,两个时间戳" 和 "Smb 签名" 状态

 质询过程

一、协商全部完成后,本地客户端便会开始尝试建立会话请求,注意请求中的这个 "Target Info" 标志

 

 二、会话响应中会返回一个 16 位的 Challenge, 还会返回服务端的详细系统信息,"Target Info" 所标识的内容,MSF模块中auxiliary/scanner/smb/smb_version就取自这里的信息

 认证过程

一、当本地客户端接收到这个 Challenge 后会和缓存的用于登录的用户密码 hash 再 hash 一次,生成 response 并把 用户名, Challenge, Response 一同发给服务端

二、服务端在收到发过来的 用户名, Challenge, Response 之后, 就会到自己的账密数据库(此处为本地,所以是 SAM)中找到对应的用户密码 hash 并和发来的 Challenge 再 hash 一次,然后再和发来的 Response 进行对比,如果匹配即登录成功,否则,登录失败

posted @ 2021-07-15 14:57  aoaoaoao  阅读(480)  评论(0编辑  收藏  举报