攻防世界-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。

解题结果:

在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-31 00:40:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-31 00:40:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-31 00:40:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-31 00:40:04       20 阅读

热门阅读

  1. 如何处理Redis服务器宕机的情况

    2024-03-31 00:40:04       20 阅读
  2. C++ | filesystem file not found

    2024-03-31 00:40:04       20 阅读
  3. brctl 命令

    2024-03-31 00:40:04       19 阅读
  4. ChatGPT写作攻略:完善学术论文技巧指南

    2024-03-31 00:40:04       20 阅读
  5. Linux IRC

    Linux IRC

    2024-03-31 00:40:04      21 阅读
  6. 工作日志- 不定期更新

    2024-03-31 00:40:04       19 阅读
  7. P19:注释

    2024-03-31 00:40:04       20 阅读
  8. 实现元素水平垂直居中的方法

    2024-03-31 00:40:04       23 阅读
  9. SpringBoot -- 错误处理机制

    2024-03-31 00:40:04       20 阅读
  10. vue3从精通到入门1: vue3特点以及与vue2的区别

    2024-03-31 00:40:04       19 阅读