Loading

[SWPUCTF 2022 新生赛]funny_php WP

[SWPUCTF 2022 新生赛]funny_php WP

初看代码,发现获取 flag 的条件。

if(isset($_SESSION['L1'])&&isset($_SESSION['L2'])&&isset($_SESSION['L3'])){
    include('flag.php');
    echo $flag;
}

$_SESSION['L1']=1 的判断在上面。

if(strlen($_GET['num'])<=3&&$_GET['num']>999999999){
    echo ":D";
    $_SESSION['L1'] = 1;
}else{
    echo ":C";
}

有长度限制与比较,这里发现 \(999999999\) 一共 \(9\) 位,可以用科学计数法 1e9 来绕过。
?num=1e9
image
接下来来看 $_SESSION['L2'].

if(isset($_GET['str'])){
    $str = preg_replace('/NSSCTF/',"",$_GET['str']);
    if($str === "NSSCTF"){
        echo "wow";
        $_SESSION['L2'] = 1;
    }else{
        echo $str;
    }
}

这里会把 NSSCTF 替换,常使用大小写混过去,但发现不行,这里有一种方法,可以利用替换 NSSCTF 来使得 $str==="NSSCTF"
?num=1e9&str=NNSSCTFSSCTF
当他把 NNSSCTFSSCTF 中的 NSSCTF 替换掉,str 恰好变为 NSSCTF
image
接下来看最后一个。

if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
    if($_POST['md5_1']!==$_POST['md5_2']&&md5($_POST['md5_1'])==md5($_POST['md5_2'])){
        echo "Nice!";
        if(isset($_POST['md5_1'])&&isset($_POST['md5_2'])){
            if(is_string($_POST['md5_1'])&&is_string($_POST['md5_2'])){
                echo "yoxi!";
                $_SESSION['L3'] = 1;
            }else{
                echo "X(";
            }
        }
    }else{
        echo "G";
        echo $_POST['md5_1']."\n".$_POST['md5_2'];
    }
}

这里是 MD5 哈希比较,要求 md5_1 和 md5_2 都是字符串,不相等,且 MD5 相等,根据 Hello CTF 博客的信息,可以用 QLTHNDTQNKCDZO 来绕过。
md5_1=QLTHNDT&md5_2=QNKCDZO
成功绕过!
image

posted @ 2025-11-02 11:43  yi_fan0305  阅读(4)  评论(0)    收藏  举报