共计 3467 个字符,预计需要花费 9 分钟才能阅读完成。
截止目前,学海已经完整修复相关问题,故进行公开文章。
一、漏洞基本信息
| 项目 | 内容 |
| 漏洞名称 | OA 与教师管理后台账号通用致未授权接口访问漏洞 |
| 受影响系统 | 学海教育科技有限公司 OA 管理后台、教师管理后台 |
| 漏洞类型 | 身份认证缺陷 + 权限控制失效(前端仅过滤显示,后端未严格鉴权) |
| 风险等级 | 高危(弱口令易被破解,接口可直接调用,存在敏感操作风险) |
| 发现时间 | 2026 年 1 月 24 日 |
| 漏洞概述 | 两大后台账号通用,普通教师账号可登录 OA 后台;教师普遍使用弱口令,攻击者易暴力破解登录;OA 虽动态隐藏无权限菜单,但前端 JS 泄露页面路由及接口,攻击者可直接调用接口执行敏感操作(如生成刷机码激活码、修改用户 / 学校 / 组内容)。 |
2.1 漏洞成因
- 账号体系设计缺陷 :OA 管理后台与教师管理后台未实现独立身份认证,共用一套账号体系,并且没将教师账号(type4)阻止登录,导致低权限的普通教师账号具备 OA 后台登录权限,突破了“最小权限”原则。

- 弱口令防护缺失 :系统未强制普通教师设置强口令,多数用户使用 Aa123456 等弱口令,攻击者可通过暴力破解、字典攻击快速获取合法账号。

- 权限控制机制不完整 :仅依赖前端动态加载过滤菜单显示,未在后端接口层进行严格的权限校验;同时前端 JS 文件未脱敏,直接泄露敏感页面路由及接口信息,形成“前端隐藏、后端放行”的安全漏洞,并且 js 的获取无需任何权限校验。
2.2 复现步骤
- 获取普通教师账号:通过弱口令字典暴力破解,或利用已知弱口令账号(如账号:xxxxxx(多数为名字 + 数字组合),密码:Aa123456)。
- 跨后台登录:使用该教师账号访问 OA 管理后台登录页面,输入账号密码后成功登录,页面因权限不足动态隐藏所有功能菜单,仅显示空白页面或基础导航栏。

