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

news2025/4/9 11:14:46

一、前言

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.coloradmin.cn/o/2329687.html

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

相关文章

8.用户管理专栏主页面开发

用户管理专栏主页面开发 写在前面用户权限控制用户列表接口设计主页面开发前端account/Index.vuelangs/zh.jsstore.js 后端Paginator概述基本用法代码示例属性与方法 urls.pyviews.py 运行效果 总结 欢迎加入Gerapy二次开发教程专栏! 本专栏专为新手开发者精心策划了…

室内指路机器人是否支持与第三方软件对接?

嘿,你知道吗?叁仟室内指路机器人可有个超厉害的技能,那就是能和第三方软件 “手牵手” 哦,接下来就带你一探究竟! 从技术魔法角度看哈:好多室内指路机器人都像拥有超能力的小魔法师,采用开放式…

从代码上深入学习GraphRag

网上关于该算法的解析都停留在大概流程上,但是具体解析细节未知,由于代码是PipeLine形式因此阅读起来比较麻烦,本文希望通过阅读项目代码来解析其算法的具体实现细节,特别是如何利用大模型来完成图谱生成和检索增强的实现细节。 …

【Redis】通用命令

使用者通过redis-cli客户端和redis服务器交互,涉及到很多的redis命令,redis的命令非常多,我们需要多练习常用的命令,以及学会使用redis的文档。 一、get和set命令(最核心的命令) Redis中最核心的两个命令&…

微前端随笔

✨ single-spa: js-entry 通过es-module 或 umd 动态插入 js 脚本 ,在主应用中发送请求,来获取子应用的包, 该子应用的包 singleSpa.registerApplication({name: app1,app: () > import(http://localhost:8080/app1.js),active…

C++中的浅拷贝和深拷贝

浅拷贝只是将变量的值赋予给另外一个变量,在遇到指针类型时,浅拷贝只会把当前指针的值,也就是该指针指向的地址赋予给另外一个指针,二者指向相同的地址; 深拷贝在遇到指针类型时,会先将当前指针指向地址包…

车载诊断架构 --- 整车重启先后顺序带来的思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

【C++11(下)】—— 我与C++的不解之缘(三十二)

前言 随着 C11 的引入,现代 C 语言在语法层面上变得更加灵活、简洁。其中最受欢迎的新特性之一就是 lambda 表达式(Lambda Expression),它让我们可以在函数内部直接定义匿名函数。配合 std::function 包装器 使用,可以…

Windows 10/11系统优化工具

家庭或工作电脑使用时间久了,会出现各种各样问题,今天给大家推荐一款专为Windows 10/11系统设计的全能优化工具,该软件集成了超过40项专业级实用程序,可针对系统性能进行深度优化、精准调校、全面清理、加速响应及故障修复。通过系…

浅谈在HTTP中GET与POST的区别

从 HTTP 报文来看: GET请求方式将请求信息放在 URL 后面,请求信息和 URL 之间以 ?隔开,请求信息的格式为键值对,这种请求方式将请求信息直接暴露在 URL 中,安全性比较低。另外从报文结构上来看&#xff0c…

LightRAG实战:轻松构建知识图谱,破解传统RAG多跳推理难题

作者:后端小肥肠 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 2025防失业预警:不会用DeepSeek-RAG建知识库的人正在被淘汰_deepseek-embedding-CSDN博客 从PDF到精准答案:Coze…

C++多线程编码二

1.lock和try_lock lock是一个函数模板,可以支持多个锁对象同时锁定同一个,如果其中一个锁对象没有锁住,lock函数会把已经锁定的对象解锁并进入阻塞,直到多个锁锁定一个对象。 try_lock也是一个函数模板,尝试对多个锁…

垃圾回收——三色标记法(golang使用)

三色标记法(tricolor mark-and-sweep algorithm)是传统 Mark-Sweep 的一个改进,它是一个并发的 GC 算法,在Golang中被用作垃圾回收的算法,但是也会有一个缺陷,可能程序中的垃圾产生的速度会大于垃圾收集的速度,这样会导…

Windows环境下开发pyspark程序

Windows环境下开发pyspark程序 一、环境准备 1.1. Anaconda/Miniconda(Python环境) 如果不怕包的版本管理混乱,可以直接使用已有的Python环境。 需要安装anaconda/miniconda(python3.8版本以上):Anaconda…

SSM婚纱摄影网的设计

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 SS…

1110+款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100+ Icons Easily Customize

1110款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100 Icons Easily Customize 产品特点 — 24 x 24 px 网格大小 — 2px 线条描边 — 所有形状都是基于矢量的 — 平滑和圆角 — 易于更改颜色 类别 🚨 警报和反馈 ⬆️ 箭头 &…

Llama 4 家族:原生多模态 AI 创新的新时代开启

0 要点总结 Meta发布 Llama 4 系列的首批模型,帮用户打造更个性化多模态体验Llama 4 Scout 是有 170 亿激活参数、16 个专家模块的模型,同类中全球最强多模态模型,性能超越以往所有 Llama 系列模型,能在一张 NVIDIA H100 GPU 上运…

正则表达式(Regular Expression,简称 Regex)

一、5w2h(七问法)分析正则表达式 是的,5W2H 完全可以应用于研究 正则表达式(Regular Expressions)。通过回答 5W2H 的七个问题,我们可以全面理解正则表达式的定义、用途、使用方法、适用场景等&#xff0c…

JMeter脚本录制(火狐)

录制前准备: 电脑: 1、将JMeter证书导入,(bin目录下有一个证书,需要安装这个证书到电脑中) 2、按winr,输入certmgr.msc,打开证书,点击下一步,输入JMeter证书…

基于SpringBoot的“高校社团管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校社团管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 总体功能结构图 局部E-R图 系统首页页面 用户…