[xctf] 江苏工匠杯easyphp

考点

PHP弱类型

一、题目

 <?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...

二、WP

​ 分析以下代码,分别有a、b、c三个条件,只要当这三个条件都满足的时候,就会输出Flag,a和b都比较简单,所以说本题的考点为参数c的array_search绕过

1、参数a

​ 代码的大概意思为:将a的值转换为整数,然后需要满足大于6000000 同时长度小于等于 3,我们直接使用科学技术法。

​ a=6e9

2、参数b

​ 代码含义为:将b的值进行md5加密,当加密后的值后6位为8b184b的时候,就会进行到下一个判断,我们直接使用脚本跑一下,得到的结果为53724

3、参数c

​ 接下来就是本题的重点,搞了好久才研究出来/(ㄒoㄒ)/~~。

①、根据第一行代码可知,传入的c应该是一段JSON的数据,然后解析为数组。

②、首先判断Json中Key为m的Value不能为数字,并且需要大于2022,这个简单只需要利用php的弱类型比较,将m赋值为2023开头的字符串即可,这里将其赋值为2023a

③、然后对key为n的value进行判断,要求n必须为一个数组,并且value的数量必须为2,并且n的第一个value又必须为一个数组。然后有意思的来了,题目要求第一次用array_search搜索的时候,必须在n中含有DGGJ,但是接下来的代码是循环查看数组中是否含有DGGJ,如果含有的话就直接die了。

④、经过参考array_search的官方文档,发现当使用in_array() 或array_search()函数时,如果strict参数没有设置为true,则in_array()或array_search()将使用松散来判断。

这里用代码来演示一下什么是松散判断

$array = ['a',0,1,2,'3'];
var_dump(in_array('abc', $array)); //True,下标为1(查看是否在数组中)
var_dump(array_search('abc', $array)); //搜索abc字符串在数组中出现的第一个下标

在array数组中查找abc,我们可以发现其实数组中并没有abc,但是因为松散判断,匹配到了数字0,其实和var_dump("admin" == 0); //结果true同理

发现此漏洞的话,我们就可以将数组c中的第二个值设置为0,这样会满足array_search()的条件,同时也不存在DGGJ。

最终我们的payload为

?a=6e9&b=53724&c={
"m":"2023a",
"n":[[],0]
}

条件,同时也不存在DGGJ。

最终我们的payload为

?a=6e9&b=53724&c={
"m":"2023a",
"n":[[],0]
}

