【java审计】inxedu cms 漏洞详细分析
字数 1833 2025-08-12 11:33:58

Inxedu CMS漏洞分析与利用教学文档

一、CMS简介

因酷开源在线网校系统(Inxedu)是由北京因酷时代科技有限公司研发的Java版开源网校源代码建站系统。本教学文档将详细分析该系统中的两个关键漏洞:存储型XSS漏洞和文件上传漏洞。

二、环境搭建

  1. 下载源码:获取v2.0.6版本源码
  2. 导入IDE:使用IDEA导入项目
  3. 配置Tomcat:设置运行环境
  4. 运行系统:启动项目进行测试

三、存储型XSS漏洞分析

1. 漏洞位置

  • 功能点:提问列表功能
  • 路由:/questions/ajax/add
  • 控制器:QuestionsController.java中的addQuestions()方法

2. 漏洞成因分析

输入处理流程

  1. 控制器层

    • 接收Questions类作为参数
    • 仅检查用户登录状态,无输入过滤
    • 调用service层的addQuestions()方法
  2. 服务层

    • QuestionsService.java实现类中无过滤逻辑
    • 直接传递数据到DAO层
  3. 数据层

    • QuestionsMapper.xml中定义SQL插入语句
    • 直接将用户输入存入edu_questions

输出展示流程

  1. 后台展示路由/admin/questions/list
  2. 控制器AdminQuestionsController.java中的getQuestionsList()方法
    • 查询edu_questions表数据
    • 将结果questionsList传递到视图层
  3. 视图层/view/inxedu/admin/questions/questions_list.jsp
    • 使用<c:forEach>遍历questionsList
    • 直接输出title字段内容,无HTML编码

3. 漏洞验证步骤

  1. 使用普通用户账号登录
  2. 提交包含XSS payload的提问
    <script>alert(1)</script>
    
  3. 管理员查看后台问答列表时触发XSS

4. 影响范围

  • 前台普通用户(查看问答时)
  • 后台管理员(管理问答时)

四、文件上传漏洞分析

1. 漏洞位置

  • 控制器:common/controller/VideoUploadController.java
  • 方法:gok4()

2. 漏洞成因分析

上传流程

  1. 参数接收

    • fileType:允许的文件后缀(可控)
    • param:文件路径(可控)
    • file:上传的文件
  2. 后缀检查

    • 获取上传文件后缀ext
    • 检查fileType是否包含ext(使用contains()方法)
    • 仅当fileType不包含ext时才拒绝上传
  3. 路径构造

    • 调用getPath()方法
    • 如果param不为空,则拼接param作为路径
    • 允许使用../进行目录穿越
  4. 文件保存

    • 创建目录(如不存在)
    • 使用transferTo()直接保存文件

3. 漏洞利用方法

  1. 构造上传请求

    • 设置fileType参数包含实际文件后缀
    • 使用param参数控制上传路径(可包含../
    • 上传任意文件(如webshell)
  2. 示例数据包

    POST /common/video/upload/gok4 HTTP/1.1
    Content-Type: multipart/form-data
    
    fileType=jpg,png,php
    param=../../webapps/ROOT/
    file=@shell.php
    
  3. 连接webshell

    • 访问上传的PHP文件执行任意代码

4. 漏洞特点

  • 仅检查fileType参数是否包含文件后缀
  • 完全可控的上传路径
  • 无内容类型检查
  • 无文件内容验证

五、修复建议

存储型XSS修复

  1. 输入过滤

    • QuestionsController中添加HTML标签过滤
    • 使用OWASP ESAPI或类似库进行编码
  2. 输出编码

    • 在JSP中使用<c:out>标签输出内容
    • 或使用JSTL的fn:escapeXml()函数

文件上传漏洞修复

  1. 白名单验证

    • 使用固定的允许后缀列表
    • 禁止用户控制fileType参数
  2. 路径安全

    • 固定上传目录
    • 禁止路径穿越字符
    • 使用随机文件名
  3. 内容检查

    • 验证文件头信息
    • 对于图片,进行重采样处理
  4. 权限控制

    • 上传目录禁止脚本执行
    • 设置适当的文件权限

六、总结

Inxedu CMS v2.0.6存在两个高危漏洞:

  1. 存储型XSS:由于问答功能的输入输出均无过滤,导致可攻击前后台用户
  2. 文件上传漏洞:由于不安全的参数控制和路径处理,导致可上传任意文件到任意位置

这两个漏洞均可被组合利用,实现从普通用户到服务器完全控制的全链条攻击。开发人员应重视输入验证和输出编码,严格限制文件上传功能的安全控制。

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的提问 管理员查看后台问答列表时触发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) 示例数据包 : 连接webshell : 访问上传的PHP文件执行任意代码 4. 漏洞特点 仅检查 fileType 参数是否包含文件后缀 完全可控的上传路径 无内容类型检查 无文件内容验证 五、修复建议 存储型XSS修复 输入过滤 : 在 QuestionsController 中添加HTML标签过滤 使用OWASP ESAPI或类似库进行编码 输出编码 : 在JSP中使用 <c:out> 标签输出内容 或使用JSTL的 fn:escapeXml() 函数 文件上传漏洞修复 白名单验证 : 使用固定的允许后缀列表 禁止用户控制 fileType 参数 路径安全 : 固定上传目录 禁止路径穿越字符 使用随机文件名 内容检查 : 验证文件头信息 对于图片,进行重采样处理 权限控制 : 上传目录禁止脚本执行 设置适当的文件权限 六、总结 Inxedu CMS v2.0.6存在两个高危漏洞: 存储型XSS :由于问答功能的输入输出均无过滤,导致可攻击前后台用户 文件上传漏洞 :由于不安全的参数控制和路径处理,导致可上传任意文件到任意位置 这两个漏洞均可被组合利用,实现从普通用户到服务器完全控制的全链条攻击。开发人员应重视输入验证和输出编码,严格限制文件上传功能的安全控制。