【原创】JEECMS v6~v7任意文件上传漏洞(1)

时间:2016-01-19 10:18:26   收藏:0   阅读:6572

文章作者:rebeyond

受影响版本:v6~v7

漏洞说明:

JEECMS是国内Java版开源网站内容管理系统(java cms、jsp cms)的简称。该系统基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点;采用SpringMVC3+Spring3+Hibernate3+Freemarker主流技术架构。广泛应用于政府(部委和省级政府部门、市、县、乡及委办局)、教育科研(大、中、小学及各地方教育局)、电信运营商、金融(证券、保险及银行)、企业(矿业、煤炭、旅游、石油集团及大中型制造类企业)、新闻媒体(报社、网媒)等数字化信息平台建设领域。

该系统提供上传功能,其中对用户提交的上传文件没有进行充分的检查,导致任意注册用户在前台即可上传任意格式的文件。

漏洞分析:

         JEECMS的安全一向口碑不错,前段时间曝光过一个任意文件上传漏洞,利用的是\00截断,之后的版本添加了对文件名是否含\00的判断,如下图所示,修复了该问题。

技术分享

但是另外一个上传组件提供了一个拉取远程图片的功能,该组建并没有对远程文件的类型进行足够的判断,导致用户可以从远程拉取任意格式的文件,下面看代码:

技术分享

远程文件的url直接由客户端的upfile参数传入,之后以ue_separate_ue为分隔符来进行分割,之后直接调用saveRemoteImage函数,下面跟进saveRemoteImage函数:

技术分享

该函数直接调用HttpClient类建立连接,读取字节流,然后通过UploadUtils.generateFilename来获取保存路径,此处只用Apache的FileNameUtils.getFileSufix方法来获取扩展名,没有进行任何验证。最后通过IOUtils.copy完成文件的创建。

漏洞演示:

         漏洞原理了解之后,下面就好办了,先本地假设个环境:

技术分享

通过构造如下的表单,来进行提交:

技术分享

技术分享

技术分享

技术分享

访问返回的URL,文件成功上传:

技术分享

通过谷歌搜索powered by jeecms,共7万多个结果:

技术分享

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!