LM & NTLM
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