Windows网络认证NTLM&Net-NTLM Hash
继续学
Net-NTLM Hash 通常是指网络环境下NTLM认证中的Hash,比如在工作组环境中,共享资料通过net use来建立smb共享。早期smb传输明文口令,后来用LM,现在用NTLM。
NTLM使用在Windows NT和Windows 2000 Server(or later)工作组环境中(Kerberos用在域模式下)。在AD域环境中,如果需要认证Windows NT系统,也必须采用NTLM。较之Kerberos,基于NTLM的认证过程要简单很多。NTLM采用一种质询/应答(Challenge/Response)消息交换模式。
NTLM是只能镶嵌在上层协议里面,消息的传输依赖于使用NTLM的上层协议。比如镶嵌在SMB协议。
# 简述NTLM
NTLM认证采用质询/应答(Challenge/Response)的消息交换模式,流程如下:
NTLM协议的认证过程分为三步:
- 协商 主要用于确认双方协议版本(NTLM v1/NTLM V2)
- 质询 就是挑战(Challenge)/响应(Response)认证机制起作用的范畴。
- 验证 验证主要是在质询完成后,验证结果,是认证的最后一步。
整个流程图如下
使用net use模拟流量请求,因为net use是建立在smb上的,所以会有smb的流量。
13-22请求包为net use的包,其中13-16为smb的包,17-20为NTLM认证的包,一个一个看
# SMB
客户端向服务器发送smb协商1,请求包中包含客户端支持的smb协议版本
服务端返回smb Response 1,包含它所支持的smb版本
然后客户端根据服务端返回的smb版本选择一个两者通用的发送协商smb Request 2
服务端回应smb Response 2
这里我其实没弄明白为什么要发四个包,按理说前两个包已经拿到了客户端和服务端支持的smb版本,第三个包直接认证就行了,但是还进行了smb Request2,不是脱裤子放屁吗?
然后我对比了两个Request和respons,发现在两个Response中的 Dialect 字段不太一样。
再仔细看Request2中只发送了两个smb版本
大胆猜测
- smb req 1 发送所有支持的协议版本
- smb resp 1 返回期望的smb版本 即上图中Dialect字段 SMB2 wildcard
- smb req 2 客户端发现本地有两个smb V2的版本,得重新协商用哪个,就把本地所有的smb V2的版本全发过去
- smb resp 2 就高不就低 服务端返回 SMB 2.1
# NTLM认证
NTLMSSP_NEGOTIATE Request 发送一些版本信息给服务端协商协议版本
NTLMSSP_NEGOTIATE Response 返回 NTLMSSP_Challenge 包含一个16位随机数Challenge。
客户端接收到Challenge之后,使用用户NTLM Hash与Challenge进行加密运算得到Response,将Response,username,Challenge发给服务器。消息中的Response是最关键的部分,因为它向服务器证明客户端用户已经知道帐户密码。
其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash。
继续第三个请求包
客户端发送刚才加密计算的Response,username,Challenge给服务端,这里的Challenge是客户端重新生成的一个随机的nonce,不同于上一个相应包中的Challenge。
MIC是校验和,设计MIC主要是为了防止这个包中途被修改。session_key是在要求进行签名的时候用的,用来进行协商加密密钥。
第四个请求包表示验证通过。当使用错误的用户名密码net use时,会验证失败。如图
# Net-NTLM Hash
在请求包19中的Response根据系统版本被分为六种响应类型
- LM(LAN Manager)响应 - 由大多数较早的客户端发送,这是“原始”响应类型。
- NTLMv1响应 - 这是由基于NT的客户端发送的,包括Windows 2000和XP。
- NTLMv2响应 - 在Windows NT Service Pack 4中引入的一种较新的响应类型。它替换启用了NTLMv2的系统上的NTLM响应。
- LMv2响应 - 替代NTLMv2系统上的LM响应。
- NTLM2会话响应 - 用于在没有NTLMv2身份验证的情况下协商NTLM2会话安全性时,此方案会更改LM NTLM响应的语义。
- 匿名响应 - 当匿名上下文正在建立时使用; 没有提供实际的证书,也没有真正的身份验证。
这六种使用的加密流程一样,都是前面我们说的 Challenge/Response 验证机制,区别在Challenge和加密算法不同。
- Challage:NTLM v1的Challenge有8位,NTLM v2的Challenge为16位。
- Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。
根据LmCompatibilityLevel的安全设置来决定发送哪个响应,默认如下
- Windows 2000 以及 Windows XP: 发送 LM & NTLM 响应
- Windows Server 2003: 仅发送 NTLM 响应
- Windows Vista、Windows Server 2008、Windows 7 以及 Windows Server 2008 R2及以上: 仅发送 NTLMv2 响应
Net-NTLM Hash v1的格式为:
|
|
Net-NTLM Hash v2的格式为:
|
|
Challenge为NTLM Server Challenge,domian由数据包内容获得(IP或者机器名),HMAC-MD5对应数据包中的NTProofStr。
blob对应数据包中Response去掉NTProofStr的后半部分,拼接NTLM v2 Hash为
|
|
Hashcat破解就行了。
|
|
# 参考
- https://payloads.online/archivers/2018-11-30/1
- https://daiker.gitbook.io/windows-protocol/NTLM-pian/4
- Windows下的密码hash——NTLM hash和Net-NTLM hash介绍
- http://davenport.sourceforge.net/NTLM.html
- https://www.cnblogs.com/artech/archive/2011/01/25/NTLM.html
- https://www.cnblogs.com/yuzly/p/10480438.html
文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。
如果你觉得这篇文章对你有所帮助,欢迎赞赏或关注微信公众号~