create_function()
源码
|
思路
存在危险函数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('chdir');"
被完整解析,导致语法错误。也可以使用 #
或 {
来达到同样的效果