这是一道经典的 PHP 代码执行 (RCE) 绕过正则限制的 CTF 题目。源码分析代码的核心逻辑非常简单,但限制很严格:输入点:通过 GET 方式接收参数 c。过滤机制:使用了 preg_match 进行正则匹配。如果匹配成功,则不执行 system($c)。禁止的内容:: (冒号)[a-z] (所有小写字母)\ (反斜杠)% (百分号)\x09 (制表符)\x26 ( 符号) (大于号) (小于号)i 修正符:表示匹配时不区分大小写(这意味着 大写字母 [A-Z] 同样被禁用了)。核心难点你被禁止使用任何字母(a-z, A-Z)以及一些关键的特殊符号。这意味着你不能直接输入像 ls、cat 或 phpinfo() 这样的命令。解题思路:通配符与临时文件在 Linux 系统中,当字母被限制时,我们可以利用 Shell 的通配符 (Wildcards) 和 PHP 上传临时文件 的特性来执行命令。核心技巧:/bin/sh /tmp/phpXXXXXX构造上传表单:你需要构造一个包含文件上传内容的 POST 请求。利用通配符定位:/tmp/phpXXXXXX 可以用 ? 或 * 代替字母。在 Linux 中,使用 . (点号 + 空格) 或 source 可以执行脚本。由于我们要执行的是临时文件,构造后的命令形如:. /???/???所以我们构造的payload为/?c=/???/???64 ???.???其本来的payload应该为?c=/bin/base64 flag.php