前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MetInfo 6.0.0反馈管理页面存储XSS(CVE-2018-7721)分析

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

作者头像
用户5878089
发布2019-07-25 16:29:48
6820
发布2019-07-25 16:29:48
举报

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

代码语言:javascript
复制
      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

代码语言:javascript
复制
    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

代码语言:javascript
复制
    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将触发。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无级安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MetInfo6.0.0 XSS(CVE-2018-7721)
    • 1.漏洞细节:
      • 2.PoC
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档