PHP数组绕过intval和preg_match的CTF技巧

原题目

<?php
include("flag.php"); // 引入flag文件,flag变量在这里定义
show_source("index.php"); // 显示index.php文件的源码(方便选手查看)// 判断是否通过GET方式传入了pangoulin参数
if(isset($_GET['pangoulin'])){$pangoulin = $_GET['pangoulin']; // 获取pangoulin参数的值// 检查pangoulin中是否包含数字(0-9),如果有则终止程序并输出提示if(preg_match("/[0-9]/", $pangoulin)){die("no no no!"); // 包含数字则直接退出}// 判断pangoulin转换为整数后是否为真(非0),如果为真则输出flagif(intval($pangoulin)){echo $flag; // 满足条件,输出flag}
}

参数传递与数字过滤 :题目要求通过GET传递pangoulin参数,但参数值不能包含数字字符(0-9),否则会被preg_match拦截并终止脚本。

intval判断逻辑 intval($pangoulin)需要返回非零值才能输出flag。常规字符串(如"abc")经intval转换结果为0,无法满足条件。

数组参数在PHP中的独特特性

使用数组形式传递参数(如?pangoulin[]=value)时,PHP会将$_GET['pangoulin']自动解析为数组类型。这种特性在表单处理或API参数传递中较为常见。

数组参数的强制转换问题

调用intval()对数组参数进行强制转换时,结果会固定返回1。这是PHP的类型转换机制决定的,数组转换为整数时总是返回1(非空数组)或0(空数组)。

// 示例:intval对数组的转换
$val = intval(['a', 'b']); // 结果为1
$emptyVal = intval([]);     // 结果为0

preg_match对数组参数的响应

preg_match()函数接收到数组参数时,PHP会生成Warning级别错误,但脚本会继续执行。这与函数预期接收字符串参数的行为不符,但不会像Fatal Error那样终止程序。

// 示例:preg_match对数组的响应
preg_match('/\d+/', ['a', 'b']); 
// 输出:Warning: preg_match() expects parameter 2 to be string, array given

安全建议

处理用户输入时应显式检查变量类型,避免因自动类型转换导致逻辑漏洞。使用is_array()filter_input()函数验证参数类型:

// 类型检查示例
if (is_array($_GET['pangoulin'])) {// 处理数组逻辑
}// 使用过滤器验证
$value = filter_input(INPUT_GET, 'pangoulin', FILTER_DEFAULT, FILTER_REQUIRE_SCALAR);
if ($value === null) {// 非标量参数处理
}

实战利用方法 构造请求URL为:?pangoulin[]=

  • 参数变为空数组
  • 绕过数字检测
  • intval返回1触发flag输出

题目流程图

技术原理总结

  • PHP数组传参需在参数名后加[]
  • 类型转换特性:intval(array)→1
  • preg_match对非字符串参数的容错处理
// 关键代码逻辑示例
if(isset($_GET['pangoulin'])){$param = $_GET['pangoulin'];if(preg_match("/[0-9]/", $param)) die("Blocked");if(intval($param)) echo $flag;
}

典型应用场景 该技巧适用于需要同时满足

  • 参数值不能包含特定字符
  • 需要参数经类型转换后为真值 的CTF题目突破场景。

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

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

相关文章

vue2+elementui使用compressorjs压缩上传的图片

首先是npm install compressorjs 然后新建一个compressorjs.js的文件 import Compressor from "compressorjs";// 默认压缩配置 const DEFAULT_COMPRESS_OPTIONS {quality: 0.6, // 默认压缩质量 (0-1)maxWidth: 1920, // 最大宽度maxHeight: 1080, // 最大高度con…

GPIO详解:不仅仅是输入输出那么简单

GPIO详解&#xff1a;不仅仅是输入输出那么简单 “别小看一个小小的引脚&#xff0c;它可是 MCU 世界的社交之门。” &#x1f44b; 先打个招呼&#xff1a;什么是 GPIO&#xff1f; GPIO&#xff0c;全称是 General Purpose Input/Output —— 通用输入输出口。 简单说&…

深度学习5(深层神经网络 + 参数和超参数)

深层神经网络简介 深层神经网络是机器学习中一种重要的模型&#xff0c;它通过增加网络的“深度”&#xff08;即隐藏层的数量&#xff09;来提升模型对复杂数据的表示和学习能力。同浅层类似&#xff0c;也分为三个部分&#xff1a; 输入层&#xff1a;接收原始数据&#xff…

时间复杂度与空间复杂度分析

一、什么是复杂度&#xff1f; 1.1 为什么需要复杂度分析&#xff1f; 假设你写了两个程序来解决同一个问题&#xff0c;如何判断哪个程序更好&#xff1f;我们不能只看运行时间&#xff0c;因为&#xff1a; 不同电脑性能不同同一电脑在不同时刻状态也不同数据规模不同&#x…

上下文工程:从提示词到自动化流程的AI应用新范式

上下文工程&#xff1a;从提示词到自动化流程的 AI 应用新范式 一、背景与概述&#xff1a;从提示词工程到上下文工程的演进 随着大语言模型 (LLM) 技术的飞速发展&#xff0c;AI 应用开发正经历从 “提示词工程”(Prompt Engineering) 到 “上下文工程”(Context Engineerin…

HTML网页应用打包Android App 完整实践指南

技术准备与工具下载 必需工具清单 在开始之前&#xff0c;需要准备以下开发工具&#xff1a; Android Studio官网&#xff1a;https://developer.android.com/studio HBuilderX官网&#xff1a;https://www.dcloud.io/hbuilderx.html 离线SDK下载&#xff1a;https://nati…

