• 3.代码审计之 命令注入


                          命令注入

    一 基础讲解

     1所谓的命令注入就是调用函数后输入的代码可以当命令行执行的功能

    WINDOWS 和 LINUX下常用的函数有

    system、exec、passthru、·· 反引号、shell_exec、popen、proc_open、pcntl_exec(Linux下的)

     

    其函数的原型为,他们的功能都相当于反引号的功能

    string system ( string $command [, int &$return_var ] )

    string exec ( string $command [, array &$output [, int &$return_var ]] )

    void passthru (string command, int &return_var)

    string shell_exec (string command)

    `` 反引号

    二 接下来看操作

           1 首先测试的是system函数

           测试代码

     

    运行后在URL里面输入相应的CMD命令就可以执行了

    如输入whoami查看当前权限

     

    后面几个功能一样 测试一下 不再贴图

    2  测试代码如下

    <?php
    
    //代码审计命令注入
    $action = $_GET['cmd'];
    
    echo "<pre>";
    
    //1.system($action);
    
    //2.echo exec($action);
    
    //3.passthru($action);
    
    //4.echo shell_exec($action);
    
    //5.echo `$action`;  注意是反引号 数字1旁边的那个
    
    //echo popen($action,'r');
    
    echo "<pre/>"
    
    ?>

    3  命令执行漏洞的防御函数

           主要使用escapeshellarg()_或escapeshellcmd() 来对参数进行过滤

    escapeshellarg ( string $arg )

    会过滤掉arg 中存在的一些特殊字符。在输入的参数中如果包含中

    文传递给escapeshellarg,会被过滤掉。

    escapeshellcmd ( string $command )

    escapeshellcmd()函数会转义命令中的所有shell 元字符来完成工作。这些元字符包括:# & ; ` ,

    | * ? ~ < > ^ ( ) [ ] { } $ \。

    4  先看没过滤前,在URL中输入echo “sadasd” >> 1.txt

    意思是在根目录下将sadasd输出并生成到1.txt里面

     

    然后看使用escapeshellcmd之后 >>被过滤转义 成了输出

     

  • 相关阅读:
    静态变量一定要先声明后赋值
    建议3 三元操作的类型必一致
    IDEA 创建 Maven web项目注意事项
    js不同类型作比较
    exception中return方法
    exception 打印出异常栈踪迹
    spring controller使用了@ResponseBody却返回xml
    springboot中的406(Not Acceptable)错误
    把本地建好的项目提交到git上
    java基础---------方法和方法重载
  • 原文地址:https://www.cnblogs.com/arsense/p/6297987.html
Copyright © 2020-2023  润新知