Windows密码的网络认证---基于挑战响应认证的NTLM协议

一,网络认证NTLM协议简介

在平时的测试中,经常会碰到处于工作组的计算机,处于工作组的计算机之间是无法建立一个可信的信托机构的,只能是点对点进行信息的传输。

举个例子就是,主机A想要访问主机B上的资源,就要向主机B发送一个存在于主机 B上的一个账户,主机B接收以后会在本地进行验证,如果验证成功,才会允许主机A进行相应的访问。

NTLM 协议是一种基于 挑战(Challenge)/ 响应(Response) 认证机制,仅支持Windows的网络认证协议。

它主要分为协商、质询和验证三个步骤:

  • 协商,这个是为了解决历史遗留问题,也就是为了向下兼容,双方先确定一下传输协议的版本等各种信息。
  • 质询,这一步便是Challenge/Response认证机制的关键之处,下面会介绍这里的步骤。
  • 验证,对质询的最后结果进行一个验证,验证通过后,即允许访问资源。

二,基本的流程

认证成功

首先,client会向server发送一个username,这个username是存在于server上的一个用户;

接着会在本地查询是否存在这样的一个用户,如果存在,将会生成一个16位的随机字符,即challenge,然后用查询到的这个username的NTLM hash和challenge进行加密,生成challenge1,将challenge1存储在本地,并将 challenge传给client;

当client接收到challenge时,将发送的username所对应的NTLM hash对challenge进行加密即response,并 response发送给server;

server在收到response后,将其与challenge1进行比较,如果相同,则验证成功;

如果不相同,则验证失败;

认证失败

首先,client会向server发送一个username,这个username是存在于server上的一个用户;

当server接收到这个信息时,首先会在本地查询是否存在这样的一个用户,如果不存在,则直接返回认证失败;

三,NTLM协议v1和v2区别

NTLM v1

  • 安全性较低:NTLM v1的认证过程相对简单,安全性较低。它容易受到中间人攻击和重放攻击等。
  • 认证机制:在NTLM v1中,客户端首先向服务器发送一个包含用户名(以明文形式)和挑战消息的请求。服务器接收到这个请求后,会用自己的密钥对这个挑战消息进行加密,并发送给客户端作为响应。客户端随后会用自己的密钥对挑战消息进行加密,并将这个加密后的消息发送给服务器进行验证。

NTLM v2

  • 增强的安全性:相较于NTLM v1,NTLM v2提供了更强的安全性。它引入了对响应消息的额外加密层,使得攻击者更难破解。
  • 改进的认证机制:在NTLM v2中,客户端和服务器之间的挑战和响应过程更加复杂。除了挑战消息外,还引入了目标信息(如服务器名称和域名)和时间戳,这些都被加入到加密计算中。这增加了攻击者伪造有效响应的难度。
  • 兼容性:尽管NTLM v2提供了更强的安全性,但它仍然需要与旧的系统和应用程序兼容。因此,许多现代Windows系统同时支持NTLM v1和v2,但默认情况下可能更倾向于使用v2进行认证。

四,抓包测试

实验环境:

server2019:192.168.20.153

server2008:192.168.20.154

在2019这个机器上已经安装wireshark;

在2008上已经存在一个管理员用户,为Administrator用户;

密码为com.1234;

使用下面的命令进行网络连接;

复制代码
net use \\192.168.20.154 /u:Administrator com.1234

使用wireshark进行抓包;

接下来分析抓到的数据包;

接下来根据NTLMv2格式,找出各个字段对应的值;

复制代码
username::domain:challenge:HMAC‐MD5:blob

username:对应数据包中 user name
domain:对应数据包中的 Domain name
HMAC‐MD5:对应数据包中的NTProofStr
blob:数据库包中rsponse去掉HMAC‐MD5的值

10号数据包发送username和password;

11号返回challenge;

12号返回response的数据包;

复制代码
username:Administrator
domain:ADMIN
复制代码
challenge:afa477384221e315
复制代码
NTProofStr:24f00e683ff25a2163601ccc751ba732
rsponse:24f00e683ff25a2163601ccc751ba732010100000000000063af3e97b02edb0160c9af9d01a6f7c20000000002000a00410044004d0049004e0001001400530045005200560045005200320030003000380004001200610064006d0069006e002e0063006f006d000300280053006500720076006500720032003000300038002e00610064006d0069006e002e0063006f006d0005001200610064006d0069006e002e0063006f006d000700080063af3e97b02edb0106000400020000000800300030000000000000000100000000200000219d0a74dcdbdf803b0712aab3af7d3cc94960eaaf5d459b1e46bd5c4a0793fd0a001000000000000000000000000000000000000900260063006900660073002f003100390032002e003100360038002e00320030002e00310035003400000000000000000000000000

接下来构造NTLMv2格式;

复制代码
Administrator::ADMIN:afa477384221e315:24f00e683ff25a2163601ccc751ba732:010100000000000063af3e97b02edb0160c9af9d01a6f7c20000000002000a00410044004d0049004e0001001400530045005200560045005200320030003000380004001200610064006d0069006e002e0063006f006d000300280053006500720076006500720032003000300038002e00610064006d0069006e002e0063006f006d0005001200610064006d0069006e002e0063006f006d000700080063af3e97b02edb0106000400020000000800300030000000000000000100000000200000219d0a74dcdbdf803b0712aab3af7d3cc94960eaaf5d459b1e46bd5c4a0793fd0a001000000000000000000000000000000000000900260063006900660073002f003100390032002e003100360038002e00320030002e00310035003400000000000000000000000000

在kali中使用命令进行爆破;(拥有一个强大的字典)

复制代码
john --format=netntlmv2 1.txt --wordlist=rockyou.txt

这样就得到了账户的密码;

相关推荐
2501_936415694 小时前
可变参数&综合练习&斗地主游戏
java·windows·游戏
全云在线allcloudonline7 小时前
等保服务公司能提供什么?广东创云科技一站式等保流程解析
网络安全·等保·企业服务
SmileAndFun9 小时前
护网演练中安全检测与监测的常见失效点及闭环方案
网络安全·等保
西安景驰电子10 小时前
PCIe 授时卡原理及应用
运维·服务器·windows·单片机·嵌入式硬件·fpga开发
wardenlzr11 小时前
VSCode 运行 Live Server 提示「Windows 找不到文件 Chrome」问题全解析
chrome·windows·vscode
好好沉淀13 小时前
Windows 下升级 Maven 3.6.1 到 3.9.9 踩坑全记录
java·windows·maven
weixin_4365250713 小时前
Windows 上终止占用的端口进程
windows
古道青阳13 小时前
Duilib 技术全景剖析
c++·windows
Chengbei1114 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
jing.wang_202514 小时前
NVIDIA CUDA C++编程环境搭建--Windows + Ubuntu 22.04
c++·windows·ubuntu·gpu算力