news 2026/5/13 18:57:42

CTF SHOW WEB入门79

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CTF SHOW WEB入门79

这是一道非常经典的 PHP 代码审计类 CTF 题目。该代码的核心在于文件包含漏洞 (LFI) 以及对特定关键词的黑名单绕过。
以下是详细的解题思路分析:

  1. 代码分析
    代码逻辑非常简单直接:
    获取参数:通过 $_GET[‘file’] 获取用户输入。
    过滤机制:使用 str_replace(“php”, “???”,file)将输入中的字符串php替换为???。核心功能:执行include(file) 将输入中的字符串 php 替换为 ???。 核心功能:执行 include(file)将输入中的字符串php替换为???。核心功能:执行include(file)。
    关键点:
    由于 php 被过滤了,直接使用常见的伪协议(如 php://filter)会失效,因为 php:// 会变成 ???😕/,导致协议解析失败。

我们先尝试查看当前目录下的文件名
构造的payload为:?file=data://txt/plain,<?PHP system('ls');?>

本想照猫画虎构造查询flag.php中的内容
但当输入payload:?file=PHP://filter/read=convert.base64-encode/resource=flag.PHP但是这个payload却执行失败

因为协议名不区分大小写,但文件名通常区分大小写。
失败原因分析
在 Linux 系统(大部分 CTF 题目环境)中,文件名是严格区分大小写的。
协议部分 (PHP://filter):PHP 解释器能够识别并将其处理为 php://filter,这部分你绕过了 str_replace 的限制,是正确的。
资源部分 (resource=flag.PHP):这里你写的是 .PHP (大写)。服务器的文件系统中真实存在的文件名大概率是 flag.php (小写)。因为 Linux 找不到名为 flag.PHP 的文件,所以 include 失败并抛出了 failed to open stream

我们考虑使用?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

这段 Payload 由三部分组成:
协议头 (data://):告诉 PHP 这是一个“数据流”协议,而不是一个真实存在的文件。
类型声明 (text/plain;base64):告诉 PHP 后面的数据是纯文本格式,并且是用 Base64 编码过的。
数据负载 (PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==):这是经过编码后的实际 PHP 代码。
2. 内部逻辑:代码解释
我们将那串 Base64 字符串解码:
PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg== \rightarrow <?php system('cat flag.php');?>

<?php ... ?>:标准的 PHP 脚本标识。

system(…):这是一个强大的 PHP 函数,用于执行系统命令并直接输出结果。
‘cat flag.php’:这是 Linux 命令。cat 命令用于查看文件内容。所以这句代码的意思是:“请帮我把服务器上 flag.php 的内容读出来并打印在页面上。”
3. 为什么这样写能绕过过滤?
回到你最初看到的题目源码:
$file = str_replace(“php”, “???”, $file);
巧妙的“隐身术”
绕过关键词:在 Payload 中,我们的 PHP 代码是被 Base64 编码过的。编码后的字符串里完全没有 php 这三个字母。
协议名绕过:如果题目对协议名也做了限制(比如 data 变 ???),你可以利用 PHP 伪协议不区分大小写的特性,写成 Data://。只要避开小写的 php 组合,str_replace 就找不到目标,也就无法拦截。
4. 执行流程图解
输入注入:你把 data://… 传给file。过滤检查:strreplace扫描字符串。由于Base64编码后的字符乱序,它找不到php,直接放行。文件包含:include(file。 过滤检查:str_replace 扫描字符串。由于 Base64 编码后的字符乱序,它找不到 php,直接放行。 文件包含:include(file。过滤检查:strreplace扫描字符串。由于Base64编码后的字符乱序,它找不到php,直接放行。文件包含:include(file) 接收到了这个数据流。
动态解码:PHP 引擎会自动将 Base64 数据解码回 <?php system('cat flag.php');?>。
代码执行:因为 include 函数会解析并执行 PHP 标签内的内容,服务器便乖乖地执行了 cat flag.php 命令,把 flag 发送到了你的浏览器。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 18:55:06

基于Git工作流的OpenClaw状态备份工具clawsync设计与实践

1. 项目概述&#xff1a;为什么我们需要一个“Git原生”的备份工具&#xff1f;如果你和我一样&#xff0c;日常重度依赖 OpenClaw 这类现代化开发工具&#xff0c;那么一个挥之不去的痛点就是&#xff1a;状态管理。配置文件、工作区文件、凭据、会话……这些零散但又至关重要…

作者头像 李华
网站建设 2026/5/13 18:46:38

开发者技能工具箱:从Shell脚本到IaC,构建个人效率基础设施

1. 项目概述&#xff1a;一个面向开发者的技能工具箱最近在GitHub上看到一个挺有意思的项目&#xff0c;叫rohitg00/skillkit。光看名字&#xff0c;你可能会觉得有点抽象&#xff0c;但点进去之后&#xff0c;我发现这其实是一个开发者自己整理和维护的“个人技能工具箱”。它…

作者头像 李华
网站建设 2026/5/13 18:46:06

Termius中文版:安卓SSH客户端深度汉化指南与使用教程

Termius中文版&#xff1a;安卓SSH客户端深度汉化指南与使用教程 【免费下载链接】Termius-zh_CN 汉化版的Termius安卓客户端 项目地址: https://gitcode.com/alongw/Termius-zh_CN 你是否正在寻找一款功能强大且界面友好的安卓SSH客户端&#xff1f;Termius中文版可能是…

作者头像 李华
网站建设 2026/5/13 18:45:04

AI提示词驱动安全测试:自动化攻击面映射与漏洞侦察实践

1. 项目概述&#xff1a;当安全测试遇上AI提示词 最近在搞安全测试和漏洞挖掘的朋友&#xff0c;估计都听过一个词叫“攻击面映射”。简单说&#xff0c;就是把一个目标&#xff08;比如一个网站、一个公司&#xff09;所有可能被攻击的入口点都找出来&#xff0c;列个清单。这…

作者头像 李华
网站建设 2026/5/13 18:44:14

AI应用治理平台ZLAR:从网关到统一架构的演进与实践

1. 项目概述&#xff1a;从单一工具到统一平台的演进最近在折腾AI应用开发&#xff0c;特别是涉及到多模型调用、安全审计和策略执行这块&#xff0c;发现很多开源项目都是“各自为政”。比如&#xff0c;你需要一个网关来管理AI模型的访问&#xff0c;又需要一个独立的日志系统…

作者头像 李华