NTLM协议
Windows本地认证#
当我们开机登录输入密码的时候,系统会将我们输入的明文密码加密成NTLM hash,此时再同sam文件里的值进行对比,如果相同,则登录成功。NTLM hash的前身是LM hash,SAM文件中存储的就是密码的哈希值
默认路径:C:\Windows\System32\config\SAM
NTLM hash 的产生:明文->hex编码->Unicode编码->MD4
,py中有NTLM库可以直接实现
windows 网络认证#
在内网渗透中,经常会遇到工作组环境,而工作组环境是一个逻辑上的网络环境(局域网工作区),因为在工作组中并不存在一个信托机构,所以隶属于工作组的机器之间是无法建立一个完美的信任机制的,只能点对点进行认证
假如在一个工作组中有a,b两个机器,a想远程访问b上的文件,那么这个时候a机器的操纵者则需要将一个存在于b机器上的账户凭证发送给b机器,经过认证后才能访问。
最常见的服务:445端口的smb服务
smb协议:一个用于进行共享文件资源的一个协议
NTLM(NT LAN Manager)协议#
早期smb协议在网络上传输明文口令,后来出现LAN Manager Challenge/Response 验证机制,简称LM,由于他的不安全性,微软在后面的更新中提出了windowsNT挑战/响应验证机制,称之为NTLM。发展到现在已经有了更新的NTLM V2以及Kerberos验证体系。
smb协议本身只提供了资源相关的共享服务,在认证方面,采用的是NTLM协议,可以类比我们远程访问windows的共享文件夹时,在认证我们身份的方面,也是采用的NTLM协议,在windows的好多服务的"认证层"上,使用的都是我们的NTLM协议。当然如果是在域内,认证方面会采用kerberos协议进行认证
NTLM协议的认证过程分为三步:#
1、协商#
客户端主要在这一步向服务端确认协议的版本,是NTLM v1还是NTLM v2还是其他的比如LM协议。
NTLM v1与NTLM v2的差别
NTLM v1与NTLM v2最大的差别就是challenge与加密算法不同
challenge:NTLM v1的challenge有8位,NTLM v2的challenge有16位
Net-NTLM hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5
2、质询#
就是挑战/响应认证机制起作用的范畴
质询的完整过程:
(1)客户端向服务端发送用户信息(用户名)请求
(2)服务器接受到请求,判断本地账户列表是否有用户名,如果有,生成一个16位的随机数,被称之为“Challenge”,使用登陆用户名对应NTLM Hash加密Challenge(16位随机字符),生成Challenge1,生成一个Net-NTLM Hash存在内存中,同时,生成Challenge1后,将Challenge(16位随机字符)发送给客户端。
(3)客户端接收到Challenge后,使用将要登陆的账户对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。
(4)验证,服务器接收到客户端的Response后,对比Challenge1与Response是否相等,若相等,则认证通过。
3、验证#
wireshark 对NTLM协议抓取并获取Net-NTLMhash#
1.访问共享#
主机192.168.16.20访问主机192.168.16.10的共享
2.数据抓取#
抓到的数据包,这里也可以看到,访问共享是基于SMB协议的。Negotiate Protocol Response,是进行协商
下面这条数据包,服务器向客户端返回16位长的challenge
接着下一条数据,客户端将发送的用户名所对应的NTLM hash对Chalenge进行加密得到Response,即这里的 “ntlmv2_response” 的值。
3. Net-NTLMhash格式介绍及拼接#
NTLMv2的格式为:username::domain:challenge:NTProofStr:blob
username就是你发送过去账号名 domain即host name
其中 response由 NTProofStr+blob两部分组成, blob对应数据包中Response去掉NTProofStr的后半部分
接下来使用hashcat爆破即可
hashcat使用#
kali中自带该工具
使用hashcat破解Net-NTLMhash
-m:hash-type,5600对应NetNTLMv2,详细参数可查表:https://hashcat.net/wiki/doku.php
-o:输出文件
字典文件为zd.txt
--force代表强制执行,测试系统不支持Intel OpenCL
记得内存一定内存在4GB以上,不然会跑不出来!!!
找到该题的Net-NTLM-v2-Hash值为:administrator::WIN2008:8c6ed1811a3f7dae:231ba3ca5560858acb0085e255d8d626:0101000000000000e5bf79e972f7d901ba794888efa8b8e800000000020008004800410043004b000100040044004300040010006800610063006b002e0063006f006d0003001600440043002e006800610063006b002e0063006f006d00050010006800610063006b002e0063006f006d0007000800e5bf79e972f7d9010600040002000000080030003000000000000000000000000030000046fc5f0d124bc9b99b5b560c14cd7c7e217f08f22ef5f223679ec2c576230fa30a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e00310036002e0031003000000000000000000000000000
这里我们使用rockyou字典
将Admin@123加密一下,得到0e7517141fb53f21ee439b355b5a1d0a,即为flag!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)