简单 Python 爬虫程序设计

爬虫是获取网页数据的常用工具&#xff0c;我们一起来设计一个基于 requests 和 BeautifulSoup 的简单爬虫&#xff0c;它可以获取网页内容并提取文本信息。 所需库安装 首先需要安装两个必要的库&#xff1a; pip install requests beautifulsoup4 完整代码 import reques…

AUTOSAR图解==>AUTOSAR_AP_EXP_ARAComAPI

AUTOSAR ara::com API详解 自适应平台通信API技术详解 目录 1. 概述2. ara::com API架构 2.1 Proxy/Skeleton架构2.2 通信方式2.3 服务连接方式 3. 详细API说明 3.1 Proxy类3.2 Skeleton类3.3 实例标识符3.4 通信组 4. ara::com API状态管理 4.1 服务生命周期4.2 事件与方法状…

Spring Boot + 本地部署大模型实现:优化与性能提升

在将大语言模型集成到 Spring Boot 应用中时&#xff0c;性能优化是一个关键环节。本地部署的大模型虽然提供了强大的功能&#xff0c;但也可能带来一些性能挑战&#xff0c;如响应时间较长、资源占用较高等问题。本文将介绍如何在 Spring Boot 应用中优化本地部署大模型的性能…

QML 鼠标只响应左键处理方法

【1】问题描述 默认情况下qml支持左键&#xff0c;如果需要支持右键&#xff0c;甚至是中键那需要设置 【2】设置方法 MouseArea{ id: mouse anchors.fill: parent property int cx: 0 pr…

北方算网亮相2025全球数字经济大会|共绘数字友好城市建设

7月2日&#xff0c;以“建设数字友好城市”为主题的2025全球数字经济大会隆重开幕&#xff0c;为构建技术与人、城市与生态和谐共进的全球数字经济新生态提供交流合作平台。自7月3日开始&#xff0c;北方算网将在大会集中亮相&#xff0c;先后在多个论坛中发表主题演讲&#xf…

Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算

Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算 Android的Bitmap 是一个用于表示图像数据的核心类&#xff0c;代表一张图片在内存中的存储&#xff0c;Bitmap存储了图像的像素信息数据。 Bitmap把图像理解为像素点组成的二维矩阵&#xff…

力扣网编程55题:跳跃游戏之逆向思维

一. 简介 前面一篇文章使用贪心算法解决 力扣网55题&#xff1a;跳跃游戏&#xff0c;文章如下&#xff1a; 力扣网编程55题&#xff1a;跳跃游戏之贪心算法-CSDN博客 二. 力扣网编程55题&#xff1a;跳跃游戏之逆向思维 给你一个非负整数数组 nums &#xff0c;你最初位于数…

苍穹外卖--day12数据统计-Excel报表

1.工作台1.1实现思路工作台是系统运营的数据看板&#xff0c;并提供快捷操作入口&#xff0c;可以有效提高商家的工作效率。工作台展示的数据&#xff1a;①今日数据②订单管理③菜品总览④套餐总览⑤订单信息名词解释&#xff1a;①营业额&#xff1a;已经完成订单的总金额②有…

鸿蒙应用开发:从网络获取数据

一、网络状态概述上述任一指标的变化均可视为网络状态的改变 二、获取网络信息 创建网络对象 //创建网络对象 //?表示可传可不传 connection.createNetConnection(netSpecifier?:NetSpecifier,timeout?:number):NetConnection;获取默认激活网络及其能力 //获取默认激活网络 …

探索开源虚拟 Excel 函数模块:Python 中的 Excel 功能利器

在数据处理和分析的领域中&#xff0c;Excel 一直是一款备受青睐的工具&#xff0c;它提供了丰富多样的函数&#xff0c;帮助用户高效地完成各种数据操作。而现在&#xff0c;我&#xff08;董翔&#xff09;开发一个基于 Python 的虚拟 Excel 函数模块&#xff0c;它将 Excel …

开源 vGPU 方案 HAMi: corememory 隔离测试

本文主要对开源的 vGPU 方案 HAMi 的 GPU Core&Memory 隔离功能进行测试。 省流&#xff1a; HAMi vGPU 方案提供的 Core&Memory 隔离基本符合预期&#xff1a; Core 隔离&#xff1a;Pod 能使用的算力会围绕设定值波动&#xff0c;但是一段时间内平均下来和申请的 g…

openstack安装并初始化

openstack安装并初始化openStack 概述OpenStack 起源什么是Openstackopenstack优势使用本地仓库离线安装系统基本环境设置为系统设置本地仓库创建openstack-train的仓库更新系统安装部署工具一键安装设置桥接网络通过 Dashboard 体验 OpenStack 功能创建云主机创建网络(1)用adm…

解决 Cannot create Swift scratch context

场景复现 Xcode 控制台输出&#xff1a; Cannot create Swift scratch context (couldnt create a Clang Importer)Analysis 分析 发生了什么&#xff1f; 在调试 Swift 代码或在 LLDB 里执行 po/expr 命令时&#xff0c;LLDB 需要为表达式临时创建一份 “Swift scratch co…

机械时代的计算

1、机械计算起源 最近在想平衡三进制的除法&#xff0c;想看看那么大牛是怎么做的&#xff0c;资料很少&#xff0c;但还是有的&#xff0c;有但是看不懂&#xff0c;也不知靠不靠谱&#xff0c;后面跟着实践了能行&#xff0c;下面就看看Balanced Ternary Arithmetic&#xff…