代码注入相关函数
0x1 eval(string code_str)
将传入的参数(字符串)作为php代码执行,需要是一个完整的语句。
0x2 assert($assertion)
检查一个断言是否为false
assertion是字符串,它会被当成php代码来执行;
0x3 call_user_func()
里面有两个参数,第一个被用来作为函数,第二个为第一个函数的参数值,使用is_callable()函数来判断,检测函数是否支持回调,
比如:is_callable("phpinfo")
0x4 call_user_func_array()
0x5 create_function($args,$code)
将一个函数写在了一行,比如:
<?php
function a($code){
echo $code;
a('tx');
}
?>
相当于
$a = create_function('$code','echo $code');
如果echo $code部分可控,那么就可以实现getshell
0x6 preg_replace($pattern,replacement,subject)
执行一个正则表达式的搜索和替换
/e修正符使preg_replace将replacement参数当作PHP代码执行(只有匹配成功,才能执行)7.0之后不在2使用/e
<?php
$a = 'phpinfo()';
$b = preg_replace('/abc/e',$a,'abcd');
var_dump($b);
?>
0x7 array_map($callback,$array)
第一个参数为回调函数,第二个参数为一个数组,作为函数的参数值
比如:
$a = $_GET['a'];
$b = $GET['b'];
$array[0] = $b;
$c = array_map($a,$array);
有这么一个php,那么在url上这样传参
?a=assert&b=phpinfo
就可以看到phpinfo的信息了,当然也可以不使用$array[0] = $b;让b变成数组,可以直接不要这么一行,变成这样$c = array_map($a,$b);传参的时候这样写
?a=assert&b[]=phpinfo
0x8 usort()
0x9 uasort()
0x10 ${php代码}
${phpinfo()};