关于正方教务系统漏洞的说明
此漏洞基于湖北工程学院教务管理系统进行演示,漏洞覆盖新正方教务系统8.0以下版本,为本人一年前提交的漏洞,所以并非0day漏洞
此漏洞影响范围巨大,几乎涉及国内一半高校的教务系统,包含武汉大学、浙江工商大学等等
而且据本人推测,此漏洞难以完全修复,因为我怀疑在该程序的设计阶段,权限验证模块与真实功能模块耦合度过高,所以到目前如此多的功能,已经难以完全修复所有页面了
此漏洞仅供学习,请勿做任何违法的事情。
本人在发布漏洞前已和本校教务系统及公司提前沟通,并已修复了较为重要的功能模块。
漏洞原理
由于没有源代码,以下部分主要为本人猜想,实际以真实源代码为主。
在任何权限的用户登录进入系统以后,会获取相应的权限,用户的会话应该是保留在服务器的session里,然后用户每次进入一个功能页面,应该都会通过服务器上的session来查询用户的角色,并分配相应的权限
在写教务系统查成绩的爬虫的过程中,我发现url中的一个get参数:”gnmkdm“是一个不可缺少的参数,去掉以后任何操作页面都会显示无权限,并且页面标题栏会变为空,于是我猜想,gnmkdm是一个控制权限和标题的参数,为了进一步验证,于是我尝试将学生的某个功能页面(比如成绩查询)中的gnmkdm参数改为其他页面(比如个人信息维护)中的值(N100808),然后我们会发现,页面标题变成了《学生个人信息维护》,而功能却还是查询成绩页面的功能,并且发现出现了个人信息维护中的按钮(如图):
于是我初步断定gnmkdm是控制功能按钮与标题的页面,于是我又尝试摸清楚gnmkdm代码的意思,于是去掉了N100808中最后两个08,结果出现了如下画面:
于我断定,gnmkdm这个参数是由N+”两位模块代码“+”两位控制器代码“+“两位方法代码”组成的,后续也通过验证证实了猜想
继续的,我点开标题栏的html源代码进行分析,发现代码中竟然显性地存放着功能模块的地址:
于是我断定程序是存在一个敏感目录泄露漏洞的,接着往下走,我通过尝试,获取到了用户管理页面的路径:
http://61.183.22.151:8080/jwglxt/xtgl/yhgl_cxYhxx.html
并将学生个人信息维护权限的gnmkdm代码放入url参数,结果发现可以正确进入,验证成功具有越权操作漏洞:
搜索自己的账户,并点击修改,发现可以修改自己的权限(验证过后改回了自己的权限,防止自己的权限对系统造成问题):
至此是漏洞的全过程
经过我的分析,漏洞产生原因是因为权限验证没有放在基本控制器中,而是放在了标题栏的功能模块进行验证,所以提供了越权操作的可能性
建议修复方法
1、在基本控制器中,对用户验证权限,即在基本控制器中对gnmkdm的代码和用户权限进行验证,并同时对gnmkdm参数和目录进行匹配验证,防止使用一个页面的权限取操作另一个页面
2、在增删改操作时,验证用户持有权限,即在model中进行控制
3、将敏感页面全部设置操作密码,防止越权以后能够进行操作