系统版本对LM和NTLM的支持

image.png

NTLM 认证

简介

NTLM是NT LAN Manager的缩写,NTLM是指telnet的一种验证身份方式,即问询/应答身份验证协议

认证流程

进行一个嫌弃自己的字好丑
image.png

这就是我理解的并且画的流程图

  1. 用户登录客户端,进行本地认证
  2. 客户端首先在本地将当前用户的密码加密为HTLM Hash
  3. 确认双方协议版本,客户端向服务器明文发送自己的账号
  4. 服务器返回一个十六位随机数,也就是图中的challenge
  5. 客户端需要使用本地的NTLM Hash来加密这个challenge并发回给服务器,也就是图中的response
  6. 服务器将明文的用户名、challenge、response发给域控制器(DC
  7. 域控制器用这个用户名在SAM密码管理库中找此用户对应的NTLM Hash
  8. 用这个NTLM Hash来加密服务器发过来的与发给用户端一样的challenge,与服务器端传过来的response进行对比,如果相同,那么就认证成功

本地认证

Windows不会储存用户的明文密码,而是将明文密码加密后储存在SAM中

本地认证的过程中,用户登录时,系统会自动将用户输入的明文密码加密为NTLM Hash,然后和SAM中的NTLM Hash进行比较

NTLM Hash的生成

hhhh这个过程还算好吧,无非就是代码写了好多行突然发现可以五行之内解决)

1
2
3
4
5
6
7
import hashlib,binascii

hash = hashlib.new('md4', "fault".encode('utf-16le')).digest()

print(hash)

print(binascii.hexlify(hash))

之前很迫切的没有用内置的方法去搞它,一直在那里进行一个手搓,嘛,最后的脚本在上面辣
]()