目录
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})。
缺陷三:常见口令的匹配阈值更短
进一步测试发现:收录频率更高的口令(如 password、admin、123456、hello),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协作,人工编辑