查看代码
分析
变量$action要出现数字字母以外的字符,还要执行函数。
/i不区分大小写 /s匹配任何不可见字符,包括空格、制表符、换页符等等
/D如果使用$限制结尾字符,则不允许结尾有换行
这里要绕过正则,经过百度得知\
百度百科:
php里默认命名空间是\,所有原生函数和类都在这个命名空间中。普通调用一个函数,如果直接写函数名function_name()调用,调用的时候其实相当于写了一个相对路径;而如果写\function_name() 这样调用函数,则其实是写了一个绝对路径。 如果你在其他namespace里调用系统类,就必须写绝对路径这种写法。 接下来第二个参数可以引发危险的函数。
这里注意到参数的构造方式 $action('',$arg); 很显然,需要一个可以输入至少2个参数的函数 发现create_function create_function在构建函数的时候,也是使用的字符串拼接的方式,将第二个参数的$code传入到其中
create_function函数
string create_function ( string $args , string $code ) string $args 变量部分 string $code 方法代码部分 举例: create_function('$fname','echo $fname."Zhang"') 类似于: function fT($fname) { echo $fname."Zhang"; }
尝试构造payload
?action=%5ccreate_function&arg=1";}phpinfo();/*
?action=\create_function&arg=1;}print_r(file_get_contents('../flag_h0w2execute_arb1trary_c0de'));/*
标签:function,string,create,fname,action,PHP,函数
来源: https://www.cnblogs.com/ZHH-BA/p/12468480.html