欢迎光临
我们一直在努力

攻防世界-Easyphp-胎教版wp

前言

  • 考点:Php语言代码审计和php语言特性及md5爆破

解题步骤

  • 1.先看1
    • 要求以get方式传参a,b
      在这里插入图片描述

    • 对于a,isset(a)检查a是否被设置(即是否存在且不为NULL),intval($a)表示将a转化为整数,strlen($a)表示检查a字符串长度,要求a字符串长度≤3,但是同时要求a>6000000,可以想到用科学计数法,令a=1e9(即1000000000)大于9且字符串长度为3,满足条件 a=1e9;

    • 对于b,要求$b满足md5判断,哈希值后6位为8b184b,编写php程序,利用穷举法找到满足条件的字符串(MD5可爆破)

<?php
$b=0;
while(true){
if('8b18b4' === substr(md5($b),6,6)){
echo $b;
break;
}
$b+=1;
}
?>

  • 2.再看2
    • json_decode(),将 JSON 字符串解析为 PHP 变量
      在这里插入图片描述

    • 外层if,因为c中存在m,n两个元素,且存在json_decode(),所以我们猜测$c的格式大概为{"m":xxx,"n":xxx}

      • 要求$c为数组(is_array表示$c为数组),$c[“m”]不为数字(!is_numeric(@$c[“m”])表示其不为数字),且$c[“m”]要大于2022,利用PHP弱比较类型可以进行绕过,如令m=2023C,这样进行比较时,PHP进行隐式类型转换“2023C”>2022,满足m不为数字且m>2022,这样可以先构造c={“m”:2023Z,”n”:[[],””]}
    • 内层if,要求@$c[“n”]为数组,且$c[“n”]长度为2(count($c[“n”]==2),且 $c[“n”][0] 也为数组,先构造c={“m”:”2023Z”,”n”:[[],0]

      • 内层if下还有过滤逻辑,array_search函数用于在数组中搜索指定的值,如果在c[“n”]中成功搜索到DGGJ,则过关,否则终止程序($d = array_search("DGGJ", $c["n"]);),遍历数组,查找值为DGGJ的项,若找到,则终止程序
        在这里插入图片描述很明显,二者矛盾
    • array_search使用弱比较类型匹配(==),在低版本php中,“DGGJ“=0,所以要求c[“n”]中含有0。

    • 所以我们构造c= {“m”:“2023Z”,“n”:[[0,0],0]}
      在这里插入图片描述

  • 执行得到flag
    在这里插入图片描述
    在这里插入图片描述
赞(0)
未经允许不得转载:171主机测评 » 攻防世界-Easyphp-胎教版wp
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址