JAVA代码审计之因酷开源网校系统文件上传漏洞分析
字数 1243 2025-08-19 12:41:30
JAVA代码审计之因酷开源网校系统文件上传漏洞分析
1. 系统简介
因酷开源网校系统是由北京因酷时代科技有限公司研发的Java版开源网校源代码建站系统,主要特点包括:
- 国内首家Java版开源网校系统
- 免费提供给非商业用途用户使用
- 功能全面:视频云点播、在线学习、课程管理、网校管理等
- 支持多角色权限管理
- 支持第三方云视频服务集成
- 已为2000+用户提供服务,覆盖多个教育领域
官网:https://www.inxedu.com/
2. 测试环境
- CMS版本:v2.0.6
- JDK:1.8
- Web服务器:Tomcat 7
- 数据库:MySQL 5.5
- 构建工具:Maven 3.6.3
- 开发工具:IntelliJ IDEA 2018
3. 漏洞分析
3.1 漏洞位置
漏洞存在于视频上传功能模块,具体代码文件:
com/inxedu/os/common/controller/VideoUploadController.java
3.2 漏洞代码分析
3.2.1 上传处理逻辑
-
上传接口接收四个参数:
request:HTTP请求对象uploadfile:文件流param:附加参数fileType:文件扩展名
-
文件扩展名检查:
- 系统会检查上传文件名与
fileType参数是否一致 - 这是一个弱限制,可通过将
fileType参数设置为jsp来绕过
- 系统会检查上传文件名与
-
文件路径生成:
- 调用
getPath方法获取上传路径 - 当
param为空时,路径格式为:/images/upload/项目名/系统年月日时间/系统分时秒+扩展名(ext) CommonConstants.projectName从project.properties配置文件中获取项目名称
- 调用
-
上传执行:
- 直接调用
uploadfile.transferTo方法上传文件 - 无任何有效的安全限制措施
- 直接调用
3.3 漏洞利用
3.3.1 利用条件
- 攻击者能够访问视频上传接口
- 系统未对上传文件类型进行严格限制
3.3.2 利用方法
构造上传表单:
<form action="http://localhost:8080/video/uploadvideo"
enctype="multipart/form-data"
id="frmUpload"
method="post">
<input name="uploadfile" type="file">
<input type="text" name="fileType" value="jsp">
<input id="btnUpload" type="submit" value="上传">
</form>
关键点:
- 将
fileType参数设置为jsp - 上传包含恶意代码的JSP文件
4. 漏洞修复建议
-
文件类型白名单验证:
- 只允许上传安全的文件类型(如:jpg、png、mp4等)
- 同时验证文件内容和扩展名
-
文件重命名:
- 上传文件使用随机生成的文件名
- 避免使用用户提供的文件名
-
文件内容检查:
- 对上传文件进行内容检查,防止恶意代码
- 特别是对脚本文件(如JSP、PHP等)进行严格限制
-
权限控制:
- 限制上传目录的执行权限
- 确保上传文件不能作为脚本执行
-
路径安全:
- 避免使用用户输入直接构造文件路径
- 防止目录遍历攻击
5. 总结
该漏洞是由于因酷开源网校系统在视频上传功能中缺乏有效的安全限制措施导致的,攻击者可以绕过简单的扩展名检查,上传任意文件(包括JSP等脚本文件),从而可能导致远程代码执行等严重安全问题。开发人员在实现文件上传功能时,必须实施多层次的安全防护措施。