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

项目地址 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漏洞,这里我们就不做多复现了
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录