NTML协议

LM Hash&NTML Hash

windows内部是不保存明文密码的,只保存密码的hash值

本机的用户密码hash是放在本地的SAM文件里面,域内用户的密码hash存在域控的NTDS.DIT文件的。

windows密码hash保存模式,类似如下

1
Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0:::

AAD3B435B51404EEAAD3B435B51404EELM hash

31D6CFE0D16AE931B73C59D7E0C089C0NTML hash

LM hash (LAN Manager Hash) 老密码

LM Hash 的算法

  1. 将用户密码转化为大写,再将转化后的密码转化成十六进制字符串,不足14字节将会使用0再末尾补全。
  2. 上一步得到的十六进制字符串分成两个7byte的部分,每部分转化成byte流,长度为56bit,长度不足的使用0在左边补齐。
  3. 再分为7bit一组,每组末尾加0,凑足8bit,重新组回两组。
  4. 上步骤得到的二组,分别作为Key对KGS!@#$%进行DES加密。
  5. 加密后的两组拼接到一起,得到最终的LM Hash

LM Hash的一些弊端

  • 密码方面的限制
    • 密码长度最大只能为14个字符
    • 密码不区分大小写
  • 加密过程中的一些漏洞
    • 如果密文的后半部分是aad3b435b51404ee,那么就意味着,这个密码的长度是小于等于7位的,密码强度大大减少
    • des密码强度并不高

NTLM hash

NTLM hash 的算法

  1. 将用户的密码转化成16进制形式
  2. 把转化成16进制的密码进行unicode编码
  3. 使用MD4摘要算法对上一步得到的unicode编码进行hash计算

NTLM hash本地的认证

当用户注销、重启、锁屏之后,windows会让winlogon显示登陆界面,接收用户的输入之后,会将将密码交付给lsass进程,这个进程会将明文密码加密成NTLM hash,再与SAM数据库里对应的用户密码做对比。

  • winlogon(Windows logon process)windows注册进程:是windows NT 用户的登陆程序,用于管理用户的登陆与退出

  • lsass( Local Security Authority Service): 用于本地安全与登陆策略

  • SAM(Security Account Manager 安全账户管理):windows采用的账户管理策略,这个策略会将本地组的用户的账户和hash加密之后保存到SAM数据库中,SAM数据库文件路径是%systemroot%\system32\config\SAM文件

NTLM 身份验证机制

NTLM 身份验证采用的是 Challenge(挑战)/Response(响应)验证机制,有三步组成:协商,质询,身份验证

客户机与服务器的交互过程示意图(域控不参加的情况)

image-20201111174315667

  • 协商:Client会发送一个带有用户信息(用户名)和服务器请求的功能列表
  • 质询:Server对Client发出的协商 做出回应,返回的内容包含服务器同意并且支持的功能列表,更重要的是包含了服务器产生的challenge
  • 身份验证:Client对Server返回的质询 做出回应,使用根具输入的密码生成的NTMLM hash质询 中的challenge进行加密运算得到response,然后将response、用户名、challenge一起返回给Server

关于challenge:服务端生成的一个随机字符用于验证Client的身份,NTLM v1中为8位,NTLM v2中为16位

关于Net-NTML hash:基于用户hash经过一定算法产生的。

关于response:本质上就是一个net-NTLM hash