当前位置:首页 > 探索

青果教务系统漏洞

青果教务系统的青果漏洞,我摸过不止一次。教务不是系统那种炫技式地拿shell,而是漏洞实打实地从学生视角,把系统翻了个底朝天。青果最典型的教务,是系统那个“课程成绩提前查看”的接口。

大二下学期,漏洞期末成绩还没正式公布,青果我室友就已经在系统里看到了自己的教务高数分数。他当时只是系统随手点开平时成绩查询的页面,按了F12,漏洞翻了翻网络请求,青果发现有个叫getGradeByStudentId的教务接口,参数里带着他的系统学号,返回的JSON里除了平时分,居然还藏着一串期末成绩的字段。前端页面上没显示,但数据已经传下来了。就这么简单,没有任何鉴权,没有二次校验。你只需要把学号换成别人的,就能看到那个人的期末成绩——只要你知道对方的学号,而学号在班级群里是公开的。

这算什么漏洞?严格说,是“信息泄露”,但杀伤力一点不小。考试周还没结束,有人已经拿着别人的成绩去对答案了。更离谱的是,那个接口连个访问频率限制都没有,写个脚本循环跑,整个年级的成绩单都能拉出来。

另一个坑在选课系统。每学期抢课高峰,服务器必卡成PPT。但卡顿背后不是流量问题——是并发处理逻辑有缺陷。我试过用Python写了个简单的并发请求脚本,同一个选课接口同时发几十个请求,系统会返回“选课成功”的确认,但实际数据库里只记录了一次操作。反过来,如果你在提交选课请求后立刻取消,再重新提交,系统偶尔会给你分配两个不同的课程时间,而课程表上只显示一个。这种数据不一致,直接导致有人明明选上了课,期末却发现自己不在名单里。

教务系统还有个老毛病,密码找回功能形同虚设。密保问题就三个:你的学号、你的身份证后六位、你的辅导员姓名。前两个是半公开的,辅导员姓名在学院官网就能查到。我试过用一个朋友的账号登录——他授权我测试的——通过找回密码功能,直接重置了他的密码,全程没用到手机验证码或邮箱验证。这意味着,只要有人知道你的基本学籍信息,就能控制你的账号,修改你的选课,甚至帮你退课。

我倒是没干过什么坏事,但这事让我想起一个做安全的学长说过的话:校园系统的漏洞,往往不是技术难度高,而是没人把它当回事。开发的时候图省事,接口不做权限校验,数据不做脱敏,密码策略弱到不行,上线之后又没人做渗透测试。最讽刺的是,青果系统的登录页面还写着“安全登录”四个大字。

前阵子听说系统升级了,加了图形验证码,改成了强制复杂密码。但我去试了一下,那个提前看成绩的接口还在,参数从学号变成了一个加密串,但加密算法是AES的ECB模式,密钥硬编码在前端JS里。稍微扒一下就能解开。

说白了,漏洞这东西,堵住一个,还有下一个。只要开发者的安全意识不提升,学生永远是系统的人肉测试员。

分享到: