ctf show web入门115

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

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

php 复制代码
if(
    is_numeric($num)        // 1. 必须是一个数字或数字字符串
    and $num!=='36'         // 2. 强类型比较,绝对不能等于字符串 '36'
    and trim($num)!=='36'   // 3. 去除首尾空格后,绝对不能等于字符串 '36'
    and filter($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 提取出来进行计算。

相关推荐
Geoffwo1 分钟前
robotjs0.6.0鼠标中轴滚动失效修复方案
前端·javascript
用AI来创业吧7 分钟前
网站建设公司哪家好:报价差 3 倍,差在哪四项成本上(选型笔记)
笔记·性能优化·软件工程·安全威胁分析
彭亚川Allen11 分钟前
从零手搓 RAG 之文档解析技术
前端·后端·架构
2601_9620710022 分钟前
Kimi K3 vs DeepSeek V4-Pro实测对比:2026年同一入口十道题,耗时与token消耗差在哪
android·java·数据库
oicola35 分钟前
Ant Design v5 vs Tailwind CSS:组件库与样式框架的终极对决
前端·css
溪语流沙40 分钟前
【Web全栈进阶】Vue Router + Pinia:SPA路由与全局状态
前端·javascript·vue.js
ManageEngineITSM1 小时前
工单优先级怎么定?影响×紧急度矩阵的设计与落地方法
java·大数据·运维·前端·数据库·变更管理
智商网输送线配件1 小时前
电子制造零散耗材补货实战:小批量混批采购平台怎么选才不停机?
大数据·服务器·前端·数据库·自动化
梦帮科技1 小时前
Web 漏洞攻防深度:WAF 规则逃逸技术(畸形分块传输、双重编码)与对抗加固
linux·前端·网络安全·ssl·web
兰亭妙微UI设计公司1 小时前
兰亭妙微软件界面设计公司的解锁按钮设计10大密码
开发语言·前端·javascript