[江苏工匠杯]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 hashlibvalue = "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)breakelse: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]}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中大小写字母如何转化

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

【办公类-40-01】20240311 用Python将MP4转MP3提取音频 (家长会系列一)

作品展示&#xff1a; 背景需求&#xff1a; 马上就要家长会&#xff0c;我负责做会议前的照片滚动PPT&#xff0c;除了大量照片视频&#xff0c;还需要一个时间很长的背景音乐MP3 一、下载“歌曲串烧” 装一个IDM 下载三个“串烧音乐MP4”。 代码展示 家长会背景音乐: 歌曲串…

C++ 拷贝构造函数和运算符重载

目录 一. 拷贝构造函数 1. 引入 2. 拷贝构造的概念 3. 浅拷贝 4. 深拷贝 二. C运算符重载 1. 概念 2. 注意事项 3.举例 一. 拷贝构造函数 1. 引入 我们在创建对象时&#xff0c;能不能创建一个与原先对象一模一样的新对象呢&#xff1f;为了解决这个问题&#x…

0304_数据可视化实战(一)

数据处理 安装openpyxl # 当前执行的命令是安装在该虚拟python环境中 !pip install openpyxl -i https://mirrors.aliyun.com/pypi/simple/数据查看 import pandas as pd fund pd.read_excel(./fund.xlsx) # 查看前10条数据 fund.head(10)姓名公司基金数量年天基金规模基金…

Windows系统搭建Cloudreve结合内网穿透打造可公网访问的私有云盘

目录 ⛳️推荐 1、前言 2、本地网站搭建 2.1 环境使用 2.2 支持组件选择 2.3 网页安装 2.4 测试和使用 2.5 问题解决 3、本地网页发布 3.1 cpolar云端设置 3.2 cpolar本地设置 4、公网访问测试 5、结语 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff…

1.leetcode---字符串中的第一个唯一字符(Java版)

链接在此: https://leetcode.cn/problems/first-unique-character-in-a-string/description/ 给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入: s “leetcode” 输出: 0…

阿里云 云盘扩容之后“不生效”处理办法

服务器只有一块40GB的系统盘&#xff08;/dev/vda1&#xff09;&#xff0c;目前已扩容到50GB&#xff0c;但是查看磁盘占用&#xff0c;还是没有变化 df -h [rootiZbp19utuqn2ezs6yevameZ www]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 868M…

三个表联合查询的场景分析-场景1:a表关联了b表和c表

本场景对应情景如下&#xff1a; 三个数据表&#xff0c;一个表的两个字段分别关联了另外两个表各自的id数据&#xff0c;可能包含多个id&#xff08;两个1对多关联&#xff09;。 目录 数据表准备 需求1、查询c表的列表数据&#xff0c;要求获得关联的b表中的name&#xf…

蓝桥杯第十一届电子类单片机组程序设计

目录 前言 单片机资源数据包_2023&#xff08;点击下载&#xff09; 一、第十一届比赛原题 1.比赛题目 2.赛题解读 1&#xff09;计数功能 2&#xff09;连续按下无效按键 二、部分功能实现 1.计数功能的实现 2.连续按下无效按键的处理 3.其他处理 1&#xff09;对于…

vue-draggable-resizable配合vue-plugin-hiprint实现移动输入框(或者其他东西)打印

思路 vue-plugin-hiprint打印只能打印模板&#xff08;不选择打印范围&#xff0c;因为控制不好位置&#xff0c;所以采用vue-plugin-hiprint自带的打印功能&#xff09;&#xff0c;然后就通过让移动输入框有个父盒子并且输入框怎样移动都不能越过父盒子&#xff0c;所以让这…

SpringCloud Bus 消息总线

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第八篇&#xff0c;即介绍 Bus 消息总线。 二、概述 2.1 遗留的问题 在上一篇文章的最后&#xff0c;我…

网络架构层_服务器上下行宽带

网络架构层_服务器上下行宽带 解释一 云服务器ECS网络带宽的概念、计费、安全及使用限制_云服务器 ECS(ECS)-阿里云帮助中心 网络带宽是指在单位时间&#xff08;一般指的是1秒钟&#xff09;内能传输的数据量&#xff0c;带宽数值越大表示传输能力越强&#xff0c;即在单位…