
1. 从warmup题目认识PHP文件包含漏洞第一次接触CTF的web题目时warmup这类入门题往往能给我们最直接的漏洞体验。就拿这道题来说表面看起来简单但实际暗藏玄机。我在解题过程中踩了不少坑最后才明白其中的门道。PHP文件包含漏洞是web安全中常见的问题它允许攻击者通过包含恶意文件来执行任意代码。这道warmup题目就是典型的文件包含漏洞利用案例。我们先来看题目给出的源码重点分析其中的checkFile函数。这个函数设置了白名单机制只允许包含source.php和hint.php两个文件但通过巧妙的路径遍历我们就能绕过这个限制。2. 代码审计与白名单绕过技巧2.1 关键代码分析让我们仔细看看题目中的PHP代码。核心逻辑在emmm类的checkFile方法中public static function checkFile($page) { $whitelist [sourcesource.php,hinthint.php]; if (! isset($page) || !is_string($page)) { echo you cant see it; return false; } // ...后续代码 }白名单机制看似严密但存在几个关键漏洞点。首先代码使用了mb_substr和mb_strpos来处理传入的文件名参数这给了我们绕过白名单的机会。具体来说函数会截取问号(?)之前的内容进行白名单校验。2.2 路径遍历攻击实战通过分析发现我们可以构造这样的payloadsource.php?../../../../../ffffllllaaaagggg这个payload的精妙之处在于以白名单文件source.php开头通过问号截断使用多个../实现目录跳转最终定位到目标文件ffffllllaaaagggg在实际测试中我发现需要尝试不同层级的../才能准确找到flag文件所在位置。这也是CTF题目常见的设置考察选手的耐心和技巧。3. 进阶利用技巧与防御思路3.1 PHP伪协议尝试与失败分析最初我考虑使用PHP伪协议来读取文件php://filter/readconvert.base64-encode/resource../../../ffffllllaaaagggg但测试发现这种方法行不通因为最终include处理的是整个字符串source.php?php://filter...而不是单纯的伪协议部分。这个尝试虽然失败但让我更深入理解了文件包含的处理机制。3.2 防御措施建议从防御角度开发者可以采取以下措施严格限制包含文件的路径禁止目录跳转使用realpath函数解析最终路径设置open_basedir限制文件访问范围避免动态包含用户可控的文件名4. 实战经验与技巧总结通过这道题目我总结了几个重要经验代码审计时要特别注意字符串处理函数白名单机制可能存在截断绕过漏洞路径遍历需要尝试不同层级的跳转伪协议并非在所有场景都适用建议新手在练习时可以先用本地环境复现漏洞理解每个步骤的原理。比如搭建一个类似的PHP环境尝试不同的payload观察服务器的响应这样能更深入地掌握漏洞利用技巧。这道warmup题目虽然简单但包含了文件包含漏洞的经典利用思路。在实际渗透测试中遇到类似的白名单机制时就可以尝试这种截断加路径遍历的方法。记住安全研究最重要的就是多实践、多思考每个失败的尝试都是宝贵的经验。