文章作者:rebeyond

受影响版本:v6~v7

漏洞说明:

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

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

利用场景:前台注册用户。默认注册地址:http://www.xxx.com/register.jspx。

漏洞分析:

调用入口代码如下:

  1. @RequestMapping(value = "/member/o_swfAttachsUpload.jspx", method = RequestMethod.POST)
  2. public void swfAttachsUpload(
  3. String root,
  4. Integer uploadNum,
  5. @RequestParam(value = "Filedata", required = false) MultipartFile file,
  6. HttpServletRequest request, HttpServletResponse response,
  7. ModelMap model) throws Exception{
  8. super.swfAttachsUpload(root, uploadNum, file, request, response, model);
  9. }

跟进swfAttachsUpload:

  1. protected void swfAttachsUpload(
  2. String root,
  3. Integer uploadNum,
  4. @RequestParam(value = "Filedata", required = false) MultipartFile file,
  5. HttpServletRequest request, HttpServletResponse response,
  6. ModelMap model) throws Exception {
  7. JSONObject data=new JSONObject();
  8. WebCoreErrors errors = validateUpload( file, request);
  9. if (errors.hasErrors()) {
  10. data.put("error", errors.getErrors().get(0));
  11. ResponseUtils.renderJson(response, data.toString());
  12. }else{
  13. CmsSite site = CmsUtils.getSite(request);
  14. String ctx = request.getContextPath();
  15. String origName = file.getOriginalFilename();
  16. String ext = FilenameUtils.getExtension(origName).toLowerCase(
  17. Locale.ENGLISH);
  18. String fileUrl="";
  19. try {
  20. if (site.getConfig().getUploadToDb()) {
  21. String dbFilePath = site.getConfig().getDbFileUri();
  22. fileUrl = dbFileMng.storeByExt(site.getUploadPath(), ext, file
  23. .getInputStream());
  24. fileUrl = request.getContextPath() + dbFilePath + fileUrl;
  25. } else if (site.getUploadFtp() != null) {
  26. Ftp ftp = site.getUploadFtp();
  27. String ftpUrl = ftp.getUrl();
  28. fileUrl = ftp.storeByExt(site.getUploadPath(), ext, file
  29. .getInputStream());
  30.  
  31. fileUrl = ftpUrl + fileUrl;
  32. } else {
  33. fileUrl = fileRepository.storeByExt(site.getUploadPath(), ext,
  34. file); //没有进行合法文件后缀检查。
  35.  
  36. fileUrl = ctx + fileUrl;
  37. }
  38. cmsUserMng.updateUploadSize(CmsUtils.getUserId(request), Integer.parseInt(String.valueOf(file.getSize()/1024)));
  39. fileMng.saveFileByPath(fileUrl, origName, false); //没有进行合法文件后缀检查
  40. model.addAttribute("attachmentPath", fileUrl);
  41. } catch (IllegalStateException e) {
  42. model.addAttribute("error", e.getMessage());
  43. } catch (IOException e) {
  44. model.addAttribute("error", e.getMessage());
  45. }
  46. data.put("attachUrl", fileUrl);
  47. data.put("attachName", origName);
  48. ResponseUtils.renderJson(response, data.toString());
  49. }
  50. }

通过构造以下表单,就可以进行测试:

下面是拿官方演示站测试的结果:

【原创】JEECMS v6~v7任意文件上传漏洞(2)的更多相关文章

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

    文章作者:rebeyond 受影响版本:v6~v7 漏洞说明: JEECMS是国内Java版开源网站内容管理系统(java cms.jsp cms)的简称.该系统基于java技术开发,继承其强大.稳定 ...

  2. 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析

      0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...

  3. 【代码审计】QYKCMS_v4.3.2 任意文件上传漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...

  4. 【代码审计】CLTPHP_v5.5.3 前台任意文件上传漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  5. 【代码审计】CLTPHP_v5.5.3 前台任意文件上传漏洞

    0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...

  6. 中国电信某站点JBOSS任意文件上传漏洞

    1.目标站点 http://125.69.112.239/login.jsp 2.简单测试 发现是jboss,HEAD请求头绕过失败,猜测弱口令失败,发现没有删除 http://125.69.112. ...

  7. CKFinder 1.4.3 任意文件上传漏洞

    CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...

  8. WordPress Contact Form 7插件任意文件上传漏洞

    漏洞名称: WordPress Contact Form 7插件任意文件上传漏洞 CNNVD编号: CNNVD-201311-415 发布时间: 2013-11-28 更新时间: 2013-11-28 ...

  9. WordPress Suco Themes ‘themify-ajax.php’任意文件上传漏洞

    漏洞名称: WordPress Suco Themes ‘themify-ajax.php’任意文件上传漏洞 CNNVD编号: CNNVD-201311-403 发布时间: 2013-11-28 更新 ...

随机推荐

  1. Android中的AlertDialog使用示例五(自定义对话框)

    在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,AlertDialog实现方法为建造者模式. ...

  2. 【译】Spring 4 @Profile注解示例

    前言 译文链接:http://websystique.com/spring/spring-profile-example/ 本文将探索Spring中的@Profile注解,可以实现不同环境(开发.测试 ...

  3. ddd 聚合根 之 聚合与不聚合 设计

    聚合 不聚合 订单和订单明细 论坛主贴与贴子回复 订单和收货地址(vo)  

  4. JS-- 浮点数运算处理

        一. 问题描述 最近在做一个项目,页面上会存在一些JS浮点数的运算,发现JS浮点数运算存在一些bug.譬如: 0.1+0.2 == 0.30000000000000004 0.1 + 0.7 ...

  5. 前端编辑工具之VSCode

      因为前段时间看了瞬息之间的一篇文章编辑器背后的程序观, 里面只提到了Visual studio. 我想想可能是因为非.Net开发者,所以不知道Visual sutdio code这个工具.来看看V ...

  6. 【每日一linux命令5】命令的结合与定向

    命令中除了一般命令外,还有管道(或称途径)(|)与定向(>或>>). 管道(途径)的用法: "命令一[选项]"|"命令二[选项]",也就是将& ...

  7. Warning: strftime(): It is not safe to rely on the system's timezone settings.

    当运行程序时,会出现如下警告: Warning: strftime(): It is not safe to rely on the system's timezone settings. You a ...

  8. Heartbeat使用梳理

    在日常的集群系统架构中,一般用到Heartbeat的主要就2种:1)高可用(High Availability)HA集群, 使用Heartbeat实现,也称为"双机热备", &qu ...

  9. click与 mousedown

    一.想做出鼠标右键 自己定义的菜单 则需要先使用 document.oncontextmenu= functions(){ event.preventDefault()//去除鼠标右键的默认格式 } ...

  10. pcl曲面重建模块-poisson重建算法示例

    poisson曲面重建算法 pcl-1.8测试通过 #include <iostream> #include <pcl/common/common.h> #include &l ...