一次教务系统水平越权排查:修改学号参数之后
一次教务系统水平越权排查:修改学号参数之后
本文涉及的真实学校、域名、账号、学号、票据等信息已做匿名化处理,仅保留必要的技术路径和参数结构。
背景
在对 A 学院教务系统做安全测试时,我注意到学生个人信息查询接口的权限控制。测试入口来自统一身份认证后的个人中心。
漏洞发现
在教务系统中,学生个人信息查询接口为:
/jwglxt/xsxxxggl/xsxxwh_cxCkDgxsxx.html?xh_id=212415****35&gnmkdm=N100801
问题出在 xh_id 参数。服务端没有对这个学号做所有权校验。任意已登录学生只要修改 xh_id,就能查询其他学生的完整个人信息。
认证要求也不高:任意有效 JSESSIONID,学生身份即可,不需要管理员权限。
参数结构:
漏洞位置是跨链接的,实际入口见复现步骤。
复现过程
浏览器访问统一门户并登录:
https://ai.*.edu.cn/new_office_hall/#/personalInfo?ticket=*&state=null
账号:21241534
密码:**

登录后找到“应用中心”->“教务系统”。

成功进入教学管理信息服务平台。

访问学生个人信息查询接口,并添加参数:
/jwglxt/xsxxxggl/xsxxwh_cxCkDgxsxx.html?xh_id=212415****35&gnmkdm=N100801

修改 xh_id 并遍历学号后,可以查看其他学生的个人信息。

实际测试时,只能遍历大概 100 人的数据。总计 212415****01 ~ 212415****46,约 94 条学生数据。这个专业有 01 和 02 两个班。
影响
这个接口可以查看他人身份证信息等完整个人信息。漏洞类型是水平越权,风险等级中危。
从现象看,问题不在登录态本身,而在服务端没有校验当前会话与 xh_id 的归属关系。接口不应该只依赖前端传入学号,也不应该只验证“是否登录”。
修复思路
接口应在服务端校验当前会话与 xh_id 的归属关系,确保学生只能查询自己的信息。对于必要的业务查询,也应明确授权范围,而不是允许任意学号直接查询。