[xctf] 江苏工匠杯easyphp的更多相关文章

  1. [攻防世界][江苏工匠杯]easyphp

    打开靶机url,上来就代码审计 <?php highlight_file(__FILE__); $key1 = 0; $key2 = 0; $a = $_GET['a']; $b = $_GET ...

  2. [攻防世界][江苏工匠杯]unseping

    打开靶机对应的url 上来就是代码审计 <?php highlight_file(__FILE__); class ease{ private $method; private $args; f ...

  3. 2017年全国大学生物联网设计竞赛(TI杯)华东分赛区决赛总结

    全国大学生物联网设计竞赛(TI杯)是由教育部高等学校计算机类教学指导委员会主办.上海交通大学电子信息与电气工程学院承办.德州仪器半导体技术公司(TI)协办的赛事,自2014年设立以来,一直是物联网领域 ...

  4. 【CTF】2019湖湘杯 miscmisc writeup

    题目来源:2019湖湘杯 题目链接:https://adworld.xctf.org.cn/task/answer?type=misc&number=1&grade=1&id= ...

  5. 【CTF】XCTF Misc 心仪的公司 & 就在其中 writeup

    前言 这两题都是Misc中数据包的题目,一直觉得对数据包比较陌生,不知道怎么处理. 这里放两道题的wp,第一题strings命令秒杀觉得非常优秀,另外一题有涉及RSA加密与解密(本文不具体讨论RSA非 ...

  6. XCTF练习题---MISC---something_in_image

    XCTF练习题---MISC---something_in_image flag:Flag{yc4pl0fvjs2k1t7T} 解题步骤: 1.观察题目,下载附件,这是一道2019湖湘杯的题目 2.下 ...

  7. 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名

    蛮牛杯启动了,大家开始报名! http://cup.manew.com/ 这不是一篇普通的通稿,别着急忽略它.它是一篇可以让你梦想变现的通稿! 从某一天开始,游戏蛮牛就立志要为开发者服务,我们深知这一 ...

  8. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  9. 欧冠杯:葡萄牙VS法国——葡萄牙首次夺冠!

    北京时间7月11日凌晨3点,2016欧洲杯决赛,葡萄牙在法兰西大球场1-0击败东道主法国,历史上首次夺冠.C罗伤退落泪,替补出场的埃德尔在加时赛第109分钟完成绝杀. 昨晚上本来准备熬夜看球赛的!而且 ...

  10. 自罚一杯-PHP基础(一)

    hi 懒癌是最可怕的癌了吧,在即将迎来本命年时,给自己定下每天必干的几件成习惯的事情,望不再鸽!! php是我一直在学习的东西,但总以为php简单,难点在需要掌握大量的相关知识,其实并不完全对,php ...

随机推荐

  1. 针对于Sql server突然连接不到服务器的解决方法

    问题叙述 点击连接之后,总是会弹出一个错误弹窗: 方法解决 快捷键Win+R,输入services.msc,进入到服务界面: 找到SQL 代理(DEV) 将手动打开改成自动 再连接试一次 连上啦! ( ...

  2. Activiti7开发(二)-流程定义

    目录 1.部署流程模型为流程定义 2.挂起/激活流程定义 3.删除流程定义 4.查询流程定义 5.上传并部署流程定义 6.查看流程模型 1.部署流程模型为流程定义 @PostMapping(value ...

  3. noopener, noreferrer 及 nofollow 的用法

    <a> 标签通常会配合着使用 noopener, noreferrer 及 nofollow 这些属性, 它们的作用及用法如下. noopener 当给链接加上 target=" ...

  4. 刷爆 LeetCode 周赛 339,贪心 / 排序 / 拓扑排序 / 平衡二叉树

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周末是 LeetCode 第 339 场周赛,你参加了吗?这场周赛覆盖的知识点比较少, ...

  5. centos7搭建bsc全节点

    Centos7搭建bsc全链节点 服务器配置  CPU:8 Cores - 16 Threads RAM:131072 MB Storage:2x 2000GB NVMe Bandwidth:8400 ...

  6. Java------常用类(二)

    import org.junit.Test; import java.io.UnsupportedEncodingException; import java.util.Arrays; /** * 涉 ...

  7. R语言文本数据挖掘(二)

    tm文本挖掘示例 文本挖掘是从非结构化的文本信息中抽取潜在的.用户感兴趣的重要模式或知识的过程,可以把它看作数据挖掘或数据库中知识发现的延伸.对文本信息的挖掘主要是以数理统计学和计算语言学为理论基础, ...

  8. 四月二十一号Java知识基础

    1.接口本身具有数据成员.抽象方法.默认方法.和静态方法,但它与抽象类不同 1)接口的数据成员都是静态的且必须初始化,即数据成员必须是静态常量 2)接口中除咯声明抽象方法外,还可以定义静态方法 和默认 ...

  9. CVE-2022-21454:漏洞整改mysql5.7.37升级至5.7.38 tar包升级

    问题描述:对数据库服务器进行漏扫,发现一些中高位漏洞需要整改,有些数据库需要升级到最新版 漏洞修改指导链接:https://www.oracle.com/security-alerts/cpuapr2 ...

  10. RDIFramework.NET开发框架编码管理助力业务编码的自动处理

    1.概述 几乎每一个企业应用中不可避免的都会涉及到业务编码规则的问题,比如订单管理中的订单编号,商品管理中的商品编码,项目管理中的项目编码等等,针对这一系列的编码如果直接写在程序中,不仅复杂,代码重复 ...