NTLM在网络环境中采用的是一种Challenge/Response验证机制,由三个消息组成:Type1(协商),Type2(质询),Type3(身份验证)
首先客户端向服务端发送Type1消息去协商需要认证的主体,用户,机器以及需要使用安全服务等信息.
服务端接收到客户端发送的Type1消息后,会生成一个随机的16位Type 2 Challenge消息,本地存储后将Type 2消息发送给客户端.
客户端接收到Type2消息后,使用用户的NTLM Hash对Challenge进行加密得到Net-NTLM Hash(不能直接用来进行PTH,但可以通过暴力破解来获取明文密码),封装到Type3 消息中,发给服务端.
服务端接收到Type3消息后,用自己的密码对NTLM-Hash对Challenge进行加密,并比较自己计算出的Net NTLM Hash与客户端发送的是否匹配,如果匹配则认证成功,否则认证失败.
通过数据包拼接出NTLM hash:username::domain:challenge:HMAC-MD5:blob
username是数据包中User name的值 domain是数据包中Host name的值 HMAC-MD5是数据包中NTProofstr的值 blob则是NTLMv2 Response去掉NTProofstr后的值
NetNTLMv2 hash后,可以利用HashCat对该hash进行破解,还原出明文
hashcat -m 5600 crackme.txt passwordlist.txt HashCat官网:hashcat - advanced password recovery