代码审计 | 某edu CMS漏洞分析

2025-03-12 76 0

项目地址 https://gitee.com/huang-yk/student-manage/

一、说明

  • 1.前端采用了layui这个框架,使用了freemarker模板引擎;
    后台采用Java编写,使用了spring+springMVC+mybatis;
    数据库采用的是mysql。
  • 2.项目中的角色功能:管理员(编辑公告、批量导入学生/教师/课程基本信息、及增删改查、对系统接口访问权限的控制);
    教师(录入学生成绩、查看自己的课程/学生、结束课程)演示地址中教师密码与其账号一样;
    学生(选课、查成绩)演示地址中学生密码与其账号一样;

二、项目搭建

下载源码,使用idea导入

创建相应的数据库,更改配置信息

项目访问地址如下: 后台地址: 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,按照 contains 方法的逻辑,就会判定匹配成功,但实际上 /userinfo 可能是一个不同
的接口,这样就可能造成权限绕过,让用户访问到超出其权限范围的资源。
2. auth.getUrl().contains(url.split("/")[0])
数组越界风险:url.split("/")[0] 存在数组越界的潜在风险。如果请求的 URL 包含 /,那么使
用 [0] 就为空,它的值就会一直为真,所以split 方法应该返回的数组长度为 1。

那么我们就可以进行绕过了。

我们进行测试一下,这是权限的一些限制表

我们先登录到一个学生用户

然后去访问学生没权限访问的路径

发现可以进行,证明确实存在越权漏洞

2.xss漏洞

我们黑盒发现存在xss漏洞

发现存在xss漏洞的只有title和author这两个参数

我们定位到该路由/notice/addPage

我们发现这里面并没有对传进来的参数进行过滤排查直接就调用了

body.find("#author").val(edit.author);
 在弹窗内页面的 body 元素中查找 id 为 author 的元素,并将其值设置为 edit.author。
 edit.author 是公告的作者信息。

所以确定这里存在xss漏洞

3.xss漏洞

我们发现添加学生信息的时候也存在xss漏洞

找到该路由/student/add和参数major和grade

我们发现这部分也没有进行参数查验,所以这处也存在xss漏洞

4.xss漏洞

教师端也存在同学生端一样的xss漏洞,这里我们就不做多复现了


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

Ubuntu 安全限制遭突破:攻击者可利用内核漏洞提权
[Meachines] [Medium] Carrier SNMP+CW-1000-X RCE+BGP劫持权限提升
Java漏洞在黑盒实战中的技巧——JNDI注入篇
Java漏洞在白盒审计中的技巧——反序列化篇(Fastjson)
仅2-5%的应用安全警报需立即处置
破解中小企业99%安全问题的0成本方案,阿里云用户谈行业首个“云体检”

发布评论