NTLM协议

news2024/9/23 13:28:49

0x01 LM Hash加密算法

LM Hash本质是一个DES加密,从Windows Vista和Windows Server 2008开始就禁用了LM Hash。LM Hash明文密码被限定在14位以内,密码超过14位则会停止使用LM Hash。下面介绍一下LM Hash的加密流程,以P@ss1234为例:

  1. 将密码转成大写,然后转成十六进制。

P@ss12345->P@SS1234->5040535331323334

  1. 十六进制字符不足14字节则用0补齐(14字节包含28位十六进制数字)。

5040535331323334->5040535331323334000000000000

  1. 将14字节数据分成两组,每组7字节,将每个字节的数字逐个转化成二进制,然后拼接起来(每个字节包含2位十六进制数字)。
50405353313233
01010000010000000101001101010011001100010011001000110011

拼接后数据:01010000010000000101001101010011001100010011001000110011

34000000000000
00110100000000000000000000000000000000000000000000000000

拼接后数据:00110100000000000000000000000000000000000000000000000000

  1. 将每组二进制数据按7bit为一组,分为8组,每组末尾加0,然后将每组逐个转成16进制后拼接。
01010000010000000101001101010011001100010011001000110011
0101000000100000000101000110101000110010100010001100100001100110

转化成十六进制:5020146a3288c866

00110100000000000000000000000000000000000000000000000000
001101000000000000000000000000000000000000000000000000000000000

转化成十六进制:3400000000000000

  1. 将上面生成的两组数据分别作为DES加密秘钥对字符串KGS!@#$%加密,然后拼接得到最终的LM Hash。
明文秘钥DES加密
KGS!@#$%5020146a3288c866896108C0BBF35B5C
KGS!@#$%3400000000000000FF17365FAF1FFE89

拼接后得到最终的LM Hash:896108C0BBF35B5CFF17365FAF1FFE89

0x02 NTLM Hash加密算法

为了解决LM Hash加密和身份验证方案中的安全弱点,微软提出了NTLM Hash加密算法。下面介绍一下LM Hash的加密流程,以P@ss1234为例。

  1. 将密码转化成ASCII编码,然后逐个编码转成16进制。
字符P@ss1234
ASCII806411511549505152
16进制5040737331323334

拼接后字符:5040737331323334

  1. 将ASCII编码的十六进制字逐个转化成Unicode编码(Unicode编码是在每个16进制字节后面加00)。

5040737331323334->50004000730073003100320033003400

  1. 对Unicode编码进行MD4加密。

50004000730073003100320033003400-> 74520a4ec2626e3638066146a0d5ceae

0x03 Net-NTLM Hash 加密算法

Net-NTLM有两个版本,两者的区别是Challenge值与加密算法不同。

版本Challenge值长度加密算法
Net-NTLM v1 Hash8字节DES加密算法
Net-NTLM v2 Hash16字节HMAC-MD5加密算法

3.1 Net-NTLM v1 Hash生成步骤

  1. 将16字节的NTLM Hash填充到21字节,并平均分成三组,每组7字节。

  2. 将这三组数据分别作为3DES的秘钥对Challenge加密,得到三个密文。

  3. 将三个密文拼接起来得到NTLM response。

  4. 拼接用户名等信息得到最终的Net_NTLM v1 Hash,格式:username::hostname:LM response:NTLM response:challenge

3.2 Net-NTLM v2 Hash生成步骤

  1. 将大写的User name和区分大小写的Domain name拼接在一起并转化成ASCII编码,然后逐个ASCII编码转成16进制,最后逐个转化成Unicode编码得到data (Unicode编码是在每个16进制字节后面加00)。

  2. 用NTLM Hash作为加密秘钥对data进行HMAC-MD5加密得到NTLM v2 Hash。

  3. 构建一个blob,将challenge和blob拼接在一起得到data2,其中blob包含了用户名、域名、随机挑战、时间戳等信息。

  4. 使用NTLM v2 Hash作为加密秘钥对data2进行HMAC-MD5加密得到HMAC-MD5。

  5. 拼接用户名等信息得到最终的Net_NTLM v2 Hash,格式:username::domain:challenge:HMAC_MD5:blob

0x04 NTLM协议认证

4.1 工作组环境下的NTLM认证

