[CTF/网络安全] 攻防世界 simple_php 解题详析

news/2024/5/20 0:06:11 标签: php, web安全, CTF, 网络安全, 安全

[CTF/安全>网络安全] 攻防世界 simple_php 解题详析

    • 代码解读
    • PHP弱语言特性
    • 姿势
      • 参数a限制绕过
      • 参数b限制绕过
    • 总结

题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。
在这里插入图片描述

代码解读

$a=@$_GET['a']; 从HTTP GET请求参数中获取一个名为a的变量,并将其赋值给变量a。@符号用于禁止错误输出,如果不存在参数a则会将变量a设置为NULL。

$b=@$_GET['b']; 从HTTP GET请求参数中获取一个名为b的变量,并将其赋值给变量b。

if($a==0 and $a){ echo $flag1; } 如果变量a等于0并且a存在,则输出变量flag1的值。但是由于a不可能同时为0和存在,因此这个if语句不会执行。

if(is_numeric($b)){ exit(); } 如果变量b是一个数字,则终止程序的执行。

if($b>1234){ echo $flag2; } 如果变量b的值大于1234,则输出变量flag2的值。


PHP弱语言特性

在 PHP 中,有两种比较运算符用于比较两个值是否相等,它们分别是 =====,它们的区别如下:

== 比较运算符是一个松散比较,它只比较变量的值,而不考虑变量的数据类型。当比较两个变量时,如果它们的值相等,则返回 true。
例如:0 == "0" 返回 true。

=== 恒等比较运算符是一个严格比较,它不仅比较变量的值,还比较变量的数据类型和内存地址。当使用恒等比较运算符比较两个变量时,如果它们的值和数据类型都相等,则返回 true。
例如:0 === "0" 返回 false。

因为 == 操作符仅比较值,所以当比较字符串时,PHP 会尝试将字符串转换为数字进行比较
具体来说,PHP会依次执行以下步骤:

  1. 如果其中一个操作数是布尔值(true或false),则将其转换为1(true)或0(false)。

  2. 如果其中一个操作数是null,将其转换为整数0。

  3. 如果其中一个操作数是数组,将其转换为字符串Array。

  4. 如果操作数中的任何一个是对象,则将其转换为字符串Object。

  5. 对于两个操作数都是字符串的情况,PHP会将两个字符串中的非数字字符删除,然后将剩余的数字字符串转换为相应的数字进行比较。

  6. 如果以上都不适用,则将字符串转换为数字进行比较。

例如,当比较字符串"0123"和整数123时,返回 true;当比较字符串"12xxx"和整数12时,返回 true,因为 PHP 会将字符串转换为数字后进行比较。


姿势

参数a限制绕过

由于a等于0并且a存在,所以可构造开头数值为0的字符串a
GET:a=0qiu

参数b限制绕过

由于b不能为数字且b数值大于1234,因此可构造开头数值大于1234的字符串b
GET:b=1235qiu

回显如下:

在这里插入图片描述


总结

该题结合GET传参姿势考察PHP代码的解读PHP弱语言特性
我是秋说,我们下次见。


http://www.niftyadmin.cn/n/344001.html

相关文章

CodeNote_1.2.0_spring中bean的基本配置

factory-bean 与 factory-method 在 XML 配置文件中,可以使用 元素来定义一个 FactoryBean,并配置其相关属性。下面是一个示例: 首先,创建一个实现了 FactoryBean 接口的工厂类 MyFactoryBean: public class MyFact…

索引的底层数据结构,讲讲B+ 树,B树

B 树的变种。 B树:所有节点(非叶子节点 叶子节点),都存储真正的行数据,所以一个数据页能存储的数量,相较于 B 树,就少很多。 B 树: ● 只有叶子节点存储具体的行数据,非…

ROS 开发环境搭建(虚拟机版本)(一)

相关工具,以及镜像(以后有用) 链接:https://pan.baidu.com/s/1xgtp-XGFFNCACV_-0TJO2A 提取码:ar1w 1. 下载vm虚拟机(我选择的官方最新的vm虚拟机),安装好 2.安装百度网盘里面的…

【OpenCv • c++】形态学技术操作 —— 顶帽操作与黑帽操作

🚀 个人简介:CSDN「博客新星」TOP 10 , C/C 领域新星创作者💟 作 者:锡兰_CC ❣️📝 专 栏:【OpenCV • c】计算机视觉🌈 若有帮助,还请关注➕点赞➕收藏&#xff…

基于MAC地址的ACL配置

基于MAC地址的ACL配置 【实验目的】 掌握基于MAC地址的标准ACL的配置。验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 S1 e0/0 N/A N/A N/A e0/1 N/A N/A N/A PC1 N/…

leetcode 884. 两句话中的不常见单词

题目描述解题思路执行结果 leetcode 884. 两句话中的不常见单词 题目描述 两句话中的不常见单词 句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。 如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不…

羽毛球中级提高班课后总结

2023.3.28第一课 🏸️四点对角线步伐练习🏸️ 1️⃣每一次接球一定要有启动步,脚跟离地; 2️⃣两边上网都是先迈右腿,加一个并步,最后一步大迈步,脚跟先落地; 3️⃣右边上网脚尖朝…

Redis数据结构——QuickList、SkipList、RedisObjective

承接上文,本文主要介绍QuickList、SkipList、RedisObjective 四、 Redis数据结构-QuickList 问题1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办? ​ 答&a…