Windows 下的密码 hash —— Net-NTLMv1 介绍
0x00 前言
在之前的文章 Windows 下的密码 hash——NTLM hash 和 Net-NTLM hash 介绍 分别对 NTLM hash 和 Net-NTLMv2 hash 做了介绍,对于 Net-NTLMv2 的上一个版本 Net-NTLMv1,在安全性上相对来说更脆弱,具体脆弱在哪里呢?本文将要进行介绍
0x01 简介
本文将要介绍以下内容:
- Net-NTLMv1 的加密方法
- Net-NTLMv1 的破解思路
- Net-NTLMv1 的利用思路
0x02 Net-NTLMv1 的加密方法
对比 Net-NTLMv2,Net-NTLMv2 的加密流程如下:
- 客户端向服务器发送一个请求
- 服务器接收到请求后,生成一个 16 位的 Challenge,发送回客户端
- 客户端接收到 Challenge 后,使用登录用户的密码 hash 对 Challenge 加密,作为 response 发送给服务器
- 服务器校验 response
Net-NTLMv1 的加密流程如下:
- 客户端向服务器发送一个请求
- 服务器接收到请求后,生成一个 8 位的 Challenge,发送回客户端
- 客户端接收到 Challenge 后,使用登录用户的密码 hash 对 Challenge 加密,作为 response 发送给服务器
- 服务器校验 response
两者的流程相同,但加密算法不同,Net-NTLMv1 相对脆弱
Net-NTLMv1 response 的计算方法比较简单,方法如下(目前 LM hash 很少接触,不考虑):
将用户的 NTLM hash 分成三组,每组 7 比特(长度不够末尾填 0),作为 3DES 加密算法的三组密钥,加密 Server 发来的 Challenge
详情可参考:http://davenport.sourceforge.net/ntlm.html
0x03 Net-NTLMv1 的破解思路
1、捕获 Net-NTLMv1 数据包,提取关键数据,使用 hashcat 进行字典破解
服务器:
- 系统: Server2008 x64
- IP: 192.168.62.144
- 登录用户名: log1
- 登录密码: logtest123!
客户端:
- 系统: Win7 x64
- IP: 192.168.62.137
修改注册表开启 Net-NTLMv1:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 0 /f
注:
自 Windows Vista/Server2008 开始,系统默认禁用 Net-NTLMv1,使用 Net-NTLMv2
仅修改客户端即可,服务器不用修改
客户端通过命令行远程连接服务器,命令如下:
net use \\192.168.62.144 /u:log1 logtest123!
注:
通过界面访问 \\192.168.62.144
的文件共享,会多一步验证操作,使用当前用户的口令进行验证
客户端运行 Wireshark,捕获数据包,如下图
前四个数据包对应 NTLM 认证的四个步骤
查看第二个数据包,获得 Challenge,为 8d2da0f5e21e20ee
,如下图
查看第三个数据包,获得 LM Response 数据为 fec9b082080e34ba00000000000000000000000000000000
,获得 NTLM Response 数据为 51acb9f9909f0e3c4254c332f5e302a38429c5490206bc04
,username 为 a
,hostname 为 WIN-BH7SVRRDGVA
,如下图
这里做一个对比,如果是 Net-NTLMv2,Response 数据多一项 NTLMv2 Response,如下图
下面,使用 Hashcat 对该 Net-NTLM v1 进行破解
NTLMv1 的格式为:username::hostname:LM response:NTLM response:challenge
构造后的数据如下:log1::WIN-BH7SVRRDGVA:fec9b082080e34ba00000000000000000000000000000000:51acb9f9909f0e3c4254c332f5e302a38429c5490206bc04:8d2da0f5e21e20ee
Hashcat 参数如下:
hashcat -m 5500 log1::WIN-BH7SVRRDGVA:fec9b082080e34ba00000000000000000000000000000000:51acb9f9909f0e3c4254c332f5e302a38429c5490206bc04:8d2da0f5e21e20ee /tmp/password.list -o found.txt --force
说明:
- -m: hash-type,5500 对应 NetNTLMv1,详细参数可查表: https://hashcat.net/wiki/doku.php?
- -o: 输出文件,字典文件为/tmp/password.list
- –force 代表强制执行,测试系统不支持 Intel OpenCL
成功破解出登录的明文密码,输出如下图
2、使用 Responder 等中间人攻击工具,控制 Challenge 为固定值 1122334455667788
可借助彩虹表还原出口令的 NTLM hash
例如获得了如下 NetNTLMv1 hash:a::WIN-BH7SVRRDGVA:aebc606d66e80ea649198ed339bda8cd7872c227d6baf33a:aebc606d66e80ea649198ed339bda8cd7872c227d6baf33a:1122334455667788
LM hash 为 aebc606d66e80ea649198ed339bda8cd7872c227d6baf33a
访问网站 https://crack.sh/get-cracking/,使用免费的彩虹表进行破解
填入的格式如下:NTHASH:aebc606d66e80ea649198ed339bda8cd7872c227d6baf33a
接着填入邮箱地址,提交后,在很短的时间(1 分钟以内) 会收到邮件,提示破解成功
参考资料:https://crack.sh/netntlm/
如下图
破解出的 ntlm hash 为 d25ecd13fddbb542d2e16da4f9e0333d
,用时 45 秒
使用 mimikatz 获得该用户的 ntlm hash,对比结果相同,如下图
0x04 Net-NTLMv1 的利用思路
由于 Net-NTLMv1 的脆弱性,在控制 Challenge 后可以在短时间内通过彩虹表还原出用户的 ntlm hash,所以在利用上首选的是将 Win7 环境下的默认 Net-NTLMv2 降级到 Net-NTLMv1,获取本机的通信数据,还原出 ntlm hash,实现工具: InternalMonologue
下载地址:https://github.com/eladshamir/Internal-Monologue
通过修改注册表使 Net-NTLMv2 降级到 Net-NTLMv1,获得正在运行的用户 token,模拟用户同 NTLM SSP 进行交互,控制 Challenge 为固定值 1122334455667788
,导出返回的 Net-NTLMv1 response
注:
修改注册表需要管理员权限
修改注册表开启 Net-NTLMv1:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 2 /f
为确保 Net-NTLMv1 开启成功,还需要修改两处注册表键值:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\ /v NtlmMinClientSec /t REG_DWORD /d 536870912 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\ /v RestrictSendingNTLMTraffic /t REG_DWORD /d 0 /f
获得的结果可以通过访问网站 https://crack.sh/get-cracking/,使用免费的彩虹表进行破解,不再赘述
优点:
- 这种方式不会对 lsass.exe 进程进行操作
- 同本地 NTLM SSP 进行交互,不会产生流量
- 没有进行 NTLM 认证,不会产生日志
补充:
如果以普通用户权限执行 InternalMonologue,能够获得当前用户权限的 Net-NTLMv2 数据包,通过 hashcat 进行破解,能获得当前用户的明文口令
如上图,获得 Net-NTLMv2 的数据包如下:a::WIN-BH7SVRRDGVA:1122334455667788:db18ac502e829dfab120e78c041e2f87:01010000000000008e2ddebb92c2d30175f9bda99183337900000000020000000000000000000000
使用 hashcat 进行字典破解,参数如下:hashcat -m 5600 a::WIN-BH7SVRRDGVA:1122334455667788:db18ac502e829dfab120e78c041e2f87:01010000000000008e2ddebb92c2d30175f9bda99183337900000000020000000000000000000000 /tmp/password.list --force
成功破解,如下图
0x05 防御思路
自 Windows Vista 起,微软默认使用 Net-NTLMv2 协议,想要降级到 Net-NTLMv1,首先需要获得当前系统的管理员权限
而对于 Net-NTLMv2 协议,即使抓到了通信数据包,只能对其进行字典攻击或是暴力破解,破解的概率不是很高
综上,自 Windows Vista 起,系统默认使用的 Net-NTLMv2 协议在安全性上能够保证
0x06 小结
本文对 Net-NTLMv1 的加密方法和破解思路进行了介绍,分析测试了工具 InternalMonologue,通过 InternalMonologue 能在普通用户权限下获得 Net-NTLMv2 数据,这个功能非常棒。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
下一篇: Covenant 利用分析
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论