ctfshow web入门114

这是一道非常典型的 PHP 伪协议绕过(LFI/文件包含) 类型的 CTF 题目。代码的核心目的是让你读取到服务器上的某个文件,但它设置了严格的过滤。

php 复制代码
if(!is_file($file)){
    highlight_file(filter($file));
}else{
    echo "hacker!";
}

逻辑反转: 注意这里的 !(取反)。代码要求 is_file($file) 必须返回 false 才能进入文件读取的分支

含义: 如果你直接传入一个真实存在的文件路径(例如 file=flag.php),is_file() 会返回 true,取反后变成 false,直接触发 echo "hacker!";

突破思路: 我们需要传入一个既能让 is_file() (检查给定路径是否为一个常规文件)认为是目录或不存在的路径,但又能被 highlight_file() 正常解析并读取的特殊字符串

php 复制代码
if(preg_match('/compress|root|zip|convert|\.\.\/|http|https|data|data|rot13|base64|string/i', $file)){
    die('hacker!');
}

并且对输入的内容进行正则过滤

这里php://filter过滤器有部分被限制但是在旧版本或特定环境的 PHP 中,有些过滤器不需要显式写 convert.,或者可以用特殊组合

所以我们尝试构造payload:?file=php://filter/resource=./flag.php

  1. 为什么能成功绕过 is_file() ?
    代码中的第一道关卡是:
php 复制代码
if(!is_file($file)){ // 必须让 is_file 返回 false 才能进去
    highlight_file(filter($file));
}

在 PHP 中,is_file() 是用来检查一个本地常规文件是否存在的函数。

当你传入 $file = "php://filter/resource=./flag.php" 时:

is_file() 无法直接识别 php:// 这种内存伪协议流为一个普通的本地磁盘文件。

对于这种流或伪协议路径,is_file() 拿不到标准的操作系统文件状态,因此会直接返回 false。

!false 变成了 true,成功顺理成章地进入了 if 分支内部

  1. 为什么 highlight_file() 依然能读到文件?
    进入分支后,代码执行:
php 复制代码
highlight_file(filter($file));

虽然 is_file() 不认伪协议,但 PHP 的文件包含和读取函数(如 highlight_file()、include、file_get_contents())却原生支持 PHP 伪协议包装器(Wrappers)。

当 highlight_file() 接收到 php://filter/resource=./flag.php 时,PHP 底层会这样处理:

解析协议:识别出 php://filter 协议,知道这是一个过滤器流。

定位资源:看到 resource=./flag.php,PHP 包装器会在底层把它解析为当前目录下的 flag.php 文件。

读取并高亮:尽管没有使用 base64 等编码过滤器,这个协议的本质依然是"去读取 resource 指定的文件"。所以它会直接把 flag.php 的源码读取出来,并通过 highlight_file() 以高亮文本的形式渲染在屏幕上

相关推荐
凌晨1687 分钟前
YOLO系列学习笔记:从YOLOv1到YOLOv3的演进之路
笔记·yolo·目标跟踪
鬼手点金8 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
蛋蛋的就会顺顺的9 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
程序员Sunday9 小时前
TypeScript 的 any、unknown、never 有什么区别?
前端·面试·typescript
朱涛的自习室9 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
码艺-Alimjan10 小时前
Tauri 源码备份 · 打包 & 解压 总结,源码收集之路
前端·javascript·vue.js
小马不起床10 小时前
零基础玩转 FastAPI_11:前端后台管理页面
前端·状态模式·fastapi
子非鱼a11 小时前
【文件上传】一个普普通通的edu16
前端
美狐美颜SDK开放平台11 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
pride.li12 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