攻防世界-easyphp

攻防世界-easyphp

在这里插入图片描述
在这里插入图片描述一上来就是一大串代码呼我脸上。。。

代码审计

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
if(isset($b) && '8b184b' === substr(md5($b),-6,6))

intval() :用于获取变量的整数值,默认返回的是十进制。
strlen():返回字符串的长度。
substr():返回字符串的一部分,例:substr(“Hello world”,6,-1),返回值是worl。
md5()函数对字符串进行md5()加密,md5(a[])结果为NULL。
变量a存在,整数值要大于6000000,且字符串长度小于等于三,那就只能是用科学计数法了,a=1e8。

变量b的求法:

<?php
for($i = 1;$i <= 1000000;$i++){
    if('8b184b' === substr(md5($i),-6,6)){
        echo $i;
    }
}
?>

你要是能手算也不是不行(doge)。
返回值为53724,b=53724。

$c=(array)json_decode(@$_GET['c']);
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022)

json_decode():例:

<?php
   $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
   var_dump(json_decode($json));
   echo '<br>';
   var_dump(json_decode($json, true));
?>

返回值:
在这里插入图片描述
C是数组,m不能是数字且要大于2022

if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0]))

count()函数:返回数组的元素个数
n必须是数组,元素个数为2,且n的第一个值是数组,就是套娃。

$d = array_search("DGGJ", $c["n"]);
        $d === false?die("no..."):NULL;
        foreach($c["n"] as $key=>$val){
            $val==="DGGJ"?die("no......"):NULL;

Array_search():查找数组中的元素并返回其下标。
元素n的下标是DGGJ
但是如果n的下标是DGGJ,程序就会终止。。。。。。
那必须是绕过它才行,那该怎么绕啊
在这里插入图片描述还是有办法的
这array_search()在查找元素的时候是进行弱类型比较,而在PHP里字符串==0是成立的,只要在不是0下标的其他位置的元素是0就行了。
综上,可以构造payload:
?a=1e9&b=53724&c={“m”:“2023q”,“n”:[[1,2],0]}
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值