- 提取敏感路由与接口:通过浏览器开发者工具查看页面加载的 JS 文件,搜索关键词,提取到刷机码查看页面路由(Index/sidebarCode?view=1)及对应动态码添加接口(/index/addCode)。通过此接口可查看对应设备的所属用户或所属用户的设备号,并且加载了 addcode.js,从此 js 可分析出动态码生成 api(/index/doaddCode)。
- 路径猜测与页面访问:基于已泄露路由格式,猜测其他敏感页面路径(如 /user、/school),访问后页面显示“无权访问”,但浏览器已加载该页面关联的 JS 文件。
- 接口调用验证:借助 Postman 等工具,携带教师账号的登录凭证(Cookie),直接调用提取到的激活码生成接口,接口正常响应并返回激活码,验证漏洞可被利用。
- 账号安全易突破 :弱口令 + 账号通用双重问题,使攻击者无需复杂技术即可获取大量合法账号,低成本进入 OA 后台,为后续攻击奠定基础。
- 敏感功能被滥用 :激活码、刷机码等接口可被直接调用,可能导致企业核心资源(如账号创建、学校创建权限)被非法控制,引发资产损失或业务混乱。存在学生账号信息调取接口,可批量获取用户身份证、安全问题答案、手机号等隐私信息。
- 潜在接口风险扩散 :JS 泄露的路由可引导攻击者猜测更多未公开接口,即使部分页面显示无权访问,仍可能通过接口调用获取敏感数据(如员工信息)或执行破坏性操作。
- 业务声誉受损 :若漏洞被恶意利用,可能导致教学管理秩序混乱、敏感信息泄露,影响学海教育的品牌信誉及客户信任。
4.1 分离账号体系与强化身份认证
- 拆分 OA 与教师管理后台账号体系,实现独立账号、独立权限管理,普通教师账号默认无 OA 后台登录权限,需单独申请并经审批后方可开通最小权限。
- 在 OA 后台登录入口增加身份校验逻辑,仅允许指定角色(如管理员、学海老师)的账号登录,直接拦截普通教师账号的登录请求。
4.2 强制弱口令整改与登录防护
- 实施强口令策略:强制所有教师账号设置复杂度密码(长度≥8 位,包含大小写字母、数字、特殊字符),禁止使用连续数字、生日等弱口令,登陆时提醒用户更换密码。
- 增加登录安全防护:开启登录失败次数限制(如 5 次失败后锁定账号 30 分钟),对异常登录(异地登录、批量登录)进行告警,管理员账号建议启用双因素认证(2FA)。
4.3 完善全链路权限控制
- 前端层面:采用动态路由注册机制,仅加载当前用户有权访问的路由及 JS 文件,杜绝无权限路由、接口信息泄露;移除 JS 中硬编码的敏感路径与接口地址。
- 后端层面:所有接口强制增加角色权限校验,基于用户角色判断是否允许访问,即使携带合法登录凭证,无权限用户调用接口时直接返回 403 禁止访问,从根源阻断未授权调用。
4.4 加强安全审计与漏洞排查
- 定期开展弱口令扫描与清理,使用专业工具检测系统内弱口令账号并强制整改。
- 对 OA 系统所有接口进行全面审计,重点排查未授权访问、权限越权等问题,修复接口鉴权漏洞。
- 建立前端代码安全规范,禁止在客户端代码中泄露敏感路由、接口及配置信息,上线前进行代码安全评审。
部分接口披露
- /index/addCode 查找用户 / 设备
- /Index/sidebarCode?view= 1 激活码查看
- /index/doaddCode 执行激活码生成
- /assist/Service/getUserClients?id={用户 ID}
- /assist/Service/createAssist?deviceId={设备 ID}&userName={用户名}&userId={用户 ID}&hidden={是否隐藏 0 1} 远程协助 id 创建
- /user/device?userId=xxx 设备信息
- /Appserver/schoolAppDown 应用下载 (失效)
- /User/userSetPower?iUserId=xxx 用户权力
- /user/addUser 添加用户
- /Group/userGroup 用户组
- /assist/users/clients 客户端列表
- Order/bindStudent 绑定学生列表
- User/look 查看用户详情
- User/setSchool 修改学校
- /group/getDepGroup – 获取部门组树形结构 (index.js:22)
- Group/getGroup – 获取组列表数据 (index.js:31)
- Group/getGroupEnum – 获取组类型枚举 (index.js:133)
- Group/createGroup – 创建新组 (index.js:122)
- Group/groupPower – 组权限设置页面 (index.js:130)
- group/groupUser – 查看组成员 (index.js:141)
- group/setGroupDep – 设置组所属部门 (index.js:165)
- group/delGroup – 删除组 (index.js:171)
- group/resetGroupDep – 重置组部门 (index.js:175)
- Group/modifyGroup – 修改组信息 (index.js:231)
- 学校数据管理相关
- School/getDgData – 获取学校列表数据(DataGrid)
- School/getSchoolInfo/{schoolId} – 获取学校详细信息
- School/modifyData – 添加 / 修改学校数据
- School/delData – 删除学校
- School/exportSchool – 导出学校数据
- 科目与区域相关
- getSubjects – 获取科目列表
- School/getAreaData – 获取区域数据(省市区)
- customer/customer/getAreaById/{areaId} – 根据区域 ID 获取子区域
- School/getFocusLevel – 获取关注级别
- 用户与登录相关
- school/refreshSchoolLogin – 刷新学校登录状态
- school/getSchoolSecret – 获取学校密钥配置
- school/setSchoolSecret – 设置学校密钥
- 分组与刷题王相关
- school/lockAllGroup – 锁定 / 解锁所有分组
- stats_brush/checkBrushGroupStatus – 检查刷题王分组状态
- 统计与功能设置
- School/getStatData – 获取学校统计数据
- School/setStudy – 设置学习功能状态
- School/setSchoolAnswer – 设置在线答题状态
- School/initXiaoxian – 同步小闲学生及班级数据
- /customer
- /feedback
- /School/getUser?schoolId=x&userType=x
- /School/changeSchoolInfo
- /School/changeSchool
正文完