在这里插入图片描述

  1. 用户输入账号和密码,客户端用密码生成NTLM Hash并缓存。同时向服务端发送NTLMSSP_NEGOTIATE消息请求身份认证(Type 1协商消息)。

  2. 服务端收到Type 1后随机生成一个challenge值并缓存,同时向客户端发送包含Challenge的NTLMSSP_CHALLENGE消息(Type 2质询消息)。

  3. 客户端收到Type 2后用NTLM Hash对challenge进行加密得到Net-NTLM Hash,将其封装到NTLMSSP_AUTH消息中发往服务端(Type 3认证消息)。

  4. 服务端收到Type 3后取出Net-NTLM Hash,用服务端保存的密码生成的NTLM Hash对challenge加密得到服务端的Net-NTLM Hash,将客户端与服务端计算的Net_NTLM Hash对比,相等则认证成功,否则失败,并将验证结果发送给客户端。

4.2 域环境下的NTLM认证

在这里插入图片描述

  1. 用户输入账号和密码,客户端用密码生成NTLM Hash并缓存。同时向服务端发送NTLMSSP_NEGOTIATE消息请求身份认证(Type 1协商消息)。

  2. 服务端收到Type 1后随机生成一个challenge值并缓存,同时向客户端发送包含Challenge的NTLMSSP_CHALLENGE消息(Type 2质询消息)。

  3. 客户端收到Type 2后用NTLM Hash对challenge进行加密得到Net-NTLM Hash,将其封装到NTLMSSP_AUTH消息中发往服务端(Type 3认证消息)。

  4. 客户端收到Type 3后提取Net-NTLM Hash,通过Netlogon协议与域控服务器简历一个安全通道,将验证消息发送给域控。

  5. 域控收到验证消息后取出Net-NTLM Hash和challenge,同时从数据库中找到该用户的NTLM Hash对challenge加密得到Net-NTLM Hash并与客户端的Net-NTLM Hash对比,相等则认证成功,否则失败,并将结果发送给服务端。

  6. 服务端收到域控的验证结果后,将验证结果发送给客户端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/749241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Element-Plus搭建CMS页面结构 引入第三方图标库iconfont(详细)

Element-Plus组件库使用 element plus组件库是由饿了么前端团队专门针对vue框架开发的组件库,专门用于电脑端网页的。因为里面集成了很多组件,所以使用他可以非常快速的帮我们实现网站的开发。 安装: npm install element-plus --save 引入…

制作Visual Studio离线安装包

vs2015之后官网就不提供离线安装包了,使用离线安装包就需要自己手动制作一个; 以vs2019为例: 先去官网下载在线安装器 官网下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com) 展开2019的标签…

表格tr根据内容撑开高度并且每个td继承tr的高度(height:inherit,align-items: stretch)

项目设计图 实际上数据又长又短,例如类型有可能出现2行甚至3行的字数,所以整个行要适配最高的高度,然后其他子元素继承行的高度。 ps:原生的table或者uview的u-table都不怎么好使,所以用view来做 在做的过程中出现高度…

澎湃认证:浪潮信息携手可利邦推出隐私计算一体机解决方案

北京可利邦与浪潮信息联合发布隐私计算一体机解决方案,以浪潮信息inMerge超融合产品为基础设施平台,预装可利邦隐私计算软件平台,通过SRDC一体机进行整机柜交付,助力客户快速上线隐私计算应用系统。该方案已通过浪潮信息澎湃技术认…

Node连接Mongodb数据库

1.初始化 npm init 2.安装mongoose npm i mongoose 3.导入mongoose const mongooserequire("mongoose") 4.连接mongodb服务 mongoose.connect("mongodb://127.0.0.1:27017/user") 说明:mongodb是协议,user是数据库,如果没有会自动创…

Oracle通过函数调用dblink同步表数据方案(全量/增量)

创建对应的包,以方便触发调用 /*包声明*/ CREATE OR REPLACE PACKAGE yjb.pkg_scene_job AS /*创建同步任务*/FUNCTION F_SYNC_DRUG_STOCK RETURN NUMBER;/*同步*/PROCEDURE PRC_SYNC_DRUG_STOCK(RUNJOB VARCHAR2) ; END pkg_scene_job; /*包体*/ CREATE OR REPL…

Dubbo最核心功能——服务暴露的配置、使用及原理

系列文章目录 【收藏向】从用法到源码,一篇文章让你精通Dubbo的SPI机制 面试Dubbo ,却问我和Springcloud有什么区别? 超简单,手把手教你搭建Dubbo工程(内附源码) 文章目录 系列文章目录前言一、服务暴露的…

