WEB安全--内网渗透--LMNTLM基础

一、前言

LM HashNTLM Hash是Windows系统中的两种加密算法,不过LM Hash加密算法存在缺陷,在Windows Vista 和 Windows Server 2008开始,默认情况下只存储NTLM Hash,LM Hash将不再存在。所以我们会着重分析NTLM Hash。

在我们内网渗透的过程中,有通过抓取Windows服务器内部的hash值登录到域环境中的其他服务器进行横向渗透这一方式。

Windows(登录)的认证方式有两种:

 

1.1、本地认证

本地认证指操作系统运行winlogon进程显示登录界面,接收用户的输入,然后将输入的密码交给lsass进程,这个进程执行两个操作:①使用动态秘钥对称加密(mimikatz可以解密)的方式在内存中缓存一份“明文密码”  ②将密码转换成NTLM Hash,然后会将NTLM Hash与本地的SAM数据库中存储的密码进行比对,如果一致则通过验证。

补充:

windows内部是不保存明文密码的,只保存密码的hash。其中本机用户的密码hash是放在 本地的SAM文件 里面,域内用户的密码hash是存在域控的NTDS.DIT文件 里面。

 

1.2、网络认证

内网中的网络环境可以分为工作组环境域环境,它们使用的加密协议:

工作组环境:NTLM Hash(默认) ||   LM Hash(被淘汰)

域环境:Kerberos(默认)  ||  NTLM Hash(不满足Kerberos条件)

所以在某些情况下,域环境中的服务器也可以使用NTLM Hash加密算法。

用户在内网中服务器之间的登录操作是基于这些协议加密算法来建立安全的连接的,具体的实现请看下面的解析。

 

二、SSPI&SSP

在学习NTLM协议之前,我们需先了解两个概念:SSPI&SSP

2.1、SSPI

SSPI是Windows定义的一套接口,该接口定义了与安全有关的功能函数,如:

        1、身份验证机制

        2、为其他协议提供的Session Security机制(会话安全机制),为通讯提供数据完整性校验以及数据的加、解密功能

该接口只是定义了一套接口函数,但是并没有实现具体的内容。

 

2.2、SSP

SSP是SSPI的具体实现,微软自己实现了如下的SSP,用于提供安全功能,如:

        1、NTLM SSP:为Windows 2000之前的客户端-服务器域和非身份域验证(SMB/CIFS)提供NTLM质询/响应身份验证

        2、Kerberos SSP:Windows2000及更高版本中首选的客户端-服务器域相互身份验证

        3、Digest SSP

        4、Negotiate SSP

        5、Cred SSP

        6、Schannel SSP

        ......

 

三、NTLM身份认证

NTLM协议是一种网络协议认证,采用一种质询/应答(Challenge/Response)的信息交换模式。

认证流程:

        1、协商:确定双方协议版本、加密等级

        2、质询:质询/应答(Challenge/Response)信息交换的过程

        3、认证:验证结果

 

3.1、质询过程

在工作组环境下:

①:用户通过密码登录客户端电脑

②:(type 1)客户端向服务器发送type 1(协商)消息,它主要包含客户端支持和服务器请求的功能列表,如设备信息、密码信息等

③:接收请求,生成Challenge。加密Challenge,生成Net-NTLM Hash

④:(type 2)服务器用type 2消息(质询)进行响应,这包含服务器支持和同意的功能列表。但是,最重要的是,它包含服务器产生的Challenge

⑤:接收到Challenge后,使用将要登录到账户对应的NTLM Hash加密Challenge生成Response

⑥:(type 3)客户端用type 3消息(身份验证)回复质询。将response,username,challenge发给服务器。消息中的response是最关键的部分,因为它们向服务器证明客户端用户已经知道帐户密码

⑦:比对Server生成的Net-NTLM Hash与Response是否相等

⑧:验证成功

 

3.2、数据包信息

NTLM只是底层的认证协议,其必须镶嵌在上层应用协议里面,消息的传输依赖于使用NTLM的上层协议,如SMB、HTTP等。

数据包的关键信息如下:

协商(type1):

Negotiate Flags具体内容如下:

质询(type2):

其中最主要的信息是challenge,如下:

 

 

认证(type3):

这里的Challenge不同于type2 的Challenge,这里的Challenge是一个随机的客户端nonce。

 

数据包内容如下:


可以看到type3 Response响应消息数据包中的是NTLMv2响应。那NTLMv2响应是怎样构建出type3 Response的呢?

请看下面介绍:

 

3.3、NTLMv2响应

在type3中的响应,有六种类型的响应:

  • LM(LAN Manager)响应 - 由大多数较早的客户端发送,这是“原始”响应类型。

  • NTLMv1响应 - 这是由基于NT的客户端发送的,包括Windows 2000和XP。

  • NTLMv2响应 - 在Windows NT Service Pack 4中引入的一种较新的响应类型。它替换启用了 NTLM版本2的系统上的NTLM响应。

  • LMv2响应 - 替代NTLM版本2系统上的LM响应。

  • NTLM2会话响应 - 用于在没有NTLMv2身份验证的情况下协商NTLM2会话安全性时,此方案会更改LM NTLM响应的语义。

  • 匿名响应 - 当匿名上下文正在建立时使用; 没有提供实际的证书,也没有真正的身份验证。“存 根”字段显示在类型3消息中。

