[攻防世界]easyphp

<?php
highlight_file(__FILE__);
$key1 = 0;
$key2 = 0;

$a = $_GET['a'];
$b = $_GET['b'];

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
    if(isset($b) && '8b184b' === substr(md5($b),-6,6)){
        $key1 = 1;
        }else{
            die("Emmm...再想想");
        }
    }else{
    die("Emmm...");
}

$c=(array)json_decode(@$_GET['c']);
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){
    if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){
        $d = array_search("DGGJ", $c["n"]);
        $d === false?die("no..."):NULL;
        foreach($c["n"] as $key=>$val){
            $val==="DGGJ"?die("no......"):NULL;
        }
        $key2 = 1;
    }else{
        die("no hack");
    }
}else{
    die("no");
}

if($key1 && $key2){
    include "Hgfks.php";
    echo "You're right"."\n";
    echo $flag;
}

?>

我们先看里面有哪些函数吧

intval() 函数用于获取变量的整数值。

isset()函数用于判断参数是否被赋予值,是则返回true

strlen()函数判断参数的字符串长度

substr(1,2,3)函数第一个参数是我们的参数,第二个是从第几位开始,第三个参数是截取几个,结合起来就是从参数中的第n个参数开始截取长度为m的字符串

substr(md5($b),-6,6)所以这个参数的意思就是将b参数md5编码后截取最后6个字符串

这里第一个if语句我们就可以绕过了

我们先get传参个a为字符串小于三长度的并且数值大于600000,我们就可以用1e9来绕过这表示1后面跟9个0也就是1000000000也就可以绕过第一个过滤

第二个get传参b的话意思是将b参数用MD5编码后的后6位与8b184b匹配,如果相同就可以绕过,那么我们用脚本跑出来的就是b=53724

下面来看第二个语句

也是用get传参一个c但是c是一个数组并且用json_decode编码

is_array($c)这个是判断c是否为数组

!is_numeric(@$c["m"])这个是判断c[m]这个参数不是字符串

$c["m"] > 2022判断这个c["m"]要大于2022

is_array(@$c["n"])判断c["n"]是否为数组意思就是c的这个数组中的c["n"]参数也得是数组

count($c["n"]) == 2判断c["n"]数组的长度是2

is_array($c["n"][0]也是判断是否为数组

array_search("DGGJ", $c["n"]);这个函数遍历c["n"]数组中是否有DGGJ这个字符串有就返回这个字符串,没有就返回false,我们就可以用数组绕过,也就是当这个函数遍历这个数组的时候,这个数组中的一个数值也是一个数组,利用函数检测到不符合类型的数据时就会返回0这个特性就可以绕过了

foreach($c["n"] as $key=>$val)

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

注意: forEach() 对于空数组是不会执行回调函数的。所以我们直接给这个参数c赋值为[[0],0]就可以绕过了

到这里所以函数都看完了我们就可以构造paylod

?a=1e9&b=53724&c={"m":"2023","n":[[0],0]}

得到cyberpeace{265d340c3cc47d2996c1907cac15210b}

有什么错误欢迎大家给予批评指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值