代码审计 | 某edu CMS漏洞分析
字数 1168 2025-08-29 08:30:18

某edu CMS漏洞分析教学文档

一、系统概述

1. 技术架构

  • 前端框架: LayUI
  • 模板引擎: FreeMarker
  • 后端技术:
    • Java语言开发
    • Spring + SpringMVC + MyBatis框架组合
  • 数据库: MySQL

2. 角色功能

  • 管理员:
    • 编辑公告
    • 批量导入学生/教师/课程基本信息
    • 增删改查功能
    • 系统接口访问权限控制
  • 教师:
    • 录入学生成绩
    • 查看自己的课程/学生信息
    • 结束课程
    • 默认密码与账号相同
  • 学生:
    • 选课功能
    • 成绩查询
    • 默认密码与账号相同

3. 项目搭建

  1. 下载源码并使用IntelliJ IDEA导入
  2. 创建相应数据库并修改配置信息
  3. 访问地址: http://127.0.0.1:8888 (后台)

二、组件安全审计

审计的组件及版本:

  • Druid: 1.1.22 → 无已知漏洞
  • MyBatis: 1.3.2 → 无已知漏洞
  • Fastjson: 1.2.62 → 无已知漏洞

三、单点漏洞分析

1. 越权漏洞

漏洞位置

权限拦截器中的判断逻辑存在缺陷:

if (url.contains(auth.getUrl()) || auth.getUrl().contains(url.split("/")[0])) {
    return true;
}

漏洞分析

  1. 误判风险:

    • url.contains(auth.getUrl())可能导致权限误判
    • 示例: 权限URL为/user,请求URL为/userinfo会被误判为匹配成功
  2. 数组越界风险:

    • url.split("/")[0]存在数组越界风险
    • 当URL不包含/时,split("/")[0]返回空值,导致条件始终为真

复现步骤

  1. 以学生身份登录系统
  2. 访问学生角色本无权限访问的路径
  3. 验证可以成功访问,证明越权漏洞存在

2. XSS漏洞(公告系统)

漏洞位置

  • 路由: /notice/addPage
  • 受影响参数: titleauthor

漏洞分析

  • 前端代码直接使用未过滤的参数:
body.find("#author").val(edit.author);
  • 未对edit.author进行任何过滤或转义处理
  • 攻击者可注入恶意JavaScript代码

3. XSS漏洞(学生管理)

漏洞位置

  • 路由: /student/add
  • 受影响参数: majorgrade

漏洞分析

  • 后端未对输入参数进行任何过滤或验证
  • 攻击者可通过提交恶意参数值实现XSS攻击

4. XSS漏洞(教师端)

漏洞说明

  • 教师端存在与学生端类似的XSS漏洞
  • 漏洞原理与复现方式相同

四、修复建议

1. 越权漏洞修复

  • 修改权限判断逻辑,使用精确匹配而非包含匹配
  • 添加URL规范化处理
  • 示例修复代码:
if (url.equals(auth.getUrl()) || url.startsWith(auth.getUrl() + "/")) {
    return true;
}

2. XSS漏洞修复

  • 对所有用户输入进行HTML编码
  • 使用安全的输出编码函数
  • 实施内容安全策略(CSP)
  • 示例修复代码:
body.find("#author").text(escapeHtml(edit.author));

五、总结

该edu CMS系统存在多处安全漏洞,包括:

  1. 权限校验不严导致的越权访问
  2. 多处未过滤用户输入导致的存储型XSS漏洞
    建议开发者对所有用户输入进行严格验证,并重构权限校验机制。
某edu CMS漏洞分析教学文档 一、系统概述 1. 技术架构 前端框架 : LayUI 模板引擎 : FreeMarker 后端技术 : Java语言开发 Spring + SpringMVC + MyBatis框架组合 数据库 : MySQL 2. 角色功能 管理员 : 编辑公告 批量导入学生/教师/课程基本信息 增删改查功能 系统接口访问权限控制 教师 : 录入学生成绩 查看自己的课程/学生信息 结束课程 默认密码与账号相同 学生 : 选课功能 成绩查询 默认密码与账号相同 3. 项目搭建 下载源码并使用IntelliJ IDEA导入 创建相应数据库并修改配置信息 访问地址: http://127.0.0.1:8888 (后台) 二、组件安全审计 审计的组件及版本: Druid: 1.1.22 → 无已知漏洞 MyBatis: 1.3.2 → 无已知漏洞 Fastjson: 1.2.62 → 无已知漏洞 三、单点漏洞分析 1. 越权漏洞 漏洞位置 权限拦截器中的判断逻辑存在缺陷: 漏洞分析 误判风险 : url.contains(auth.getUrl()) 可能导致权限误判 示例: 权限URL为 /user ,请求URL为 /userinfo 会被误判为匹配成功 数组越界风险 : url.split("/")[0] 存在数组越界风险 当URL不包含 / 时, split("/")[0] 返回空值,导致条件始终为真 复现步骤 以学生身份登录系统 访问学生角色本无权限访问的路径 验证可以成功访问,证明越权漏洞存在 2. XSS漏洞(公告系统) 漏洞位置 路由: /notice/addPage 受影响参数: title 和 author 漏洞分析 前端代码直接使用未过滤的参数: 未对 edit.author 进行任何过滤或转义处理 攻击者可注入恶意JavaScript代码 3. XSS漏洞(学生管理) 漏洞位置 路由: /student/add 受影响参数: major 和 grade 漏洞分析 后端未对输入参数进行任何过滤或验证 攻击者可通过提交恶意参数值实现XSS攻击 4. XSS漏洞(教师端) 漏洞说明 教师端存在与学生端类似的XSS漏洞 漏洞原理与复现方式相同 四、修复建议 1. 越权漏洞修复 修改权限判断逻辑,使用精确匹配而非包含匹配 添加URL规范化处理 示例修复代码: 2. XSS漏洞修复 对所有用户输入进行HTML编码 使用安全的输出编码函数 实施内容安全策略(CSP) 示例修复代码: 五、总结 该edu CMS系统存在多处安全漏洞,包括: 权限校验不严导致的越权访问 多处未过滤用户输入导致的存储型XSS漏洞 建议开发者对所有用户输入进行严格验证,并重构权限校验机制。