NTLMv2加密算法

Net-ntlm hash v2的格式为:

username::domain:challenge:HMAC-MD5:blob

type3中Response的构成方式:

①将Unicode后的大写用户名与Unicode后的身份验证目标(在Type 3消息的"TargetName"字段中指定的域或服务器名称)拼在一起;

②构建一个blob信息;

③使用16字节NTLMv2哈希作为密钥,将HMAC-MD5消息认证代码算法加密一个值(来自type 2的Challenge与Blob拼接在一起),得到一个16字节的NTProofStr;

NTLMv2 Hash = HMAC-MD5(unicode(hex((upper(UserName)+DomainName))),NTLM Hash)
NTProofStr = HMAC-MD5(challenge+blob,NTLMv2 Hash)

④将NTProofStr与Blob拼接起来形成得到response。

 

3.4、MIC

MIC是校验和,设计MIC主要是为了防止这个包中途被修改。

计算公式:

MIC = HMAC_MD5(exportedSessionKey,NEGOTIATE_MESSAGE+CHALLENGE_MESSAGE+AUTHENTICATE_MESSAGE)

 

关于exportedSessionKey,请看下面

3.5、签名

keyExchangeKey是使用用户password和severChallenge经过一定运算得到

SessionKey是由keyExchangeKey和exportedSessionKey经过一定运算得到

SessionKey是在要求进行签名的时候用的,用来进行协商加密密钥。

首先,客户端会生成一个随机数exportedSessionKey,后续都是使用这个exportedSessionKey来加解密流量。由于exportedSessionKey是客户端生成的,服务端并不知道,那么是通过什么手段进行协商的呢?

客户端使用keyExchangeKey做为Key,RC4加密算法加密exportedSessionKey,得到我们流量中看到的SessionKey。服务端拿到流量后,使用用户密码和质询值Challenge经过运算生成keyExchangeKey,然后使用SessionKey跟keyExchangeKey一起运算(解密)得到exportedSessionKey,然后使用exportedSessionKey进行加解密流量。对于攻击者来说,由于没有用户的密码,无法生成keyExchangeKey。因此,攻击者即使在拿到流量后,也无法计算出exportedSessionKey,自然也就无法解密流量了。

 

 

 

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

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

相关文章

时尚优雅奢华品牌包装徽标设计衬线英文字体安装包 Kagea – Luxury Women Ligature Font

Kagea 是一种复杂的衬线字体,有常规和压缩两种样式,具有 50 连字和替代字体,并支持多种语言。其精致的比例和别致的字体使其成为高端品牌、编辑布局、高档包装、时尚品牌和奢侈品设计的理想选择。 包含内容: TTF、OTF 和 WOFF 格…

cut命令用法

cut 是 Linux/Unix 系统中一个用于按列提取文本内容的命令,常用于处理结构化文本(如 CSV、日志、配置文件等)。它通过分隔符、字符位置或字节位置来切割文本,提取指定部分。 核心功能 按字段(列)提取&#…

美国mlb与韩国mlb的关系·棒球9号位

MLB(Major League Baseball,美国职业棒球大联盟)作为全球最高水平的职业棒球联赛,与韩国市场流行的“MLB”时尚品牌之间存在着授权合作关系,但两者在业务范畴和品牌定位上存在显著差异。 一、品牌授权背景:…

从吉卜力漫画到艺术创造:GPT-4o多种风格绘图Prompt大全

在3月底,GPT-4o掀起了一阵吉卜力绘图浪潮,大家纷纷输入一张图片,让4o模型进行风格化迁移,其中吉卜力风格的漫画在社交媒体上最为火热。在大家争议4o的训练数据是否侵权和4o背后的技术原理的时候,我们先来玩一玩&#x…

Leetcode 3510. Minimum Pair Removal to Sort Array II

Leetcode 3510. Minimum Pair Removal to Sort Array II 1. 解题思路2. 代码实现 题目链接:3510. Minimum Pair Removal to Sort Array II 1. 解题思路 这一题和题目3507. Minimum Pair Removal to Sort Array I本质上是同一道题目,唯一的区别在于时间…

【数学建模】(时间序列模型)ARIMA时间序列模型

ARIMA时间序列模型详解及常见时间序列模型概览 文章目录 ARIMA时间序列模型详解及常见时间序列模型概览1 引言2 ARIMA模型的基本概念3 ARIMA模型的组成部分详解3.1 AR模型 (自回归模型)3.2 MA模型 (移动平均模型)3 I (差分) 4 ARIMA模型的建模步骤5 Python实现ARIMA模型6 常见时…

嵌入式AI开发者职业成长路线图

嵌入式AI开发者职业成长路线图 一、核心技术能力构建 1. 深度学习框架 TensorFlow/TensorFlow Lite:适合部署到嵌入式设备PyTorch:研究和原型开发ONNX:模型转换与部署 2. 模型理解与应用 卷积神经网络(CNN):图像识别、目标检…

单元测试之mockito

简介 mockito是一款模拟测试框架,用于Java开发中的单元测试。通过mockito,可以创建和配置一个对象,通过它来替换对象的外部依赖。 作用:模拟一个类的外部依赖,保证单元测试的独立性。例如,在类A中会调用类…

Oracle数据库数据编程SQL<5 正则表达式函数*****>

Oracle 提供了一组强大的正则表达式函数,用于在 SQL 和 PL/SQL 中进行复杂的模式匹配和文本处理。这些函数基于 POSIX 标准正则表达式,功能强大且灵活。 目录 一、Oracle 正则表达式函数概览 二、函数详解及示例 1. REGEXP_LIKE 2. REGEXP_INSTR 3. REGEXP_SUBSTR 4. …

el-tabs添加按钮增加点击禁止样式

前置文章 一、vue使用element-ui自定义样式思路分享【实操】 二、vue3&ts&el-tabs多个tab表单校验 现状确认 点击添加按钮,没有点击样式,用户感知不明显没有限制最大的tab添加数量,可以无限添加 调整目标&代码编写 调整目标…

DB-Mysql中TIMESTAMP与DATETIME的区别

文章目录 ‌存储范围‌‌时区处理‌存储空间‌默认值和自动更新‌‌零值处理‌适用场景‌总结 在MySQL中,TIMESTAMP和DATETIME是两种常用的日期时间数据类型,它们虽然都用于存储日期和时间,但在多个方面存在显著差异。以下是它们的主要区别&a…

Spring 中有哪些设计模式?

🧠 一、Spring 中常见的设计模式 设计模式类型Spring 中的应用场景单例模式创建型默认 Bean 是单例的工厂模式创建型BeanFactory、FactoryBean抽象工厂模式创建型ApplicationContext 提供多个工厂接口代理模式结构型AOP 动态代理(JDK/CGLIB)…

C# Winform 入门(3)之尺寸同比例缩放

放大前 放大后 1.定义当前窗体的宽度和高度 private float x;//定义当前窗体的宽度private float y;//定义当前窗台的高度 2.接收当前窗体的尺寸大小 x this.Width;//存储原始宽度ythis.Height;//存储原始高度setTag(this);//为控件设置 Tag 属性 3.声明方法,获…

从零开始的编程-java篇1.6.3

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

【Redis】数据的淘汰策略

目录 淘汰策略方案(8种) LRU和LFU策略的区别 使用建议 手搓LRU算法 方式一 方式二 大家好,我是jstart千语。今天和大家回来聊一下redis,这次要讲的是它的淘汰策略。为什么需要淘汰策略呢,就是当redis里面的内存占…

【前端】Node.js一本通

近两天更新完毕,建议关注收藏点赞。 目录 复习Node.js概述使用fs文件系统模块path路径模块 http模块 复习 为什么JS可以在浏览器中执行 原理:待执行的JS代码->JS解析引擎 不同的浏览器使用不同的 JavaScript 解析引擎:其中,C…

【AI论文】JavisDiT: 具备层次化时空先验同步机制的联合音视频扩散Transformer

摘要:本文介绍了一种新型的联合音频-视频扩散变换器JavisDiT,该变换器专为同步音频-视频生成(JAVG)而设计。 基于强大的扩散变换器(DiT)架构,JavisDiT能够根据开放式用户提示同时生成高质量的音…

Java-实现公有字段自动注入(创建人、创建时间、修改人、修改时间)

文章目录 Mybatis-plus实现自动注入定义 MetaObjectHandler配置 MyBatis-Plus 使用 MetaObjectHandler实体类字段注解使用服务类进行操作测试 Jpa启用审计功能实现自动注入添加依赖启动类启用审计功能实现AuditorAware接口实体类中使用审计注解 总结 自动注入创建人、创建时间、…

金融机构开源软件风险管理体系建设

开源软件为金融行业带来了创新活力的同时,也引入了一系列独特的风险。金融机构需要构建系统化的风险管理体系,以识别和应对开源软件在全生命周期中的各种风险点。下面我们将解析开源软件在金融场景下的主要风险类别,并探讨如何建立健全的风险…

图形渲染中的定点数和浮点数

三种API的NDC区别 NDC全称,Normalized Device Coordinates Metal、Vulkan、OpenGL的区别如下: featureOpenGL NDCMetal NDCVulkan NDC坐标系右手左手右手z值范围[-1,1][0,1][0,1]xy视口范围[-1,1][-1,1][-1,1] GPU渲染的定点数和浮点数 定点数类型&a…