介绍

NTLM(NT LAN Manager)协议是Windows操作系统中使用的一种身份验证协议。它用于在网络通信中验证用户的身份,提供对网络资源的访问控制,并确保通信的安全性(为用户提供认证,完整性和机密性的一种网络协议)。

由于它的安全性相对较低。因此在较新的Windows版本中,Microsoft引入了更强大和安全性更高的协议,如NTLMv2和Kerberos,以取代NTLM协议。

NTLM是一种挑战/响应(Challenge/Response)形式的消息,主要包括三类消息类型(协商、挑战、验证):

Type1 message (negotiation 协商) :客户端向服务器发送一个包含明文登录用户名的请求,说明自己是谁

cr1

Type2 message (challenge 挑战) :如果当前用户存在,服务端通过NTLM SSP生成一个16位的随机数(即Challenge),明文发送回客户端,服务端使用客户端所声明的用户的密码hash加密Challenge,获得Challenge1

cr2

Type3 message (authentication 验证):客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,生成response,将response发送给服务器

cr3

服务器比较Challenge1和response,如果相同,验证成功。

登录用户的密码hash即NTLM hash,response中包含Net-NTLM hash

Wireshark分析

演示通过net use来建立共享连接,分析NTLM认证的过程。

net use \\172.16.93.2 /u:admin admin123

wireshark

4个数据包,2个来回,刚好对应了上方的4个步骤。

在工作组和域环境的区别

上述过程是在工作组环境中的,如果是域环境,如下图,前4步一样,后续会稍多一点点域控验证的步骤。

img

  1. 由于域机器SAM文件中不存在域用户的NTLM hash,所以服务器将客户端的用户名Challengeresponse通过 Netlogon协议交到域控手中,让域控对其进行身份验证。
  2. 域控通过客户端用户名在自己的ntds.dit中找到对应的NTLM-Hash,对Challenge进行加密,再与NET-NTLM Hash进行对比。如果相同则表示用户拥有的密码是正确的,否则则验证失败,DC将结果返回给服务器。
  3. 服务器根据DC的结果成功与否返回给客户端。

NTLM v1和NTLM v2的区别

NTLM v1与NTLM v2最显著的区别就是Challenge与加密算法不同,共同点就是都使用了NTLM Hash进行加密。

  • Challenge: NTLM v1的Challenge值为8字节,而NTLM v2的Challenge值为16字节。(一般情况下2个字符占用1个字节的空间)
  • 加密算法: NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5

Net-NTLM Hash

Net-NTLM Hash 通常是指网络环境下NTLM认证中的hash,此处是发送的Net-NTLM Hash v2,所以着重讲解v2。

Net-NTLM Hash v1的格式为:

username::hostname:LM Response:NTLM Response:Challenge

Net-NTLM Hash v2的格式为:

username::domain:Challenge:HMAC-MD5:blob

其中Net-NTLM Hash v2通过wireshark得到的数据包构造方式如下:

Challenge:

challenge

username::domain

image-20231009下午91958604

HMAC-MD5:blob

image-20231009下午92413201

所以构建出来的Net-NTLM hash值是:

admin::WIN-P7N8CDK7H73:1182b8d121fcc602:0bf709eef22431f1551086fd076f9527:0101000000000000ef1fd52eacfad901bf19744764952bf60000000002001e004400450053004b0054004f0050002d00390043004100540035003000380001001e004400450053004b0054004f0050002d00390043004100540035003000380004001e004400450053004b0054004f0050002d00390043004100540035003000380003001e004400450053004b0054004f0050002d00390043004100540035003000380007000800ef1fd52eacfad9010600040002000000080030003000000000000000000000000030000013bbdc10ec8a6d513f1f138abdb8a96c176619552956fd74a7aeee29e04c31d20a001000000000000000000000000000000000000900200063006900660073002f003100370032002e00310036002e00390033002e003200000000000000000000000000

为了确保构造的内容正确,尝试使用hashcat对密码进行枚举暴破,使用命令如下:

hashcat -m 5600 admin::WIN-P7N8CDK7H73:1182b8d121fcc602:0bf709eef22431f1551086fd076f9527:0101000000000000ef1fd52eacfad901bf19744764952bf60000000002001e004400450053004b0054004f0050002d00390043004100540035003000380001001e004400450053004b0054004f0050002d00390043004100540035003000380004001e004400450053004b0054004f0050002d00390043004100540035003000380003001e004400450053004b0054004f0050002d00390043004100540035003000380007000800ef1fd52eacfad9010600040002000000080030003000000000000000000000000030000013bbdc10ec8a6d513f1f138abdb8a96c176619552956fd74a7aeee29e04c31d20a001000000000000000000000000000000000000900200063006900660073002f003100370032002e00310036002e00390033002e003200000000000000000000000000 /path/password.list -o result.txt --force

cracked

实战中获取Net-NTLM Hash的方法

常用工具为ResponderInveigh,以Responder为例,只要目标向你或者不存在的主机发起了认证,那么就可以获取到对应的Net-NTLM Hash

sudo responder -I eth0 -w -v

responder

为什么向不存在的主机发起认证也可以获取到Net-NTLM Hash呢?

如下图,当目标的本地和缓存查询不到aaaa时,内网主机就会将未经认证的UDP广播到网络中,询问谁是aaaa,由于该过程未被认证,并且广播到整个网络,从而允许网络 上的任何机器响应并声称自己是aaaa;此时kali伪装成aaaa这台机器,接着进行ntlm认证,从而让受害者交出相应的登陆凭证(Net-NTLMhash)

1

2

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-02-20 10:20:17

results matching ""

    No results matching ""