• 攻防世界WEB练习 | easyphp


    前言

    作者简介:不知名白帽,网络安全学习者。

    博客主页:https://blog.csdn.net/m0_63127854?type=blog

    攻防世界专栏:https://blog.csdn.net/m0_63127854/category_11983747.html

    网络安全交流社区:https://bbs.csdn.net/forums/angluoanquan

    目录

    题目场景

    代码分析

    找到flag


    题目场景

    代码分析

    if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3)

    isset:检查变量是否设置

    intval:检查变量是否为int型

    strlen:检查变量的长度

    要求a存在且大于6000000,a的长度不能超过3

    使用科学计数法 a=1e9(e9即10的9次方)

    if(isset($b) && '8b184b' === substr(md5($b),-6,6))

    直接用脚本跑出

    for($i = 1;$i <= 1000000;$i++){

        if('8b184b' === substr(md5($i),-6,6)){

            echo $i."
    ".md5($i);

        }

    }

    ?>

    所以第一部分payload为?a=1e9&b=53724

    $c=(array)json_decode(@$_GET['c']);

    构造出数组C后json_decode

    if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022)

    $c需为数组。且存在m,m不能为数字,但是需大于2022.科学技术法,直接m赋值为2023q 即可

    c={"m":"2023q"}

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

    $c 存在n为数组,n的值数量为2(非索引).n的第一个值为数组,(这里的0为索引)

    c={"m":"2023q","n":[[1,2],3]}

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

    核心点是如何绕过array_ search这个函数。先看看下面两个判断吧,array_ seach的结
    果b不能是假,也就是Array [n]中必须有元素是DGGJ,同时遍历Array [n]之后对数组值
    进行判断,如果存在DGGJ则终止程序。
    很明显这两个条件是矛盾的,开头提到了如何绕过array_ search是核心点,既然如此就先
    了解一下array_search这个函数的作用吧。其作用是在数组中查找元素,并返回其下标。
    而这个函数在进行元素查找的过程中进行的比较是==而非== =,因此同样是采取弱类型比较
    的特点,因为是和没有数字字符串比较所以我们只要保证在Array [n]中存在非0下标的元
    素中存在值0即可。因为在php中"字符串"==0是成立的。
    最后再通过json_ encode ()将我们构造的数组进行一下转化就得到了 Array [n]的json格
    式数据。

    第二部分payload c={"m":"2023q","n":[[1,2],0]}

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

    找到flag

    cyberpeace{db35f9b1ea0eaea688749f824e0ba234} 

  • 相关阅读:
    LeetCode50天刷题计划(Day 13—— 四树之和(8.50-10.00)
    【程序员书单】
    【译】Visual Studio Enterprise 中的代码覆盖率特性
    策略模式介绍
    Vue脚手架的初次了解/使用
    Centos安装Docker
    ubuntu 查询mysql的用户名和密码 ubuntu查看username
    2022.8.10
    ubuntu 18.04安装RabbitMQ
    pytest-base-url插件之配置可选的项目系统URL
  • 原文地址:https://blog.csdn.net/m0_63127854/article/details/127536772