Windows 下的密码 hash —— Net-NTLMv1 介绍

发布于 2024-11-07 22:18:23 字数 7388 浏览 4 评论 0

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 的加密流程如下:

  1. 客户端向服务器发送一个请求
  2. 服务器接收到请求后,生成一个 16 位的 Challenge,发送回客户端
  3. 客户端接收到 Challenge 后,使用登录用户的密码 hash 对 Challenge 加密,作为 response 发送给服务器
  4. 服务器校验 response

Net-NTLMv1 的加密流程如下:

  1. 客户端向服务器发送一个请求
  2. 服务器接收到请求后,生成一个 8 位的 Challenge,发送回客户端
  3. 客户端接收到 Challenge 后,使用登录用户的密码 hash 对 Challenge 加密,作为 response 发送给服务器
  4. 服务器校验 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,捕获数据包,如下图

Alt text

前四个数据包对应 NTLM 认证的四个步骤

查看第二个数据包,获得 Challenge,为 8d2da0f5e21e20ee ,如下图

Alt text

查看第三个数据包,获得 LM Response 数据为 fec9b082080e34ba00000000000000000000000000000000 ,获得 NTLM Response 数据为 51acb9f9909f0e3c4254c332f5e302a38429c5490206bc04 ,username 为 a ,hostname 为 WIN-BH7SVRRDGVA ,如下图

Alt text

这里做一个对比,如果是 Net-NTLMv2,Response 数据多一项 NTLMv2 Response,如下图

Alt text

下面,使用 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

成功破解出登录的明文密码,输出如下图

Alt text

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/

如下图

Alt text

破解出的 ntlm hash 为 d25ecd13fddbb542d2e16da4f9e0333d ,用时 45 秒

使用 mimikatz 获得该用户的 ntlm hash,对比结果相同,如下图

Alt text

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/,使用免费的彩虹表进行破解,不再赘述

优点:

  1. 这种方式不会对 lsass.exe 进程进行操作
  2. 同本地 NTLM SSP 进行交互,不会产生流量
  3. 没有进行 NTLM 认证,不会产生日志

补充:

如果以普通用户权限执行 InternalMonologue,能够获得当前用户权限的 Net-NTLMv2 数据包,通过 hashcat 进行破解,能获得当前用户的明文口令

Alt text

如上图,获得 Net-NTLMv2 的数据包如下:a::WIN-BH7SVRRDGVA:1122334455667788:db18ac502e829dfab120e78c041e2f87:01010000000000008e2ddebb92c2d30175f9bda99183337900000000020000000000000000000000

使用 hashcat 进行字典破解,参数如下:hashcat -m 5600 a::WIN-BH7SVRRDGVA:1122334455667788:db18ac502e829dfab120e78c041e2f87:01010000000000008e2ddebb92c2d30175f9bda99183337900000000020000000000000000000000 /tmp/password.list --force

成功破解,如下图

Alt text

Alt text

0x05 防御思路

自 Windows Vista 起,微软默认使用 Net-NTLMv2 协议,想要降级到 Net-NTLMv1,首先需要获得当前系统的管理员权限

而对于 Net-NTLMv2 协议,即使抓到了通信数据包,只能对其进行字典攻击或是暴力破解,破解的概率不是很高

综上,自 Windows Vista 起,系统默认使用的 Net-NTLMv2 协议在安全性上能够保证

0x06 小结

本文对 Net-NTLMv1 的加密方法和破解思路进行了介绍,分析测试了工具 InternalMonologue,通过 InternalMonologue 能在普通用户权限下获得 Net-NTLMv2 数据,这个功能非常棒。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

笑红尘

暂无简介

0 文章
0 评论
732 人气
更多

推荐作者

qq_E2Iff7

文章 0 评论 0

Archangel

文章 0 评论 0

freedog

文章 0 评论 0

Hunk

文章 0 评论 0

18819270189

文章 0 评论 0

wenkai

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文