idea乱码解决方式大汇总

目录 idea版本: 解决方法: 一、基本方法 1. File -> Settings -> Editor 2. 二、Maven乱码解决方法 三、运行时乱码解决方法 四、因为以前乱设置导致的乱码 idea版本: 解决方法: 一、基本方法 1. File -> Setti…

ETHERCAT主站网关转DEVICENET连接支持ethercat总线的PLC

大家好,今天要和大家分享一款自主研发的通讯网关——远创智控YC-ECTM-DNT。这款产品可是解决了不同协议设备数据交换的麻烦问题,让我们一起来看看它的神奇之处吧! 这款通讯网关有什么特别的呢?首先,它可以连接DEVICENE…

vue2 element-ui el-cascader地址省市区分开单独写

使用 npm 或 yarn 安装 element-china-area-data 包&#xff1a; npm install element-china-area-data 在你的代码中导入 element-china-area-data import { regionData } from element-china-area-data let that; 完整代码 <template><div><el-form ref&quo…

Zookeeper概述及部署

Zookeeper概述及部署 一、Zookeeper 定义二、Zookeeper 特点三、Zookeeper 数据结构四、Zookeeper 应用场景五、Zookeeper选举机制● 第一次启动选举机制● 非第一次启动选举机制 六、部署 Zookeeper 集群1.安装前准备2.安装 Zookeeper 一、Zookeeper 定义 Zookeeper是一个开源…

leetcode:LCP 06. 拿硬币(python3解法)

难度&#xff1a;简单 桌上有 n 堆力扣币&#xff0c;每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆&#xff0c;拿走其中的一枚或者两枚&#xff0c;求拿完所有力扣币的最少次数。 示例 1&#xff1a; 输入&#xff1a;[4,2,1] 输出&#xff1a;4 解释&#xff1a…

mysql-分页数据重复

背景说明 分页查询不同页出现重复数据&#xff0c;底层实现都是使用limit select * from tt1 limit 100,50 第101条开始的50条数据 select * from tt1 limit 100 前100条记录 select * from tt1 limit 100 offset 50 从51条开始&#xff0c;显示后面的100条 原因分析 以前碰…

力扣 53. 最大子数组和

题目来源&#xff1a;https://leetcode.cn/problems/maximum-subarray/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a;难点在于判断什么时候更新count。 是当nums[i]为正数吗&#xff1f;那要nums没有正数怎么办&#xff1b; 是当nums[i]比之前子数组…

网络监控的关键指标

网络监控是 IT 的支柱&#xff0c;对于防止可能困扰您的业务的计划外中断至关重要。这就是为什么投资网络监控解决方案是一个明智而安全的举动。特别是随着远程工作成为常态&#xff0c;监控工具使公司能够从世界任何地方监控网络&#xff0c;并有助于在整个过程中保持最佳性能…

小程序:页面跳转闪屏

自己的笔记&#xff0c;随手记录。扛精走开。 1、问题描述 进入页面&#xff0c;是一个组件&#xff0c;通过路由传参判断是由哪个页面进入&#xff0c;不同的页面拿的已选值不一样&#xff0c;需要回显值&#xff0c;在编辑数据。此时会出现一个问题&#xff0c;A页面中进来…

运输问题案例

案例1 运输问题 某部门有3个生产同类型产品的产地&#xff0c;生产的产品由4个销售点出售&#xff0c;各工厂的生产量、各销售点的销售量以及各工厂到各销售点的单位运价&#xff08;元/吨&#xff09;如表1所示&#xff0c;求最佳调运方案&#xff1f; 表1 运输信息 产地\销地…

general 未设置cookie的Secure标志位

解决方案: 在配置文件中增加相应配置即可完成配置&#xff1a; <system.web><httpCookies httponlyCookies"true" requireSSl"true"/></system.web>添加完成后如下所示:

ens33没有inet地址

1&#xff09;切换到根用户 su - root 按提示输入密码&#xff08;不切换到根用户没有权限修改文件&#xff09; &#xff08;2&#xff09;输入cd /etc/sysconfig/network-scripts/ &#xff08;3&#xff09;输入vi ifcfg-ens33 ifcfg-ens33 &#xff08;4&#xff09;光标移…

深/浅拷贝

现在有一个我们自定义的Person对象,如何去克隆这个对象? class Person{public int id;Overridepublic String toString() {return "Person{" "id" id };} } public class Test2 {public static void main(String[] args) {Person person1 new Person()…