当前位置: 首页 > article >正文

攻防世界easyphp

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

?> 

a:

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

  • 这一行检查变量$a是否已设置(即不是nullundefined),并且其整数值大于6000000,同时其字符串长度不超过3个字符。
  • isset($a)检查$a是否已设置。
  • intval($a) > 6000000$a转换为整数并检查其是否大于6000000。
  • strlen($a) <= 3检查$a的字符串长度是否不超过3个字符。

使用科学计数法   例:1e9

b:

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

  • 如果第一个条件满足(即$a满足条件),则进一步检查变量$b
  • isset($b)检查$b是否已设置。
  • '8b184b' === substr(md5($b),-6,6)检查变量$b经过MD5哈希后的字符串的最后6个字符是否等于'8b184b'

 写一个python脚本

import hashlib
for i in range(100000):
    b=i.to_bytes(22, 'big')
    m=hashlib.md5(str(i).encode()).hexdigest()
    if(m[-6:]=="8b184b"):
        print(i)
        print(" ")
        print(m)

得到: 53724
 
           dbab43dabe09e16edf25ac77798b184b

c:

  1. 接收并解码JSON数据:
    $c=(array)json_decode(@$_GET['c']);
    • $_GET['c']: 从GET请求中获取名为c的参数值。
    • @: 错误控制运算符,用于抑制错误信息(例如,如果$_GET['c']不存在,json_decode会产生一个警告,@会抑制这个警告)。
    • json_decode(...): 将JSON格式的字符串解码为PHP变量。这里指定了第二个参数为false(通过(array)强制转换实现,因为json_decode默认将对象转换为关联数组需要设置第二个参数为true,但这里通过强制转换实现了类似效果),意味着如果JSON解码后是一个对象,它会被转换成关联数组。
  2. 检查解码后的数据:
    if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){
    • is_array($c): 检查$c是否为数组。
    • !is_numeric(@$c["m"]): 检查$c数组中的m键对应的值是否不是数字(即,它是一个字符串或其他非数字类型)。
    • $c["m"] > 2022: 检查$c数组中的m键对应的值是否大于2022。
  3. 进一步检查n键对应的值:
    if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){
    • is_array(@$c["n"]): 检查$c数组中的n键对应的值是否为数组。
    • count($c["n"]) == 2: 检查n数组的长度是否为2。
    • is_array($c["n"][0]): 检查n数组的第一个元素是否为数组。
  4. 搜索和条件判断:
    $d = array_search("DGGJ", $c["n"]);
    $d === false?die("no..."):NULL;
    foreach($c["n"] as $key=>$val){
    $val==="DGGJ"?die("no......"):NULL;
    }
    • array_search("DGGJ", $c["n"]): 在n数组中搜索值"DGGJ",返回其键。如果未找到,返回false
    • $d === false?die("no..."):NULL;: 如果DGGJ不在n数组中,脚本终止并输出"no..."
    • foreach($c["n"] as $key=>$val): 遍历n数组的每个元素。
    • $val==="DGGJ"?die("no......"):NULL;: 如果遍历过程中发现值为"DGGJ",脚本终止并输出"no......"

利用php弱类型的特性:字符串与数字比大小时只取字符串前面的数字,如果不是数字开头则当成是0

2023a>2022

[[]0,1],0]

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

得到flag


http://www.kler.cn/a/447090.html

相关文章:

  • 2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程
  • 迈向未来:.NET技术的持续创新与发展前景
  • HDR视频技术之十:MPEG 及 VCEG 的 HDR 编码优化
  • 【bodgeito】攻防实战记录
  • 杂七杂八的网络安全知识
  • 基于字节大模型的论文翻译(含免费源码)
  • Leetcode中最常用的Java API——util包
  • LeetCode hot100-90
  • 纯css 实现呼吸灯效果
  • TCP/IP协议:网际层相关知识梳理
  • metasploit之ms17_010_psexec模块
  • MapBox实现深蓝色科技风格底图方案
  • android studio更改应用图片,和应用名字。
  • D101【python 接口自动化学习】- pytest进阶之fixture用法
  • Unity3D仿星露谷物语开发6之角色添加动画
  • 麒麟操作系统服务架构保姆级教程(二)ssh远程连接
  • Linux之多线程互斥
  • 前端实现获取后端返回的文件流并下载
  • 【原生js案例】移动端如何实现页面的入场和出场动画
  • 了解cuda的统一内存
  • 复习打卡大数据篇——Apache Hadoop
  • leetcode之hot100---240搜索二维矩阵II(C++)
  • 周末总结(2024/12/21)
  • Apache solr XML 实体注入漏洞
  • .NET 8 获取CPU序列号和主板序列号异常问题
  • 2110 加分二叉树