[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. MS SQL Server 删除重复行数据

    您可以使用以下 SQL 语句删除 MS SQL Server 表中重复的行: WITH CTE AS ( SELECT ROW_NUMBER() OVER(PARTITION BY column1, ...

  2. Quicker快速开发,简单的网页数据爬取(示例,获取天眼查指定公司基础工商数据)

    前言 有某个线上项目,没有接入工商接口,每次录入公司的时候,都要去天眼查.企查查或者其他公开数据平台,然后手动录入,一两个还好说,数量多了的重复操作就很烦,而且,部分数据是包含超链接,一不注意就点进去 ...

  3. vue中使用西瓜视频中引入自定义样式,绝对可以

    首先配置sass-loader和raw-loader 方法,再vue-config.js中加上这一段代码 module.exports = { chainWebpack: config => { ...

  4. Onetable:统一的表格式元数据表示

    概括 Onehouse 客户现在可以将他们的 Hudi 表查询为 Apache Iceberg 和/或 Delta Lake 表,享受从云上查询引擎到顶级开源项目的原生性能优化. 在数据平台需求层次结 ...

  5. JSF预热功能在企业前台研发部的实践与探索

    作者:京东零售 李孟东 00 导读 企业前台研发部包含了企业业务大部分的对外前台系统,其中京东VOP平台(开放平台)适合于自建内网采购商城平台的企业客户. 京东为这类客户专门开发API接口,对接到客户 ...

  6. 股票K线图概要——R语言

    K线图是200多年前日本人发明的,后来传入了美国.K线图本来就是对当前数据的可视化显示而已,但是越来越多的人对K线图做出了痴迷的分析和解读,有众多追随者也根据K线图指导自己的具体行动,因此,K线图在实 ...

  7. 带你揭开神秘的javascript AST面纱之AST 基础与功能

    作者:京东科技 周明亮 AST 基础与功能 在前端里面有一个很重要的概念,也是最原子化的内容,就是 AST ,几乎所有的框架,都是基于 AST 进行改造运行,比如:React / Vue /Taro ...

  8. telnet命令安装

    1.[root@pld3bomdb01 ~]# yum install telnet-server 2.[root@pld3bomdb01 ~]# rpm -qa telnet* telnet-ser ...

  9. 谈一谈Python中的装饰器

    1.装饰器基础介绍 1.1 何为Python中的装饰器? Python中装饰器的定义以及用途: 装饰器是一种特殊的函数,它可以接受一个函数作为参数,并返回一个新的函数.装饰器可以用来修改或增强函数的行 ...

  10. Go语言实现基于HTTP的内存缓存服务

    所有的缓存数据都存储在服务器的内存中,因此重启服务器会导致数据丢失,基于HTTP通信会将使开发变得简单,但性能不会太好 缓存服务接口 本程序采用REST接口,支持设置(Set).获取(Get)和删除( ...