我想知道我是否有办法使用这段代码,并用params调用函数,我知道我可以调用no-params函数。
类似的东西:
file.php?f=function arg1 arg2 //with a correct syntax
使用此代码我无法更改:
call_user_func($_GET['f']);
提前致谢!
编辑:我知道这很危险。它只适用于某些PoC,没有任何生产。 编辑:正如我所说,我无法更改代码,我只能调用file.php?f=
答案 0 :(得分:2)
你正在做的是非常危险。您应该从不执行用户指定的信息(包括但不限于调用函数,使用eval()
中传递的信息或直接将其发送到数据库)。
call_user_func_array
可能更容易:
// make "func arg1 arg2" into array('func','arg1','arg2')
$f = explode(' ', $_GET['f']);
// grab 'func' and store it
$func = $f[0];
// grab array('arg1','arg2')
$args = array_slice($f, 1);
// pas both as parameters to call_user_func_array
call_user_func_array($func, $args);
答案 1 :(得分:1)
首先:不要这样做,因为这是安全问题。
第二
$data=explode(" ",$_GET['f']);
$parameters=array_slice($data,1)
call_user_func_array($data[0],$parameters);
答案 2 :(得分:0)
您可以在此PHP中使用?f=function&a[]=arg1&a[]=arg2
之类的网址:
call_user_func_array($_GET['f'], $_GET['a']);
但实际上,不要这样做。不要使用未过滤的,未经验证的输入作为函数名称......!恶意用户现在可以调用任何函数:example ?f=shell_exec&a[]=rm+-rf+/*
,它将执行shell命令rm -rf /*
并尝试删除所有文件。