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 进行对比,如果匹配即登录成功,否则,登录失败
本文来自博客园,作者:aoaoaoao,转载请注明原文链接:https://www.cnblogs.com/websecyw/p/15015584.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?