php_audit--命令注入攻击

php中可以使用如下5个函数来执行外部的应用程序或函数:

    string system(string command,int &return_var)
    注:command要执行的命令,return_var 存放执行命令的执行后的状态值;

    string exec(string command,array &output,int $return_var)
    注:output 获得执行名输出的每一行字符串

    void passthru(string command,int &return_var)

    string shell_exec(string command)

    ``:与shell_exec的功能相同    

## 漏洞示例  ##

  <?php
    error_reporting(0);
    $dir=$_GET[‘dir‘];
    if(isset($dir)){
        system("ls -al".$dir);
    }    
    ?>

 

 

# eval注入攻击 #

## 漏洞示例 ##

    <?php
    $var="var";
    if(isset($_GET[‘arg‘])){
        $arg=$_GET[‘arg‘];
        eval("\$var=$arg;");
        echo "\$var=".$var;
    }
    ?>

 

# 动态函数 #

## 漏洞示例 ##

    <?php
    func A(){
        dosomething();
    }
    func B(){
        dosomething();
    }
    if(isset($_GET["func"])){
        $myfunc=$_GET["func"];
        echo $myfunc();
    }
    ?>

 

# 防御方法 #

    1、尽量不要执行外部命令
    2、使用自定义函数或函数库来替代外部命令的功能
    3、使用escapeshellarg函数来处理命令参数
    4、使用safe_mode_exec_dir指定可执行文件的路径
    esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号“’”,替换成“\’”,双引号“””,替换成“\””,分号“;”替换成“\;”
    用safe_mode_exec_dir指定可执行文件的路径,可以把会使用的命令提前放入此路径内
    safe_mode = On
    safe_mode_exec_di r= /usr/local/php/bin/

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。