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


    目录

    命令执行漏洞简介:

    原因:

    危害:

    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 的输入将会由抽象句法形式组成。

    例子

    ; ?>

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

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

    2.assert

    断言函数,用于在调试过程中捕捉程序的错误。

    “断言”在语文中的意思是“断定”、“十分肯定地说”,在编程中是指对某种假设条件进行检测,如果条件成立就不进行任何操作,如果条件不成立就捕捉到这种错误,并打印出错误信息,终止程序执行。

    如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。

    例子:

     

    不需要以分号结尾

    3. preg_replace

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

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

     

    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 $... ]

    )

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

    数组的每个元素应用回调函数
    $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):字符串

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

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

    6. call_user_

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

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

    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)为回调函数的的参数传入。

    $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,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。

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

    9. 双引号  

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

     

  • 相关阅读:
    酷开科技丨新年新玩法!酷开系统壁纸模式给客厅“换”新
    JVM jstat 查看内存新生代老年代回收情况,排查oom
    关于人力外包公司那些事
    Opencascade常用函数 更新中...
    SpringCloud 微服务全栈体系(十)
    算法学习笔记(18): 平衡树(一)
    vue 中 keep-alive 组件的作用
    一种图神经网络架构:GraphSAGE
    新消费降温,良品铺子还能走多远?
    【C++】【Opencv】霍夫直线检测即cv::HoughLinesP()函数详解和示例
  • 原文地址:https://blog.csdn.net/weixin_67503304/article/details/125989686