项目地址 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(#换成@)