这题的话可以先从这个题目看应该是和备份有关系的,就会想到bak后缀。
打开网站是一段神秘代码
1 | d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e |
然后就下意识的查看网站源代码但并没有什么收获,只能转向目录扫描了,直接上御剑目录扫描。
发现有一个index.php.bak文件直接访问下载了一个备份文件,代码内容如下
1 | include_once "flag.php"; |
直接开始代码审计。
1 | if(md5($key1) == md5($key2) && $key1 !== $key2){ |
这个是他的一个验证逻辑就是将输入的两个值加密进行比较,要求a=b和md5(a)=md5(b),现在就可以MD5弱类型比较来解决了。
有些字符串的MD5值都以0e开头,在科学计数法中等于0:
1 | // 经典MD5碰撞值 |
借助这个漏洞就可以构建Payload:index.php?kkeyey1=QNKCDZO&kkeyey2=240610708
还有另一种方法:
由于md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。
所以可以也可以构建Payload:index.php?kkeyey1[]=1&kkeyey2[]=2
同样能获得flag。
📄 版权声明
👤 作者:qingshen
📅 发布时间:2025年10月1日
🔗 原文链接:https://qsblog.top/Bugku-CTF-%E5%A4%87%E4%BB%BD%E6%98%AF%E4%B8%AA%E5%A5%BD%E4%B9%A0%E6%83%AF.html
📜 许可协议:知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
💡 转载说明:转载请注明原文出处和作者信息