[江苏工匠杯]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;
}

先看第一部分

要求get 传参a和b

intval — 获取变量的整数值

?id='1000' //"1000"或(1000)皆可
?id=125<<3 //左移
?id=680|320 //按位或
?id=992^8 //按位异或
?id=~~1000 //两次取反
?id=0x3e8 //十六进制
?id=0b1111101000 //二进制

要求a的值大于6000000且长度小于等于3

可以使用科学计数法绕过

a=3e8 #得到300000000大于6000000且长度小于等于3

再看传参b

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

要求传参经过md5后的从截取密文后6位等于“8b184b”,这里就是一个简单的哈希碰撞,我们写一个Python脚本跑一下

从别的师傅copy

import random
import hashlib
 
value = "8b184b"
while 1:
    plainText = random.randint(10**11, 10**12 - 1)
    plainText = str(plainText)
    MD5 = hashlib.md5()
    MD5.update(plainText.encode(encoding='utf-8'))
    cipherText = MD5.hexdigest()
    if cipherText[-6:]==value :
        print("碰撞成功:")
        print("密文为:"+cipherText)
        print("明文为:"+plainText)
        break
    else:
        print("碰撞中.....")

跑出来的密文和明文分别为:

密文:842fc2485a1faa0681f78d3e098b184b

明文:792616362347

所以我们传入b=792616362347

接下来第二部分

$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");
}

c需要传入一个json格式的字符串

其中key为m的value不能为数字,且要大于数字2022

当字符串与数字进行比较时,会将字符串强制转化为整型

所以我们可以传入一个123456a,在进行比较时会被强制转换为123456与2022进行比较

count():返回数组中元素的数目

再看key为n的value必须是一个数组,且value的数量必须为2,且第一个value也必须是一个数组

接着往下看

第一次用array_search搜索n中是否有"DGGJ",有的话才能开启下一步

第二次使用foreach循环搜索n中的值是否含有"DGGJ",没有的话才会使key2的值为1

这里就矛盾起来了,既要求n中有"DGGJ",又要求n中没有"DGGJ"

所以我们必须要绕过其中一个函数,array_search函数是可以绕过的

当函数将字符串与数字进行匹配时,其中是==这种弱等于,会将字符串强制转换为整型进行比较,"DGGJ"转化为整型为0

而注意第二个是===强等于,不仅比较值相等还会比较值得类型,所以就可以绕过第二个条件了

具体看下测试

image-20240315103553365

所以c={"m":"123456a","n":[["6"],0]} 最后的payload:

?a=3e8&b=792616362347&c={"m":"123456a","n":[[6],0]}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/460374.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

遗传算法及基于该算法的典型问题的求解实践

说明 遗传算法是一个很有用的工具&#xff0c;它可以帮我们解决生活和科研中的诸多问题。最近在看波束形成相关内容时了解到可以用这个算法来优化阵元激励以压低旁瓣&#xff0c;于是特地了解和学习了一下这个算法&#xff0c;觉得蛮有意思的&#xff0c;于是把这两天关于该算法…

大模型训练准备工作

一、目录 1 大模型训练需要多少算力&#xff1f; 2. 大模型训练需要多少显存&#xff1f; 3. 大模型需要多少数据量训练&#xff1f; 4. 训练时间估计 5. epoch 选择经验 6. 浮点计算性能测试 二、实现 1 大模型训练需要多少算力&#xff1f; 训练总算力&#xff08;Flops&…

分割等和子集 最后一块石头的重量II 目标和

416. 分割等和子集 力扣题目链接 本题中每一个元素的数值既是重量&#xff0c;也是价值。 dp[j]表示 背包总容量&#xff08;所能装的总重量&#xff09;是j&#xff0c;放进物品后&#xff0c;背的最大重量为dp[j] 如果背包容量为target&#xff0c; dp[target]就是装满 背…

helm部署hadoop

&#xff08;作者&#xff1a;陈玓玏&#xff09; 参考helm仓库的文档&#xff1a;https://artifacthub.io/packages/helm/apache-hadoop-helm/hadoop helm helm repo add pfisterer-hadoop https://pfisterer.github.io/apache-hadoop-helm/ helm install hadoop pfistere…

机器学习 --- 模型评估、选择与验证

Java实训代码、答案&#xff0c;如果能够帮到您&#xff0c;希望可以点个赞&#xff01;&#xff01;&#xff01; 如果有问题可以csdn私聊或评论&#xff01;&#xff01;&#xff01;感谢您的支持 第1关&#xff1a;为什么要有训练集与测试集 1、下面正确的是&#xff1f;&…

升入理解计算机系统学习笔记

磁盘存储 磁盘是广为应用的保存大量数据的存储设备&#xff0c;存储数据的数量级可以达到几百到几千千兆字节&#xff0c;而基于RAM的存储器只能有几百或几千兆字节。不过&#xff0c;从磁盘上读信息的时间为毫秒级&#xff0c;比从DRAM读慢了10万倍&#xff0c;比从SRAM读慢了…

