NTLM篇

NTLM篇

LM Hash

原始密码在任何情况下都不能被缓存,这是一条基本的安全准则

LM-Hash  密码123456
1.用户的密码被限制为最多14个字符
2.用户的密码转换为大写  123456 -> 123456
3.转化为16进制 123456 -> 313233343536 //可以使用php的bin2hex('123456')实现
4.不足14字节用0补齐  313233343536 -> 3132333435360000000000000000
5.固定长度的密码被分成两个7byte部分 3132333435360000000000000000->31323334353600和00000000000000
6.转化为比特流(16进制) 31323334353600-> 7.110001001100100011001100110100001101010011011000000000
8.长度不足56bit使用0在左边补齐长度  00110001001100100011001100110100001101010011011000000000
9.再分7bit为一组末尾加0
0011000 0
1001100 0
1000110 0
0110011 0
0100001 0
1010100 0
1101100 0
0000000 0
10.拼接对应0011000010011000100011000110011001000010101010001101100000000000
11.再转化为16进制30988C6692C8D000(字母要大写) 同理00000000000000转化为0000000000000000
12.30988C6692C8D000和0000000000000000作为密钥分别为4B47532140232425(KGS!@#$%的16进制)加密
13.讲密文拼接即可
注意:一个字节可以用两个16进制表示

python实现LM-HASH脚本

算法存在的一些漏洞

  • 密码长度最大只能为14个字符

  • 密码不区分大小写。在生成哈希值之前,所有密码都将转换为大写

  • 如果密码强度是小于7位,那么第二个分组加密后的结果肯定是aad3b435b51404ee,如果我们看到lm hash的结尾是aad3b435b51404ee,就可以很轻易的发现密码强度少于7位

  • 一个14个字符的密码分成7 + 7个字符,并且分别为这两个半部分计算哈希值。这种计算哈希值的方式使破解难度大大降低

  • Des密码强度不高

LAN Manager Challenge/Response

LAN Manager Challenge/Response 验证机制,简称LM。该方案比NTLM响应时间更早,安全性更低。

NTLM Hash

从Windows Vista 和 Windows Server 2008开始,默认情况下只存储NTLM Hash,LM Hash将不再存在

计算

NTLM身份验证

Net-ntlm hash

指网络环境下的NTLM认证中的Hash

在NTLM协议中,NTLM响应就分为NTLM v1,NTLMv2,NTLM session v2三种协议,不同协议使用不同格式的Challenge和加密算法

所以也就存在不同协议的Net-NTLM hash,即Net-NTLM v1 hash,Net-NTLM v2 hash,这一类hash不能用于PTH,但是能够暴力破解出密码

从response提取NTLMv2

这里的challenge是type2 服务器返回的challenge不是type3 流量包里面的client Challenge

就是7ac429882efc7e29

HMAC-MD5对应数据包中的NTProofSt

00a9055c4007c7eb1c1386504d0a7162

blob就是response 减去NTP1roofStr。(因为在计算response 的时候,response 就是由NTProofStr加上blob)

就是0101000000000000772eaacee59dd5014b484239683639570000000001000c00570049004e0037002d00310002000800540045005300540003002200570049004e0037002d0031002e0074006500730074002e006c006f00630061006c000400140074006500730074002e006c006f00630061006c000500140074006500730074002e006c006f00630061006c0007000800772eaacee59dd5010900160063006900660073002f00570049004e0037002d0031000000000000000000

所以最后的ntlm v2 hash是win7::test.local:7ac429882efc7e29:00a9055c4007c7eb1c1386504d0a7162:0101000000000000772eaacee59dd5014b484239683639570000000001000c00570049004e0037002d00310002000800540045005300540003002200570049004e0037002d0031002e0074006500730074002e006c006f00630061006c000400140074006500730074002e006c006f00630061006c000500140074006500730074002e006c006f00630061006c0007000800772eaacee59dd5010900160063006900660073002f00570049004e0037002d0031000000000000000000

SSP&SSPI

SSP可作为后门

LmCompatibilityLevel

安全问题

  • 在type 3 计算response是,客户端使用用户hash计算,不使用明文密码,就造成了pass the hash

  • 在ntlm认证时,出现中间人转发认证消息,认证完成后中间人就有了访问的权限,即ntlm relay

  • 在type2返回challenge时还返回了操作系统,主机名,netbios名等等,可以进行信息收集

参考

https://daiker.gitbook.io/windows-protocol/ntlm-pian

https://xz.aliyun.com/t/2445

Last updated