Windows认证流程

用户通过 winlogon.exe 输入密码, lsass.exe 进程接收密码明文后,会存在内存之中(这也是为什么mimikataz能dump出明文密码的原因)并将其加密,拿加密后的结果和SAM中存储的结果进行比较认证

LM Hash

描述

LM Hash是一个密码哈希算法,用于在早期版本的Windows操作系统(Windows NT之前)中存储用户密码。它是由Microsoft设计的,它的长度限制是14个字符(若超过14字符则只取前14个字符)

加密流程:

1.将所有的小写字母转为大写字母

如 123ABC

2.将密码转为16进制,分两组,一组7字节,并填充为14个字节(不足用0填充),空余位使用0x00字符填充

31323341424300 00000000000000

3.将每组转化为比特流,不足56Bit则在左边补0

00110001001100100011001101000001010000100100001100000000 00000000000000000000000000000000000000000000000000000000

4.将比特流按照7比特一组,分出8组,末尾加0

0011000 0
1001100 0
1000110 0
0110100 0
0001010 0
0001001 0
0000110 0
0000000 0

右边则为全0

5.将每组比特流转换为16进制作为key,使用DES加密KGS!@#$%

两组DES的加密结果:

48d7eb912f5e697c aad3b435b51404ee

那么LM Hash就是

48d7eb912f5e697caad3b435b51404ee

缺陷

1.密码不区分大小写

2.密码长度最长只能为14个字符,不足的丢弃

3.当密码长度小于等于7位时,右边的全为0,因此加密后右半部分为固定的aad3b435b51404ee,也就是说若右半部分为aad3b435b51404ee则可以判断密码小于等于7位

4.哈希值没有加盐就进行验证,这使其容易受到中间人的攻击,例如哈希传递,还允许构建彩虹表

NTLM

微软提出的WindosNT Challenge/Response挑战响应验证机制,称为NTLM

流程

1.Server接受到Client发送的用户名后,判断本地账户列表是否有该用户名,若没有则返回认证失败。如果有,则生成Challenge(随机数),并且从本地查找该用户对应的NTLM Hash,使用NTLM Hash加密Challenge,生成Net-Ntlm Hash存在内存中,并将Challenge发送给Client

2.Client接受到Challenge后,将自己提供的密码转为NTLM Hash,并使用该Ntlm Hash加密Challenge,得到的结果称为Response,其表现形式为Net-Ntlm Hash,然后将Response发送给Server

3.Server接受到Client发送的Response后,将Response与之前的Net-NTLM Hash进行对比,若一致则认证通过

NTLM v2

NTLM v2与v1最显著对区别就是Challenge与加密算法不同。相同点为加密的原材料均为NTLM Hash

NTLM v1的Challenge只有8位,NTLM v2的Challenge为16位

NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5