web5
2025年6月12日小于 1 分钟

分析一下
代码逻辑
if(md5($v1) == md5($v2)) { … }- 这里用的是
==(弱比较),不是===。 - 如果两个字符串看起来像数字或科学计数法(例如
0e1234),PHP 在==时会把它们都转成浮点数再比较。 0eanything➜ 解析成浮点数0。于是任何两个以0e…开头的字符串在==下都会相等。
- 这里用的是
找两个满足要求的输入 需要
- v1:只能是字母 (
ctype_alpha) - v2:只能是数字 (
is_numeric) md5(v1)和md5(v2)都形如0exxxxxxxx…
已知典型碰撞对:
输入 约束 md5 QNKCDZO仅字母 ✅ 0e830400451993494058024219903391240610708仅数字 ✅ 0e462097431906509019562988736854由于这两串哈希都以
0e…开头,PHP 比较时会把它们都当作0,条件成立。- v1:只能是字母 (
实际取 flag 的请求
https://3ba591f0-2fb6-448c-9d40-dbdd488f19a7.challenge.ctf.show/?v1=QNKCDZO&v2=240610708