万有斥力 发表于 2025-4-7 14:10:45

WEB安全--内网排泄--LM&NTLM基础

一、媒介

LM Hash和NTLM 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、质询过程

https://i-blog.csdnimg.cn/direct/03bed6d3815f43639b215d6aac183c61.jpeg
在工作组情况下:
①:用户通过暗码登录客户端电脑
②:(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):

https://i-blog.csdnimg.cn/direct/ebf83fc8537c44159a9dc2c529a99ba7.png
Negotiate Flags具体内容如下:
https://i-blog.csdnimg.cn/direct/1ad4efa32e0a42a597ee3b47881c793a.png
质询(type2):

https://i-blog.csdnimg.cn/direct/28c1fbc58ff8462ea9d539be38dc2956.png
其中最重要的信息是challenge,如下:
https://i-blog.csdnimg.cn/direct/cdaeee45c2ba4f7fa4146e0fad94ea59.png
 
 
认证(type3):

https://i-blog.csdnimg.cn/direct/a1495900f620493c8c2a79a330fc0853.png
这里的Challenge不同于type2 的Challenge,这里的Challenge是一个随机的客户端nonce。
 
数据包内容如下:
https://i-blog.csdnimg.cn/direct/c0b4d1295dd64ae08de1fad03906dc58.png
可以看到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,自然也就无法解密流量了。
 
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: WEB安全--内网排泄--LM&NTLM基础