CVE中文申请站

一、漏洞摘要

漏洞名称: 蝉知门户系统7.0.1开源版存在XSS漏洞
上报日期: 2019-05-30
漏洞发现者: fucsec
产品首页: https://www.chanzhi.org/
软件链接: https://www.chanzhi.org/download/chanzhi7.0.1-332.html
版本: V7.0.1
CVE编号: CVE-2019-12857


二、漏洞概述

蝉知门户系统(chanzhiEPS)是一款开源免费的企业门户系统,企业建站系统,CMS系统。它专为企业营销设计,功能专业全面,内置了文章发布、会员管理、论坛评论、产品展示、在线销售、客服跟踪等功能。
在chanzhiEPS.7.0.1chanzhiepssystemframeworkbase router.class.php中的第1764到1802行public function mergeParams函数检查了URL中的参数
1.png
跟进$ValueRule变量及$filter->default->paramValue规则,在D:chanzhiEPS.7.0.1chanzhiepssystemconfigfilter.php中的38行代码定义了过滤规则,如下图
2.png
我们搜索关键词“web”后,在标题和内容都进行了搜索,审查元素,跟进words值。在chanzhiEPS.7.0.1chanzhiepssystemmodulesearchcontrol.php中的23行public function index函数对传递过来的值进行搜索,并将结果进行显示。
这段代码很有意思,需仔细分析
3.png
4.png
如果传递过来的word不为空,则对words进行urldecode,貌似找到了绕过的方法,我们在搜索框中先将payload进行URL编码测试
Payload:
1' onmouseover=prompt(1) bad='-1
前面我们分析了系统在传递参数的时候会进行urldecode操作,会保证测试效果,我们先对payload进行URL编码
urlencode:1%27%20onmouseover%3Dprompt%281%29%20fucsec%3D%27-1
点击搜索后,服务依然响应BAD Request!
5.png
继续分析,终于在chanzhiEPS.7.0.1chanzhiepssystemframeworkbase router.class.php中的第1764到1802行public function mergeParams函数中的第1792行找到了答案。如下
6.png
对传递过来的参数再次进行了urldecode,相当于在输出前进行了两次urldecode。

三、利用方法

我们调整我们的payload,对payload进行两次urlencode。如下
1%2527%2520onmouseover%253Dprompt%25281%2529%2520fucsec%253D%2527-1
点击搜索,如下成功完成系统的弹框。
漏洞总结及修复建议:
系统进行了多次过滤也采取了很多安全措施
7.png
我们全文搜索一下处理XSS的函数就知晓了,一般多用htmlspecialchars来转义XSS输出。全局搜索使用到该函数的地方有121处,但遗憾的是没用到跟搜索相关的Search模块下,Search模块下的文件均未出现htmlspecialchars函数。
8.png
修复建议:将htmlspecialchars函数应用在Serach模块及其它需要输出内容的模块。

四、参考信息

CVE中文申请网:http://www.iwantacve.cn/index.php/archives/245/
CVE官方:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12857
exploit-db:发布中

标签: XSS, 蝉知门户系统