攻防世界-easyphp

题目信息

题目信息如下:
可以看到,key1和key2的值都为1的时候,才能拿到flag。再网上看,发现key1和key2的值取决于a,b和c的值。

 <?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;
}

?> Emmm...

相关知识

  1. 这段代码是一个简单的PHP脚本。它有两个输入参数 a 和 a和 ab,这些参数应该通过GET请求从URL中获取。
  2. 代码检查$a是否被设置,并且它的整数值大于6000000,并且它的长度不超过3个字符。
  3. 符号‘@’可以阻止错误在屏幕上显示。
    PHP支持错误控制运算符,即符号(@)。当它被添加到PHP表达式前面时,使用该表达式可能生成的错误消息将被忽略。
  4. 一个字符串在没遇到字符前都是可以跟数字进行比较的,所以我可以在传入的数的最后添加任意字符就可以绕过字符比较

解题过程

  1. a的值
    使用科学计数法,如1e9
  2. b的值
    利用模块的MD5方法对字符串i进行编码,注意哈希之前必须要规定字符串编码类型,最后转化为16进制输出。输出结果取取倒数的6位字符,进行对比。
    下图为错误示范:

在这里插入图片描述正确代码:

import hashlib
for i in range(100000):
    a = hashlib.md5(str(i).encode('utf-8')).hexdigest()
    if  a[-6:] == '8b184b':
        print(i)
        print(a)

显示结果如下图所示:
在这里插入图片描述3. c的值

  • 首先,将GET请求中的参数c解码为一个数组,并将其赋值给变量$c。此处使用了@符号,表示对可能出现的错误进行压制。
  • 将c变量进行json解码,并转换为一个array数组
  • 判断 c 是否是一个数组,并且 c是否是一个数组,并且 c是否是一个数组,并且c[“m”]不是一个数字,并且$c[“m”]大于2022。
  • 如果满足以上条件,则继续判断 c [ " n " ] 是否是一个数组,且长度为 2 ,并且 c["n"]是否是一个数组,且长度为2,并且 c["n"]是否是一个数组,且长度为2,并且c[“n”][0]也是一个数组。
  • 如果满足以上条件,则使用array_search函数在 c [ " n " ] 数组中搜索值为 " D G G J " 的元素,并将结果赋值给变量 c["n"]数组中搜索值为"DGGJ"的元素,并将结果赋值给变量 c["n"]数组中搜索值为"DGGJ"的元素,并将结果赋值给变量d。如果找到了匹配的值,则继续执行;如果没有找到,输出"no…"并终止程序。
  • 接下来,使用foreach循环遍历 c [ " n " ] 数组中的每个元素,如果某个元素的值等于 " D G G J " ,则输出 " n o . . . . . . " 并终止程序。否则,将变量 c["n"]数组中的每个元素,如果某个元素的值等于"DGGJ",则输出"no......"并终止程序。否则,将变量 c["n"]数组中的每个元素,如果某个元素的值等于"DGGJ",则输出"no......"并终止程序。否则,将变量key2赋值为1。

解题结果:

在这里插入图片描述

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值