UJCMS v9.7.3代码审计
字数 1136 2025-08-22 12:23:06

UJCMS v9.7.3 文件上传漏洞分析与利用

1. 漏洞概述

本文档详细分析 UJCMS v9.7.3 版本中存在的文件上传安全漏洞,包括漏洞原理、代码审计过程、利用方法以及防御建议。

2. 漏洞发现过程

2.1 初步测试

  • 测试文件上传功能时发现系统阻止了 .jsp.jspx 文件的上传
  • 文件上传处理接口为 /api/backend/core/web-file-upload/upload

2.2 代码审计关键点

2.2.1 文件上传处理流程

  1. 上传请求由 upload 方法处理(约100行处)
  2. 在125行调用 checkName 函数进行文件名检查
  3. 227行对文件扩展名进行统一大小写转换后判断

2.2.2 黑名单过滤机制

  • 使用 getFilesExtensionExcludes 函数进行文件后缀检测
  • 黑名单变量 filesExtensionBlacklist 定义如下:
    private static final String[] filesExtensionBlacklist = {"jsp", "jspx", "php", "asp", "aspx", "exe", "sh", "bat", "cmd"};
    
  • 明显缺失对 .html 后缀的过滤

3. 漏洞利用方法

3.1 直接文件上传

  • 可上传 .jspa 等不在黑名单中的JSP变种后缀
  • 虽然上传成功,但访问时会被下载而非执行(Spring框架特性)

3.2 存储型XSS

  • 可上传恶意HTML文件实现存储型XSS攻击
  • 原因:黑名单未包含HTML相关前端文件后缀

3.3 高级利用(理论)

  • 通过上传 web.xml 覆盖Tomcat配置文件实现Getshell(需进一步验证)

3.4 模板编辑功能

  • 系统模板编辑功能同样存在存储型XSS漏洞

4. 代码设计缺陷分析

4.1 黑名单不一致问题

  • 系统存在两个文件上传相关变量:
    1. filesExtensionBlacklist - 过滤较少,未包含HTML
    2. uploadExtensionBlacklist - 过滤更严格
  • 这种不一致导致安全防护存在缺口

4.2 黑名单机制缺陷

  • 使用黑名单而非白名单机制本身就不安全
  • 无法防范未知或变种攻击(如 .jspa

5. 修复建议

5.1 代码层面

  1. 统一使用白名单机制替代黑名单
  2. 确保所有上传点使用相同的过滤规则
  3. 添加对HTML等前端文件的过滤
  4. 增加内容类型检查而不仅是扩展名检查

5.2 配置层面

  1. 配置服务器禁止执行上传目录中的脚本
  2. 设置上传文件不可执行权限

5.3 其他安全措施

  1. 对上传文件进行病毒扫描
  2. 实现文件内容验证而不仅是扩展名检查
  3. 对模板编辑功能增加严格的输入过滤

6. 总结

UJCMS v9.7.3 的文件上传功能存在多处安全缺陷,主要源于:

  1. 不安全的黑名单机制
  2. 过滤规则不一致
  3. 对前端文件类型过滤不足

这些缺陷可导致存储型XSS、潜在RCE等安全风险,建议开发者参考上述修复建议进行改进。

UJCMS v9.7.3 文件上传漏洞分析与利用 1. 漏洞概述 本文档详细分析 UJCMS v9.7.3 版本中存在的文件上传安全漏洞,包括漏洞原理、代码审计过程、利用方法以及防御建议。 2. 漏洞发现过程 2.1 初步测试 测试文件上传功能时发现系统阻止了 .jsp 和 .jspx 文件的上传 文件上传处理接口为 /api/backend/core/web-file-upload/upload 2.2 代码审计关键点 2.2.1 文件上传处理流程 上传请求由 upload 方法处理(约100行处) 在125行调用 checkName 函数进行文件名检查 227行对文件扩展名进行统一大小写转换后判断 2.2.2 黑名单过滤机制 使用 getFilesExtensionExcludes 函数进行文件后缀检测 黑名单变量 filesExtensionBlacklist 定义如下: 明显缺失对 .html 后缀的过滤 3. 漏洞利用方法 3.1 直接文件上传 可上传 .jspa 等不在黑名单中的JSP变种后缀 虽然上传成功,但访问时会被下载而非执行(Spring框架特性) 3.2 存储型XSS 可上传恶意HTML文件实现存储型XSS攻击 原因:黑名单未包含HTML相关前端文件后缀 3.3 高级利用(理论) 通过上传 web.xml 覆盖Tomcat配置文件实现Getshell(需进一步验证) 3.4 模板编辑功能 系统模板编辑功能同样存在存储型XSS漏洞 4. 代码设计缺陷分析 4.1 黑名单不一致问题 系统存在两个文件上传相关变量: filesExtensionBlacklist - 过滤较少,未包含HTML uploadExtensionBlacklist - 过滤更严格 这种不一致导致安全防护存在缺口 4.2 黑名单机制缺陷 使用黑名单而非白名单机制本身就不安全 无法防范未知或变种攻击(如 .jspa ) 5. 修复建议 5.1 代码层面 统一使用白名单机制替代黑名单 确保所有上传点使用相同的过滤规则 添加对HTML等前端文件的过滤 增加内容类型检查而不仅是扩展名检查 5.2 配置层面 配置服务器禁止执行上传目录中的脚本 设置上传文件不可执行权限 5.3 其他安全措施 对上传文件进行病毒扫描 实现文件内容验证而不仅是扩展名检查 对模板编辑功能增加严格的输入过滤 6. 总结 UJCMS v9.7.3 的文件上传功能存在多处安全缺陷,主要源于: 不安全的黑名单机制 过滤规则不一致 对前端文件类型过滤不足 这些缺陷可导致存储型XSS、潜在RCE等安全风险,建议开发者参考上述修复建议进行改进。