专栏首页网络攻防实战知识交流MetInfo 6.0.0反馈管理页面存储XSS(CVE-2018-7721)分析

MetInfo 6.0.0反馈管理页面存储XSS(CVE-2018-7721)分析

MetInfo6.0.0 XSS(CVE-2018-7721)

说明:MetInfo 6.0.0中的跨站点脚本(XSS)漏洞允许远程攻击者注入任意Web脚本或HTML

1.漏洞细节:

/app/system/feedback/web/feedback.class.php line:18 to 37

      public function dofeedback() {
        global $_M;
      if($_M['form']['action'] == 'add'){
            $this->check_field();
            $this->add($_M['form']);
        }else{
            $classnow = $this->input_class($_M['form']['id']);
            $this->add_input('id', $classnow);
            if($classnow)$this->load_config($_M['lang'], $classnow);
            $data = load::sys_class('label', 'new')->get('column')->get_column_id($classnow);
            $this->add_array_input($data);
            $this->check($data['access']);
            unset($data['id']);
            $this->seo($data['name'], $data['keywords'], $data['description']);
            $this->seo_title($data['ctitle']);
            $this->seo_title($_M['config']['met_fdtable']);
            $this->add_input('fdtitle',$data['name']);
            require_once $this->template('tem/feedback');
        }
    }

然后前台表单插入数据库。位于 /app/system/feedback/web/feedback_admin.class.php line:169 to 190

    function doeditor() {
    global $_M;
    nav::select_nav(1);
    $a = 'doeditorsave';
    $class1 = $_M[form][class1];
    $feedbackcfg= load::mod_class('feedback/feedback_handle','new')->get_feedback_config($class1);
    $met_fd_email=$feedbackcfg[met_fd_email][value];
    $id = $_M[form][id];
    $query = "UPDATE {$_M[table][feedback]} SET readok='1' WHERE id='{$_M['form']['id']}'";
    DB::query($query);
    $feedback_list = DB::get_one("select * from {$_M[table][feedback]} where id='$id' and class1 = '$class1'");
    $query = "SELECT * FROM  {$_M[table][parameter]} where lang='{$this->lang}' and ((module='{$this->module}' and class1 = '0') or (module='{$this->module}' and class1 = '$class1')) order by no_order";
    $result = DB::query($query);
    $weburl = $_M[config][weburl];
    while ($list = DB::fetch_array($result)) {
      $info_list = DB::get_one("select * from {$_M[table][flist]} where listid='$id' and paraid='$list[id]' and lang='{$this->lang}'");
      $list[content] = $list[type] == 5 ? (($info_list[info] != '../upload/file/') ? "<a href='{$weburl}" . $info_list[info] . "' target='_blank'>{$_M[word][clickview]}</a>" : $_M[word][filenomor]) : $info_list[info];
      $feedback_para[] = $list;
    }
    $fnam = DB::get_one("SELECT * FROM {$_M[table][column]} WHERE id='$class1' and lang='{$this->lang}'");
    require $this->template('own/article_add');
    }

