攻防世界web新手第四题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;
}?> Emmm...

这是题目
惯例:代码审查

if($key1 && $key2){include "Hgfks.php";echo "You're right"."\n";echo $flag;
}

这里很明显,若key1与key2均为真,则打印flag变量,猜测flag变量就是结果,来自Hgfkg.php,所以我们的目标是让key1与key2为1或true!

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){if(isset($b) && '8b184b' === substr(md5($b),-6,6)){$key1 = 1;

这里可以看出,我们需要构造a和b,满足两个if条件,使key1赋值为1,

$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;

这里可以看出,我们需要构造c,满足两个if条件使key2赋值为1。
到这里我们基本明确了问题就是a,b,c如何构造的问题。

接下来我们看一下条件:
对于a和b,需要满足这两个条件

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){if(isset($b) && '8b184b' === substr(md5($b),-6,6))

isset($a):a不为空

intval($a) > 6000000:a强制类型转换后大于60000000

strlen($a)<= 3:a变量字符串长度小于等于3

isset($b):b不为空。

‘8b184b’ === substr(md5($b),-6,6):b的md5加密后后六位要全等于8b184b。

条件要求总结完毕,接下来挨个突破:
a变量长度小于等于3且类型转换后大于6000000,所以大概率是科学计数法,所以猜测a可以是1e8。

b变量的md5加密后后六位要全等于8b184b。
ai写脚本爆破

<?php
function findNumberWithMd5Suffix($suffix, $start = 0, $end = PHP_INT_MAX) {for ($i = $start; $i <= $end; $i++) {// 将数字转换为字符串并计算MD5哈希$hash = md5((string)$i);// 检查哈希值的后六位if (substr($hash, -6) === $suffix) {return $i;}}return null; // 如果没有找到,则返回null
}// 寻找符合条件的数字
$bValue = findNumberWithMd5Suffix('8b184b');if ($bValue !== null) {echo "找到的b的值: " . $bValue . "\n";
} else {echo "在给定范围内未找到符合条件的数字。\n";
}
?>

用AI生成爆破代码如上,得到b的值为53724.
在这里插入图片描述
接下来就是构造C了,
对于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])){

c需为Jason格式的值,c的m键对应的值不是数字且不是数字字符串,c的m键的值要大于2022
c的n键对应的值需为数组且该数组长度为2且第一位为数组,
使用AI写代码构造C
在这里插入图片描述
至此,a,b,c已构造完毕
构造url:http://61.147.171.105:64218/?a=1e8&&b=53724&&c={“m”:“2024Year_”,“n”:[[0],9]}
提交:显示no
在这里插入图片描述
再结合代码:

$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;

可以看出我们把c的n键对应的值漏了一些要求,要求数组c内要包含“DGGJ”,又要求不能包含,所以只能考虑绕过了,
array_search函数会先转换成相同类型再进行判定,所以我们的c的n键"n":[[0],9]要改为"n":[[0],0],此时array_search(“DGGJ”, $c[“n”])为true,就不会执行后面的判定了,这里是因为字符串“DGGJ”转换为数值类型相当于0,所以后面一个只能是0,至于前面数组内的值就任意了,再测试
在这里插入图片描述

拿到flag

总结:考察的是代码理解,payload构造和函数绕过
知识点:
1.@
对于这个 @ 符号,之前很少在意,看别人的代码看见时,只知道它是错误屏蔽的符号。今天再一次接触到了它,不得不认真了解一下。
@ 是可以屏蔽函数执行过程中遇到问题而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。这样除了用户界面会友好一些外,更重要的是安全性,因为屏蔽了出错文件的路径等信息。想想看,你的文件路径要是完全暴露给黑客,他们该有多开心,因此,在一些敏感的文件输出的位置,还是记得加上 @ 符号!
2.substr

`substr()` 函数是 PHP 中用于处理字符串的强大工具,它允许开发者从给定的字符串中提取出特定长度的子字符串。下面将详细解释 `substr()` 函数的使用方法及其应用场景。
1. **基本用法**
`substr()` 函数接收三个参数:原始字符串 `$string`,起始位置 `$start` 和截取长度 `$length`- `$string`:要截取的原始字符串。
- `$start`:从字符串的哪个位置开始截取。如果 `$start` 是正数,那么它表示从字符串开头算起的字符位置。如果 `$start` 是负数,那么它表示从字符串末尾算起的字符位置。
- `$length`:截取的子字符串长度。如果省略或者设置为 `null`,则会截取到字符串的末尾。

3.is_numeric()函数,作用是判断输入是不是数字或数字字符串。
4.array_search
array_search()函数在数组中搜索值并返回键。
array_search函数 类似于==
在进行比较的时候,会先将字符串类型转化成相同类型,再比较
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行

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

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

相关文章

vxe-table 实现跨行按钮同时控制两行的编辑状态

vxe-table 写可编辑表格用起来很爽吧&#xff01;有没有遇到下面这种要用一个跨行按钮&#xff0c;控制两行编辑框是否可编辑的情况。是不是官网的方法不好实现了&#xff1f;那么这个应该怎么实现呢。最近刚好碰到这个问题。说下个人的实现思路。 其实也简单&#xff0c;既然官…

ES 磁盘使用率检查及处理方法

文章目录 1. 检查原因2. 检查方法3. 处理方法3.1 清理数据3.2 再次检查磁盘使用率 1. 检查原因 磁盘使用率在 85%以下&#xff0c;ES 可正常运行&#xff0c;达到 85%及以上会影响 PEIM 数据存储。 在 ES 磁盘分配分片控制策略中&#xff0c;为了保护数据节点的安全&#xff0…

论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 王志豪&#xff0c;厦门大学博士生 刘诗雨&#xff0c;厦门大学硕士生 内容简介 新数据的不断涌现使版本更新成为大型语言模型&#xff08;LLMs&#xff…

【Linux 系统负载详情解析】

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

欲海航舟:探寻天性驱动下的欲望演变与人生驾驭

欲海航舟&#xff1a;探寻天性驱动下的欲望演变与人生驾驭。 欲望之源起&#xff0c;本乎天性。 鸿蒙初辟&#xff0c;生灵乍现&#xff0c;欲望即随人之性灵而生&#xff0c;如花木之根柢&#xff0c;虽隐匿于地下&#xff0c;却为生长之根基。 人之初诞&#xff0c;懵懂无…

WebRTC 环境搭建

主题 本文主要描述webrtc开发过程中所需的环境搭建 环境&#xff1a; 运行环境&#xff1a;ubuntu20.04 Node.js环境搭建 安装编译 Node.js 所需的依赖包: sudo apt-get updatesudo apt-get install -y build-essential libssl-dev下载 Node.js 源码: curl -sL https://…

QT-------认识QT

QT简介 QT是一个跨平台的C图形用户界面应用程序框架&#xff0c;由挪威Trolltech公司于1991年开发并发布。它为开发者提供了一套丰富的类库和工具&#xff0c;用于创建各种类型的应用程序&#xff0c;包括桌面应用、移动应用、嵌入式系统应用等。QT具有高度的可定制性和可扩展…

SpringBoot配置文件、热部署、YAML语法、配置文件值注入

SpringBoot的配置文件 文章目录 SpringBoot的配置文件1.SpringBoot的热部署2.配置文件2.1配置文件的作用2.2YAML配置文件&#xff1a;2.3YAML 与 JSON 和 XML 的对比 3.YAML语法3.1键值对3.2值的写法3.3对象、Map&#xff08;属性和值&#xff09;&#xff08;键值对&#xff0…

基于BiTCN双向时间卷积网络实现电力负荷多元时序预测(PyTorch版)

Bidirectional Temporal Convolutional Network \begin{aligned} &\text{\Large \color{#CDA59E}Bidirectional Temporal Convolutional Network}\\ \end{aligned} ​Bidirectional Temporal Convolutional Network​ Bidirectional Temporal Convolutional Network (BiTC…

【JavaEE】Spring Web MVC

目录 一、Spring Web MVC简介 1.1 MVC简介1.2 Spring MVC1.3 RequestMapping注解1.3.1 使用1.3.2 RequestMapping的请求设置 1.3.2.1 方法11.3.2.2 方法2 二、Postman介绍 2.1 创建请求2.2 界面如下&#xff1a;2.3 传参介绍 一、Spring Web MVC简介 官方文档介绍&#xff…

低成本Type - C单口便携屏的全方位解析

在科技迅猛发展的当下&#xff0c;便携式电子产品在日常生活中的地位愈发重要。Type - C单口便携显示器作为新兴显示设备脱颖而出。本文将简述其特点、应用场景、技术原理与发展趋势。 一、特点 Type - C单口便携显示器最大的优势是便携性。它以Type - C接口进行数据传输与供电…

TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化

相关阅读 TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm1001.2014.3001.5482 时序单元的状态 未映射的时序单元(Unmapped Sequential Cell) 在Design Compiler读取了一个RTL设计后&#xff0c;Design Compiler内置的HDL Compiler工…

「瑞仕云曜璟庭」多轨交通+成熟配套 杨浦滨江宜居之高地

1. 均价不足11w 内环内真正高性价比 作为顶级城市资源的集中地&#xff0c;内环向来是购房者争相角逐的重中之重。 但是&#xff0c;内环很小&#xff0c;价格很高。 目前内环的二手房最高挂牌价已经达到约31.95万/㎡&#xff0c;最高成交价已经达到约33.79万/㎡&#xff…

基于STM32的智能家居环境监控系统设计

目录 引言系统设计 硬件设计软件设计系统功能模块 环境监控模块控制模块显示模块系统实现 硬件实现软件实现系统调试与优化结论与展望 1. 引言 随着智能家居技术的发展&#xff0c;环境监控系统已经成为家居管理的重要组成部分。智能家居环境监控系统通过实时监测室内温度、湿…

游戏开发线性空间下PS工作流程

前言 使用基于物理的渲染&#xff0c;为了保证光照计算的准确&#xff0c;需要使用线性空间&#xff1b; 使用线性空间会带来一个问题&#xff0c;ui 在游戏引擎中的渲染结果与 PS 中的不一致&#xff1a; PS&#xff08;颜色空间默认是sRGB伽马空间&#xff09;&#xff1a…

JavaWeb(一) | 基本概念(web服务器、Tomcat、HTTP、Maven)、Servlet 简介

1. 基本概念 1.1、前言 web开发&#xff1a; web&#xff0c;网页的意思&#xff0c;www.baidu.com静态 web html,css提供给所有人看的数据始终不会发生变化&#xff01; 动态 web 淘宝&#xff0c;几乎是所有的网站&#xff1b;提供给所有人看的数据始终会发生变化&#xf…

在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档

软件下载地址: https://sourceforge.net/projects/pdfsam/files/ 需要注意事项&#xff0c;系统需要java环境&#xff0c;确认系统有java环境&#xff0c;根据软件版本需求安装对应的java运行环境。 下载pdfsam-4.3.4-linux.tar.gz安装包&#xff0c;解压&#xff0c;将runt…

windows下Redis的使用

Redis简介&#xff1a; Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库&#xff0c;并提供多种语言的 API。 Redis通常被称为数据结构服务器&#xff0c;因为值&#xff08;value&#xff…

【Linux系统编程】:信号(4)——信号的处理

1.进程地址空间内核区 我们之前都是谈进程地址空间的用户区&#xff0c;接下来我们谈谈内核区。 进程地址空间中的内核区是操作系统内核在进程地址空间中所占据的特定区域。 一般情况下&#xff0c;一个操作系统只有一个内核区以及一个内核级页表。而进程可以有多个页表。不论…

用Python写炸金花游戏

文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **打印结果** 完整代码 以下游戏规则&#xff1a; 那么我们要实现的功能&#xff0c;就是…