6

Windows网络认证NTLM&Net-NTLM Hash

 3 years ago
source link: https://y4er.com/post/ntlm-and-net-ntlm-hash/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
1 min read

Windows网络认证NTLM&Net-NTLM Hash

2020-11-12

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)认证机制起作用的范畴。
  • 验证 验证主要是在质询完成后,验证结果,是认证的最后一步。

整个流程图如下

1.png

使用net use模拟流量请求,因为net use是建立在smb上的,所以会有smb的流量。

2.png

13-22请求包为net use的包,其中13-16为smb的包,17-20为NTLM认证的包,一个一个看

3.png

客户端向服务器发送smb协商1,请求包中包含客户端支持的smb协议版本

4.png

服务端返回smb Response 1,包含它所支持的smb版本

5.png

然后客户端根据服务端返回的smb版本选择一个两者通用的发送协商smb Request 2

6.png

服务端回应smb Response 2

这里我其实没弄明白为什么要发四个包,按理说前两个包已经拿到了客户端和服务端支持的smb版本,第三个包直接认证就行了,但是还进行了smb Request2,不是脱裤子放屁吗?

然后我对比了两个Request和respons,发现在两个Response中的 Dialect 字段不太一样。

7.png

8.png

再仔细看Request2中只发送了两个smb版本 9.png

  1. smb req 1 发送所有支持的协议版本
  2. smb resp 1 返回期望的smb版本 即上图中Dialect字段 SMB2 wildcard
  3. smb req 2 客户端发现本地有两个smb V2的版本,得重新协商用哪个,就把本地所有的smb V2的版本全发过去
  4. smb resp 2 就高不就低 服务端返回 SMB 2.1

NTLM认证

10.png

NTLMSSP_NEGOTIATE Request 发送一些版本信息给服务端协商协议版本

11.png

NTLMSSP_NEGOTIATE Response 返回 NTLMSSP_Challenge 包含一个16位随机数Challenge。

客户端接收到Challenge之后,使用用户NTLM Hash与Challenge进行加密运算得到Response,将Response,username,Challenge发给服务器。消息中的Response是最关键的部分,因为它向服务器证明客户端用户已经知道帐户密码。

其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash。

继续第三个请求包

12.png

客户端发送刚才加密计算的Response,username,Challenge给服务端,这里的Challenge是客户端重新生成的一个随机的nonce,不同于上一个相应包中的Challenge。

MIC是校验和,设计MIC主要是为了防止这个包中途被修改。session_key是在要求进行签名的时候用的,用来进行协商加密密钥。

13.png

第四个请求包表示验证通过。当使用错误的用户名密码net use时,会验证失败。如图

14.png

Net-NTLM Hash

在请求包19中的Response根据系统版本被分为六种响应类型

  1. LM(LAN Manager)响应 - 由大多数较早的客户端发送,这是“原始”响应类型。
  2. NTLMv1响应 - 这是由基于NT的客户端发送的,包括Windows 2000和XP。
  3. NTLMv2响应 - 在Windows NT Service Pack 4中引入的一种较新的响应类型。它替换启用了NTLMv2的系统上的NTLM响应。
  4. LMv2响应 - 替代NTLMv2系统上的LM响应。
  5. NTLM2会话响应 - 用于在没有NTLMv2身份验证的情况下协商NTLM2会话安全性时,此方案会更改LM NTLM响应的语义。
  6. 匿名响应 - 当匿名上下文正在建立时使用; 没有提供实际的证书,也没有真正的身份验证。

这六种使用的加密流程一样,都是前面我们说的 Challenge/Response 验证机制,区别在Challenge和加密算法不同。

  • Challage:NTLM v1的Challenge有8位,NTLM v2的Challenge为16位。
  • Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。

根据LmCompatibilityLevel的安全设置来决定发送哪个响应,默认如下

  1. Windows 2000 以及 Windows XP: 发送 LM & NTLM 响应
  2. Windows Server 2003: 仅发送 NTLM 响应
  3. Windows Vista、Windows Server 2008、Windows 7 以及 Windows Server 2008 R2及以上: 仅发送 NTLMv2 响应

Net-NTLM Hash v1的格式为:

username::hostname:LM Response:NTLM Response:Challenge

Net-NTLM Hash v2的格式为:

username::domain:Challenge:HMAC-MD5:blob

Challenge为NTLM Server Challenge,domian由数据包内容获得(IP或者机器名),HMAC-MD5对应数据包中的NTProofStr。

15.png

blob对应数据包中Response去掉NTProofStr的后半部分,拼接NTLM v2 Hash为

administrator::test:bb7e0cce5b7a719c:40426e2eaa7d7b467855be0881b5d069:01010000000000001111f0f6ae9ed60161e75abd99c8fd2b0000000002000800540045005300540001000400440043000400140074006500730074002e006c006f00630061006c0003001a00440043002e0074006500730074002e006c006f00630061006c000500140074006500730074002e006c006f00630061006c00070008001111f0f6ae9ed601060004000200000008003000300000000000000000000000003000007276a9639bd6e10c91bbc264a284d542e7acb37803ef6a3bf7e3eb9cbf82a2d20a001000000000000000000000000000000000000900200063006900660073002f003100370032002e00310036002e00330033002e003300000000000000000000000000

Hashcat破解就行了。

hashcat -m 5600 administrator::test:bb7e0cce5b7a719c:40426e2eaa7d7b467855be0881b5d069:01010000000000001111f0f6ae9ed60161e75abd99c8fd2b0000000002000800540045005300540001000400440043000400140074006500730074002e006c006f00630061006c0003001a00440043002e0074006500730074002e006c006f00630061006c000500140074006500730074002e006c006f00630061006c00070008001111f0f6ae9ed601060004000200000008003000300000000000000000000000003000007276a9639bd6e10c91bbc264a284d542e7acb37803ef6a3bf7e3eb9cbf82a2d20a001000000000000000000000000000000000000900200063006900660073002f003100370032002e00310036002e00330033002e003300000000000000000000000000 /tmp/password.list --force

16.png

文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK