cmd5.com API 哈希前缀匹配缺陷报告
2026-07-21
加密与解密
00

目录

问题摘要
缺陷一:NTLM 前缀匹配
缺陷二:MD5 前缀匹配
缺陷三:常见口令的匹配阈值更短
影响分析
1. 假阳性与「变相降熵」
2. 单次查询结果不可信
3. 批量任务的数据污染
复现用例摘录
小结

cmd5.com 是国内常用的在线密文查询服务,常被用于 MD5 / NTLM 等不可逆哈希的「反查」明文。本文基于对其查询接口的系统性对照实验,记录一类前缀匹配缺陷:API 并未对完整哈希做精确比对,导致不同哈希可能返回同一明文

本文仅作技术缺陷披露与复现说明,使用的是已经授权的付费API接口,不涉及对第三方服务的未授权攻击。

问题摘要

项目说明
影响对象cmd5.com 哈希查询 API
缺陷类型使用前缀匹配,而非完整哈希精确匹配
直接后果错误的哈希仍可能「查询成功」并返回明文
风险假阳性、结果不可信、查询结果数据污染

缺陷一:NTLM 前缀匹配

测试方法:固定哈希前若干十六进制字符,改写后续字符,观察 API 是否仍返回明文。

基准样本

  • 明文:#%&YtrUio
  • 正确 NTLM:00005497439E52D88F70134BE5818096
修改位置修改后哈希(示意)结果
最后 1 字节...BE5818097仍返回密码
最后 2 字节...BE5818A96仍返回密码
最后 3 字节...BE581AA96仍返回密码
最后 4 字节...BE58AAAA6仍返回密码
最后 5 字节...BE5AAAAAA仍返回密码
第 11 字节...ABE5818096未命中
第 10 字节...A34BE5818096未命中

结论:该场景下 NTLM 查询实际只匹配前 22 个十六进制字符(11 字节),后 10 个字符(5 字节)被忽略。后缀可自由碰撞的空间约为 (2^{40})。

缺陷二:MD5 前缀匹配

基准样本

  • 明文:password
  • 正确 MD5:5F4DCC3B5AA765D61D8327DEB882CF99
保留前缀长度结果
前 14 字符未命中
前 15 字符未命中
前 16 字符返回密码
前 18 / 24 / 28 字符返回密码

结论:MD5 查询实际匹配前 16 个十六进制字符(8 字节),碰撞空间约为 (2^{64})。

缺陷三:常见口令的匹配阈值更短

进一步测试发现:收录频率更高的口令(如 passwordadmin123456hello),NTLM 侧「可命中」所需的前缀往往比一般口令更短。

口令类型观察到的最小匹配前缀
常见口令约 16 字符(8 字节)
一般口令约 22 字符(11 字节)
未收录 / 罕见口令不匹配

示例

text
明文: Password 正确 NTLM: A4F49C406510BDCAB6824EE7C30FD852 改写最后 5 字节后: A4F49C406510BDCAB6824EE7C3088F74 实测结果: 仍返回 "Password" 期望结果: 应判定未命中 / 报错

影响分析

1. 假阳性与「变相降熵」

攻击者或误用方无需完整哈希一致即可拿到明文,等价于有效比对长度被缩短:

  • NTLM:从 128 bit 有效比对,降到约 88 bit(一般口令)或 64 bit(常见口令)
  • MD5:从 128 bit 降到约 64 bit

这会显著抬高「撞库式反查」的命中率,并让人误以为「完整哈希已被破解」。

2. 单次查询结果不可信

用户提交哈希 (H_1) 时,服务可能返回的是前缀落在同一桶内的另一哈希 (H_2) 所对应的明文。对取证、校验、自动化流水线而言,这属于静默错误

3. 批量任务的数据污染

若业务系统把 cmd5 API 结果直接写入缓存或数据库,可能造成:

  • 错误的「哈希 ↔ 明文」映射被持久化
  • 后续去重、关联分析、审计报表全部失真

复现用例摘录

下列「修改后」哈希均不应命中,但实测仍返回对应明文:

text
明文 正确 NTLM 修改后(仍命中) ---------- ------------------------------------ ------------------------------------ password 8846F7EAEE8FB117AD06BDD830B7586C 8846F7EAEE8FB117AD06BDD830B7586A Password A4F49C406510BDCAB6824EE7C30FD852 A4F49C406510BDCAB6824EE7C3088F74 &=+cY FD534BB97756FA4A68D9B9F49B93C895 FD534BB97756FA4A68D9B9F49B93C894 #%&YtrUio 00005497439E52D88F70134BE5818096 00005497439E52D88F70134BE5818097 admin 209C6174DA490CAEB422F3FA5A7AE634 209C6174DA490CAEB422F3FA5A7AE63A 123456 32ED87BDB5FDC5E9CBA88547376818D4 32ED87BDB5FDC5E9CBA88547376818DA a 186CB09181E2C2ECAAC768C47C729904 186CB09181E2C2ECAAC768C47C72990A hello 066DDFD4EF0E9CD7C256FE77191EF43C 066DDFD4EF0E9CD7C256FE77191EF43A

小结

cmd5.com 查询 API 在实测中表现出明显的前缀匹配行为:NTLM / MD5 均未坚持完整哈希精确比对,常见口令甚至更「宽松」。这会带来假阳性、结果不可信与批量数据污染。建议服务方改为精确匹配并回显命中哈希,或者在返回数据前增加一步校验,及时收回错误结果;反过来调用方务必在入库前做本地校验。

ai协作,人工编辑

本文作者:张老板

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!