然后找到 /app/system/feedback/admin/templates/artile_add.php line:16 to 75

    foreach($feedback_para as $key=>$val){
    $email=$val[id]==$met_fd_email&&$val[content]?"&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"{$_M[url][own_form]}a=doreplyemail&customerid={$customerid}&id={$id}&class1={$_M[form][class1]}&class2={$_M[form][class2]}&class3={$_M[form][class3]}&email={$val[content]}\">{$_M[word][unitytxt_35]}</a>":'';
    echo <<<EOT
     -->
        <div class="v52fmbx_dlbox">
        <dl>
            <dt>{$val[name]}{$_M[word][marks]}</dt>
            <dd>
                $val[content]{$email}
            </dd>
        </dl>
        </div>
    <!--
    EOT;
    }
    echo <<<EOT
     -->
        <div class="v52fmbx_dlbox">
        <dl>
            <dt>{$_M[word][fdeditorTime]}{$_M[word][marks]}</dt>
            <dd>
                {$feedback_list[addtime]}
            </dd>
        </dl>
        </div>
        <div class="v52fmbx_dlbox">
        <dl>
            <dt>{$_M[word][fdeditorFrom]}{$_M[word][marks]}</dt>
            <dd>
                {$feedback_list[fromurl]}
            </dd>
        </dl>
        </div>
        <div class="v52fmbx_dlbox">
        <dl>
            <dt>{$_M[word][feedbackID]}{$_M[word][marks]}</dt>
            <dd>
                {$feedback_list[customerid]}
            </dd>
        </dl>
        </div>
        <div class="v52fmbx_dlbox">
        <h3 class="v52fmbx_hr">{$_M[word][fdeditorRecord]}{$_M[word][marks]}</h3>
        <dl>
            <dd class="ftype_ckeditor">
                <div class="fbox">
                    <textarea name="useinfo" data-ckeditor-y="500">{$feedback_list[useinfo]}</textarea>
                </div>
            </dd>
        </dl>
        </div>
        <div class="v52fmbx_submit">
            <input type="submit" name="Submit" value="{$_M[word][Submit]}" class="submit" />
        </div>
       </div>
      </div>
     </div>
    </form>
    <!--
    EOT;

因此它直接打印数据库的内容,因此我们可以控制反馈表单并注入任意Web脚本或HTML。我们可以在管理员查看反馈时创建存储的XSS。

2.PoC

使用谷歌浏览器打开此 https://www.metinfo.cn/upload/file/MetInfo6.0.0.zip 测试站点。下载此版本()并构建测试站点。

然后我们使用这个网址:

http://127.0.0.1/feedback/index.php

输入(<script>alert(/xss/)</script>) 在任何输入框中

然后我们可以得到这样的页面。

接下来,我们需要知道如何触发此XSS。然后我们进入网站后台

现在,我们是本网站的网站管理员,我们可以查看反馈。

XSS将触发。

本文分享自微信公众号 - 无级安全(wujisec),作者:fz只不过是从头再来

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • BSidesSF 2019 CTF writeup

    在网上刷的题目,难度还好,一些题目很有借鉴意义,收录了一些web方面的writeup,用来学习。有更好的解题思路欢迎留言。

    用户5878089
  • 护网杯部分writeup

    AAoHAR1WX1VQVlNVU1VRUl5XXyMjI1FWJ1IjUCQnXlZWXyckXhs=

    用户5878089
  • phpstudy RCE 复现

    用户5878089
  • Vue实战系列—评价组件的设计与实现(6)

    针对组件引用的图片可能产生变动性,我们将组件内的图片放入组件文件夹内,进行引用。使得组件更加便于维护。

    前端大彬哥
  • 一文全览深度学习在计算机视觉领域的应用

    本文首发于知乎,作者为奇点汽车美研中心总裁兼自动驾驶首席科学家黄浴,AI 开发者经授权转载。

    AI研习社
  • 【收藏】深度学习在计算机视觉领域的应用一览!超全总结!

    转载自知乎https://zhuanlan.zhihu.com/p/55747295

    小白学视觉
  • VeeValidate 的使用场景以及配置

    这个例子中发验证码是一个验证 注册又是一个验证 所以有点意义! 在发送验证码的时候需要验证手机号码和图形验证码 注册的时候需要验证除图形验证码之外的数据

    李昊天
  • Bootstrap学习文档(一)

    Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目,使用这个框架可以简单高效的开发出适配各种屏...

    Wizey
  • 从头搭建一个在线聊天室(一)

    今天从头开始做一个在线聊天网站,网上各种各样的聊天工具已经很多了,为啥还要做这么一个聊天工具呢,无他,兴趣耳!

    周萝卜
  • 实用:Google Chrome 键盘快捷键大全

    窗口和标签页快捷方式 Ctrl+N 打开新窗口 按住 Ctrl‎ 键,然后点击链接 在新标签页中打开链接 按住 Shift 键,然后点击链接 在新...

    joshua317

扫码关注云+社区

领取腾讯云代金券