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)这种技术可以绕过某些基础的文件扩展名检查。

相关新闻

最新新闻

AutoScientists快速上手:10分钟从零搭建到启动你的第一个AI科研团队(附完整环境配置)

AutoScientists快速上手:10分钟从零搭建到启动你的第一个AI科研团队(附完整环境配置)

AutoScientists快速上手:10分钟从零搭建到启动你的第一个AI科研团队(附完整环境配置) 【免费下载链接】AutoScientists AutoScientists: Self-Organizing Agent Teams for Long-Running Scientific Experimentation 项目地址: https://gitc…

2026/8/27 17:18:26
LLM时代的推理感知推荐系统:技术演进与未来方向!

LLM时代的推理感知推荐系统:技术演进与未来方向!

TLDR: 本文系统梳理了大模型在推荐系统中引入推理能力的发展脉络,首次明确界定了“推荐推理”的概念,并从文本推理、潜在推理与检索增强推理三类范式出发,总结其机制演化与评估挑战,为构建具备推理意识的下一代推荐系统提供方向。…

2026/8/27 17:18:26
Agent实战教程:LangGraph图结构深度解析,构建大模型智能体的核心组件与实战,看到就是赚到!!

Agent实战教程:LangGraph图结构深度解析,构建大模型智能体的核心组件与实战,看到就是赚到!!

图结构(Graphs) LangGraph 的核心是将智能体工作流建模为图结构。你可以通过三个关键组件来定义智能体的行为: 状态(State) 这是一个共享的数据结构,代表你应用程序的当前快照。它可以是任何数据类型&#…

2026/8/27 17:18:26
大模型RAG核心技术:信息检索如何打造AI“超级大脑“?看完这一篇你就知道了!!

大模型RAG核心技术:信息检索如何打造AI“超级大脑“?看完这一篇你就知道了!!

前言 你是否有过这样的经历?问AI一个问题,它能自信满满地回答,但你稍微验证一下就发现——“这个回答完全是编造的”。没错,这就是当今大模型的典型特点:看似无所不知,实则可能自信地胡说八道。 这个问题该…

2026/8/27 17:18:26
17万Star、5天迭代两个版本:DeepSeek Harness开源后,AI编程的「Agent运行时」争夺战谁会赢?

17万Star、5天迭代两个版本:DeepSeek Harness开源后,AI编程的「Agent运行时」争夺战谁会赢?

2026年8月13日,DeepSeek正式开源AI Agent框架DeepSeek Harness(DSH),5天内GitHub Star冲破17万;8月20日,OpenAI紧随其后将Codex定义为「开放的Agent Harness平台」。从DeepSeek到OpenAI,从腾讯到…

2026/8/27 17:18:26
Lite Transformer模型架构全解析:内核尺寸调度3-7-15-31与编码器解码器设计

Lite Transformer模型架构全解析:内核尺寸调度3-7-15-31与编码器解码器设计

Lite Transformer模型架构全解析:内核尺寸调度3-7-15-31与编码器解码器设计 【免费下载链接】lite-transformer [ICLR 2020] Lite Transformer with Long-Short Range Attention 项目地址: https://gitcode.com/gh_mirrors/li/lite-transformer Lite Transfo…

2026/8/27 17:13:26