一次教务系统水平越权排查:修改学号参数之后

本文涉及的真实学校、域名、账号、学号、票据等信息已做匿名化处理,仅保留必要的技术路径和参数结构。

背景

在对 A 学院教务系统做安全测试时,我注意到学生个人信息查询接口的权限控制。测试入口来自统一身份认证后的个人中心。

漏洞发现

在教务系统中,学生个人信息查询接口为:

/jwglxt/xsxxxggl/xsxxwh_cxCkDgxsxx.html?xh_id=212415****35&gnmkdm=N100801

问题出在 xh_id 参数。服务端没有对这个学号做所有权校验。任意已登录学生只要修改 xh_id,就能查询其他学生的完整个人信息。

认证要求也不高:任意有效 JSESSIONID,学生身份即可,不需要管理员权限。

参数结构:

参数

必填

说明

xh_id

是

目标学生学号,12位数字,可遍历

gnmkdm

是

功能模块代码,固定值 N100801

漏洞位置是跨链接的,实际入口见复现步骤。

复现过程

浏览器访问统一门户并登录:

https://ai.*.edu.cn/new_office_hall/#/personalInfo?ticket=*&state=null

账号:21241534
密码:
**

image-20261011215430728

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

image-20261011215523613

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

image-20261011215636902

访问学生个人信息查询接口,并添加参数:

/jwglxt/xsxxxggl/xsxxwh_cxCkDgxsxx.html?xh_id=212415****35&gnmkdm=N100801

image-20261011215829132

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

image-20261011215924989

实际测试时,只能遍历大概 100 人的数据。总计 212415****01 ~ 212415****46,约 94 条学生数据。这个专业有 01 和 02 两个班。

影响

这个接口可以查看他人身份证信息等完整个人信息。漏洞类型是水平越权,风险等级中危。

从现象看,问题不在登录态本身,而在服务端没有校验当前会话与 xh_id 的归属关系。接口不应该只依赖前端传入学号,也不应该只验证“是否登录”。

修复思路

接口应在服务端校验当前会话与 xh_id 的归属关系,确保学生只能查询自己的信息。对于必要的业务查询,也应明确授权范围,而不是允许任意学号直接查询。