《剑指 Offer》专项突破版 - 面试题 79 ~ 84 : 详解回溯法(C++ 实现)

目录 一、回溯法的基础知识 二、集合的排列、组合 面试题 79 : 所有子集 面试题 80 : 包含 k 个元素的组合 面试题 81 : 允许重复选择元素的组合 面试题 82 : 包含重复元素集合的组合 面试题 83 : 没有重复元素集合的全排列 面试题 84 : 包含重复元素集合的全排列 一、…

wsl中安装虚拟环境virtualenv,pycharm中配置wsl解释器

wsl 中安装虚拟环境 virtualenv 注意&#xff1a; 不能将虚拟环境安装到 /root 目录下&#xff0c;在 window 文件管理中&#xff0c;没有权限访问 wsl 中的 /root 目录 安装虚拟环境 sudo pip install virtualenv sudo pip install virtualenvwrapper配置环境变量 1、创建…

基于单片机的指纹打卡机设计

摘要 在科学技术飞速发展的今天&#xff0c;社会对身份识别的要求越来越高&#xff0c;尤其是在企业管理的人员签到、工作考勤等活动中对身份识别的高效性和可靠性的需求更为迫切。而传统的个人身份识别手段&#xff0c;如钥匙、密码、IC卡等&#xff0c;由于具有可盗用、可伪…

深入理解TCP:序列号、确认号和自动ACK的艺术

深入理解TCP&#xff1a;序列号、确认号和自动ACK的艺术 在计算机网络的世界里&#xff0c;TCP&#xff08;传输控制协议&#xff09;扮演着至关重要的角色。它确保了数据在不可靠的网络环境中可靠地、按顺序地传输。TCP的设计充满智慧&#xff0c;其中序列号&#xff08;Seq&a…

续上篇 qiankun 微前端配置

上篇文章地址&#xff1a;微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】-CSDN博客 主应用&#xff1a; src/main.js 配置&#xff1a; import Vue from vue import App from ./App.vue import router from ./router import { registerMicroApps, start } …

Jenkins内部使用Docker

修改docker.sock文件权限 路径在&#xff1a;/var/run/docker.sock 进入/var/run目录下 修改docker.sock文件权限&#xff0c;且让其他用户也可以读写。 cd /var/run chown root:root docker.sock chmod orw docker.sock 修改数据卷映射 切换到你Jenkins的docker-compose.…

Verdaccio部署及基础使用

1. Verdaccio 简介 Verdaccio&#xff0c;是一个轻量级的 npm 私有仓库的开源解决方案。npm是一个基于http的协议&#xff0c;用来存放软件包并且维护版本和依赖&#xff0c;利用 http 提供的 url路径 来对软件包进行增删改查。所以 Verdaccio 这款软件的核心就是实现 npm协议…

淘宝商品销量数据接口,淘宝API接口

淘宝商品销量数据接口是淘宝开放平台提供的一种API接口&#xff0c;通过该接口&#xff0c;商家可以获取到淘宝平台上的商品销量数据。 淘宝商品销量数据接口可以用于获取特定商品的销量数据、特定店铺的销量数据、特定类目的销量数据等。商家可以根据自己的需求来调用该接口&…

Gitlab部署及使用

1. 简介 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用 Git 作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。Gitlab是目前被广泛使用的基于 git 的开源代码管理平台&#xff0c;基于Ruby on Rails构建&#xff0c;主要针对软件开发过程中产生的代码…

phpcms头像上传漏洞引发的故事

目录 关键代码 第一次防御 第一次绕过 第二次防御 第二次绕过 第三次防御 第三次绕过 如何构造一个出错的压缩包 第四次防御 第四次绕过 本篇文章是参考某位大佬与开发人员对于文件包含漏洞的较量记录下的故事&#xff0c;因为要学习文件包含漏洞&#xff0c;就将大佬…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:GridItem)

网格容器中单项内容容器。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。仅支持作为Grid组件的子组件使用。 子组件 可以包含单个子组件。 接口 GridItem GridItem(value?: GridItemOptions)…

【AI+办公】利用AI软件制作PPT提升工作效率

最近看了很多AI相关信息的输入&#xff0c;很多使用AI软件赚钱的文章或付费课程&#xff0c;思路多多少少自己了解不少&#xff0c;后面有时间分享下。本篇主题是&#xff0c;利用AI软件制作PPT提升工作效率。对于上班族来说&#xff0c;提升工作效率也是一种节省个人时间的方式…

最佳实践:Swagger 自动生成 Api 文档

自动生成 API 文档的好处不言而喻&#xff0c;它可以提供给你的团队或者外部协作者&#xff0c;方便 API 使用者准确地调用到你的 API。为了降低手动编写文档带来的错误&#xff0c;很多 API 开发者会偏向于寻找一些好的方法来自动生成 API 文档。本文将会介绍一些常用的文档生…

express+mysql+vue,从零搭建一个商城管理系统14--快递查询(对接快递鸟)

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、安装md5&#xff0c;axios&#xff0c;qs二、新建config/logistics.js三、修改routes/order.js四、添加商品到购物车总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写service部分 快递鸟…