【java审计】inxedu cms 漏洞详细分析
字数 1833 2025-08-12 11:33:58
Inxedu CMS漏洞分析与利用教学文档
一、CMS简介
因酷开源在线网校系统(Inxedu)是由北京因酷时代科技有限公司研发的Java版开源网校源代码建站系统。本教学文档将详细分析该系统中的两个关键漏洞:存储型XSS漏洞和文件上传漏洞。
二、环境搭建
- 下载源码:获取v2.0.6版本源码
- 导入IDE:使用IDEA导入项目
- 配置Tomcat:设置运行环境
- 运行系统:启动项目进行测试
三、存储型XSS漏洞分析
1. 漏洞位置
- 功能点:提问列表功能
- 路由:
/questions/ajax/add - 控制器:
QuestionsController.java中的addQuestions()方法
2. 漏洞成因分析
输入处理流程
-
控制器层:
- 接收
Questions类作为参数 - 仅检查用户登录状态,无输入过滤
- 调用
service层的addQuestions()方法
- 接收
-
服务层:
QuestionsService.java实现类中无过滤逻辑- 直接传递数据到DAO层
-
数据层:
QuestionsMapper.xml中定义SQL插入语句- 直接将用户输入存入
edu_questions表
输出展示流程
- 后台展示路由:
/admin/questions/list - 控制器:
AdminQuestionsController.java中的getQuestionsList()方法- 查询
edu_questions表数据 - 将结果
questionsList传递到视图层
- 查询
- 视图层:
/view/inxedu/admin/questions/questions_list.jsp- 使用
<c:forEach>遍历questionsList - 直接输出
title字段内容,无HTML编码
- 使用
3. 漏洞验证步骤
- 使用普通用户账号登录
- 提交包含XSS payload的提问
<script>alert(1)</script> - 管理员查看后台问答列表时触发XSS
4. 影响范围
- 前台普通用户(查看问答时)
- 后台管理员(管理问答时)
四、文件上传漏洞分析
1. 漏洞位置
- 控制器:
common/controller/VideoUploadController.java - 方法:
gok4()
2. 漏洞成因分析
上传流程
-
参数接收:
fileType:允许的文件后缀(可控)param:文件路径(可控)file:上传的文件
-
后缀检查:
- 获取上传文件后缀
ext - 检查
fileType是否包含ext(使用contains()方法) - 仅当
fileType不包含ext时才拒绝上传
- 获取上传文件后缀
-
路径构造:
- 调用
getPath()方法 - 如果
param不为空,则拼接param作为路径 - 允许使用
../进行目录穿越
- 调用
-
文件保存:
- 创建目录(如不存在)
- 使用
transferTo()直接保存文件
3. 漏洞利用方法
-
构造上传请求:
- 设置
fileType参数包含实际文件后缀 - 使用
param参数控制上传路径(可包含../) - 上传任意文件(如webshell)
- 设置
-
示例数据包:
POST /common/video/upload/gok4 HTTP/1.1 Content-Type: multipart/form-data fileType=jpg,png,php param=../../webapps/ROOT/ file=@shell.php -
连接webshell:
- 访问上传的PHP文件执行任意代码
4. 漏洞特点
- 仅检查
fileType参数是否包含文件后缀 - 完全可控的上传路径
- 无内容类型检查
- 无文件内容验证
五、修复建议
存储型XSS修复
-
输入过滤:
- 在
QuestionsController中添加HTML标签过滤 - 使用OWASP ESAPI或类似库进行编码
- 在
-
输出编码:
- 在JSP中使用
<c:out>标签输出内容 - 或使用JSTL的
fn:escapeXml()函数
- 在JSP中使用
文件上传漏洞修复
-
白名单验证:
- 使用固定的允许后缀列表
- 禁止用户控制
fileType参数
-
路径安全:
- 固定上传目录
- 禁止路径穿越字符
- 使用随机文件名
-
内容检查:
- 验证文件头信息
- 对于图片,进行重采样处理
-
权限控制:
- 上传目录禁止脚本执行
- 设置适当的文件权限
六、总结
Inxedu CMS v2.0.6存在两个高危漏洞:
- 存储型XSS:由于问答功能的输入输出均无过滤,导致可攻击前后台用户
- 文件上传漏洞:由于不安全的参数控制和路径处理,导致可上传任意文件到任意位置
这两个漏洞均可被组合利用,实现从普通用户到服务器完全控制的全链条攻击。开发人员应重视输入验证和输出编码,严格限制文件上传功能的安全控制。