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

ctf show web入门115

这是一道非常经典的 PHP 弱类型与特性绕过的 CTF 题目。核心目标是通过 ?num=xxx 传入一个参数,使得它能通过那一长串复杂的 if 条件判断,最终走到 echo $flag;。

我们把核心的判断条件列出来,需要同时满足以下 4个外部条件 和 1个内部条件:

if(is_numeric($num)// 1. 必须是一个数字或数字字符串and$num!=='36'// 2. 强类型比较,绝对不能等于字符串 '36'andtrim($num)!=='36'// 3. 去除首尾空格后,绝对不能等于字符串 '36'andfilter($num)=='36'// 4. 经过 filter() 函数过滤、替换后的结果,弱类型等于 '36'){if($num=='36'){// 5. 内部条件:$num 本身弱类型等于 '36'echo$flag;}}

关键函数 filter($num) 分析:
这个函数会把 $num 中的以下字符全部替换为 “1”:
0x (十六进制)
0
. (浮点数小数点)
e 或 E (科学计数法)

  • (正号)

核心突破口:PHP 的弱类型与空白字符
我们要让一个字符串既满足 is_numeric,又在弱类型比较(==)下等于 36,同时还不能直接是 ‘36’。

绕过思路一:利用空白字符
PHP 的 is_numeric() 和弱类型比较 == 在处理数字时,会忽略字符串开头的某些空白字符(例如空格 %20、制表符 %09、换行符 %0a、回车 %0d、水平制表符 %0b、换页符 %0c 等)。

但是,题目中有一个条件叫 trim($num) !== ‘36’。

trim() 会去除:空格、\t、\n、\r、\0、\x0B。

注意: trim() 不会去除换页符 \f(URL编码为 %0c)。

如果我们传入 %0c36:
is_numeric(“%0c36”) ->True (PHP 认为它是数字 36)
“%0c36” !== ‘36’ -> True (强类型不相等)
trim(“%0c36”) -> 结果依然是 “%0c36”,所以 !== ‘36’ -> True
filter(“%0c36”) -> 里面没有要替换的字符,结果是 “%0c36”。在 filter($num) == ‘36’ 时,由于是弱类型比较,%0c36" 会被转换为数字 36 -> True
内部条件 “%0c36” == ‘36’ -> True所以我们构造payload为:?num=%0c36

为什么空格 %20、制表符 %09、换行符 %0a、回车 %0d、水平制表符 %0b不能绕过限制

字符编码 (URL),对应的空白字符类型,trim() 是否会切除?
%20,普通空格 (Space),会,直接切除
%09,制表符 (Tab),会,直接切除
%0a,换行符 (Line feed),会,直接切除
%0d,回车符 (Carriage return),会,直接切除
%00,空字节 (NUL-byte),会,直接切除
%0b,垂直制表符 (Vertical tab),会,直接切除
%0c,换页符 (Form feed),不会切除!

因为在 PHP 的底层逻辑中,当它遇到像 %20(空格)、%09(制表符)、%0a(换行)这类标准空白字符开头+数字的字符串时,is_numeric() 和弱类型比较 == 会自动忽略开头的空白,直接把后面的 36 提取出来进行计算。

http://www.zskr.cn/news/1526274.html

相关文章:

  • 118、【Agent】【OpenCode】项目配置(重复依赖分析)
  • 从写完就发到AI发布策略_CSDN_AI数字营销让内容分发变了什么
  • 免费IDM激活脚本完整指南:一键解锁下载加速器
  • Nature 子刊观点:AI 检测让论文写作陷入两难
  • 3步实现缠论自动分析:通达信免费插件实战指南
  • 如何让Paperless-ngx说你的语言:从中文界面到多语言文档管理
  • 微信社交关系管理神器:3分钟检测谁删了你,告别单向好友烦恼
  • 2026免费音频转AMR在线保姆级教程!无限制工具手把手教学,老旧录音笔也能轻松播放 - 时时资讯
  • 2026免费视频转AVI在线保姆级教程!无限制工具手把手教学,老式影碟机/U盘即插即播 - 时时资讯
  • MPC7450缓存架构与MPX总线设计:从原理到工程实践
  • 京东寄大件物流怎么收费?超全省钱攻略来了 - 快递物流资讯
  • 软件开发全链路效能提升实战指南
  • 2026年双螺杆造粒机五大主流厂家深度实测对比(技术参数、场景适配、运维成本) - 小艾信息发布
  • 2020年软考-集团分公司管理—软件设计师—东方仙盟
  • GSV2221@ACP#DP 1.4 MST 多屏转换芯片,物理 AI 多模态交互的视觉中枢
  • GSV2231@ACP#三屏 DP 1.4 MST 转换芯片,物理 AI 多任务协同的扩展核心
  • 告别重复安装!利用Python虚拟环境(venv)一劳永逸管理你的项目依赖
  • Java毕设选题推荐:基于 B/S 架构的校园信息交流共享系统的设计与实现 依托 SpringBoot 技术的校园资讯推送共享系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 满心禧月子中心资质证书查哪些|月子中心资质怎么核实才靠谱 - 品牌观察
  • League Akari:英雄联盟客户端的终极一体化工具箱
  • 好客搜整体介绍——一家真正为企业营销赋能的AI技术公司
  • PlotNeuralNet实战:5分钟为你的YOLOv8/Transformer模型定制专属结构图(Python3.10+)
  • 从鸢尾花分类到用户流失预测:用Scikit-learn快速上手决策树实战
  • 【.NET并发编程 - 16】IAsyncEnumerable 异步流:边加载边处理的优雅之道
  • 2026年6月最新版永州正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • 别再死磕EKF了!聊聊ESKF:一种更优雅、更省算力的IMU融合方案
  • 快手怎么去水印?2026实测避坑指南 - 科技热点发布
  • 2026爆火!5款AI写作辅助网站实测,告别推倒重来,初稿一气呵成
  • 2026年视频去水印在线工具怎么选 - 科技热点发布
  • 【万字文档+源码】基于springboot+vue购物网站系统 -学习项目资料分享