新闻公告

高校信息系统常见漏洞-越权访问

2021-04-25
浏览次数:
返回列表

高校信息系统常见漏洞-越权访问

一、越权访问漏洞概述


越权访问(Broken Access Control,简称BAC),是Web应用程序中一种常见的漏洞,被OWASP列为Web应用十大安全隐患的第二名。一般表现为用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问到的页面或文本信息。这种非授权的访问,也被定义为业务逻辑类漏洞,其特点是存在范围广、危害大,自动化工具又难以检测,因此近些年一直高居web安全漏洞的前十名。


越权访问,一般分为水平越权和垂直越权两种形式。
水平越权访问:一般定义为“基于数据的访问控制”设计缺陷引起的漏洞,表现为同一角色的不同用户,拥有相同权限等级,他们能访问自己的私有数据,但是应用系统并没有对数据和访问者的身份进行细分和校验,导致用户相互之间可以访问对方的数据。
垂直越权访问:一般定义为“基于URL的访问控制”设计缺陷引起的漏洞,表现为低权限和高权限的用户间,原本高权限用户能够访问的URL或者执行特定的动作,由于系统没有对访问者的身份进行校验,导致低权限的用户只要能够知晓高权限用户访问的URL就可以访问或者可以执行高权限的动作。

二、案例分析


在高校(涉及的用户角色常见有学生、教师、管理员等)的信息系统中,存在大量的数据查询访问行为,例如在教务系统中,学生可以查询自己的考生信息、考试成绩等等,这些访问权限的设计不当,往往就会导致出现越权访问的漏洞。下面笔者通过几个越权访问的案例,为大家讲解该类漏洞的原理及挖掘思路。


案例一:学生账户间水平越权访问他人信息
该案例是某高校的一个与考生相关的信息系统,在这个信息系统中,学生账户登录后,就可以查询和下载自己的考生信息表,如下图所示。


高校信息系统常见漏洞-越权访问(图1)

漏洞发现过程:


在打开个人考生信息表的URL后,笔者看到一个Ex***ID=1445的查询参数,而这个参数能够使我们很容易地猜想到他代表的应该是考生ID,所以笔者在这里就尝试了变换考生ID信息为Ex***ID=1447,而此时我们发现网页打开了考生ID为1447的考生信息,如下图所示。



高校信息系统常见漏洞-越权访问(图2)

漏洞分析:

这个案例中,我们很明显地可以分析出,考生信息属于每个考生的私有数据,这个数据在正常情况下,只有对应的考生才可以查询和下载,而这里很明显的是,系统并没有将数据和用户的访问身份进行关联和校验,通过该漏洞,任意考生只要遍历考生ID信息,就会导致所有考生信息的泄露。这个案例就属于非常典型的水平权限跨越访问漏洞,类似的漏洞还经常存在于同级别权限间的教职工间。



案例二:学生账户可越权进行信息发布
“信息发布”是在高校的大多数信息系统中都存在的功能。信息发布可以是新闻,也可以是重要通知,发布的信息往往会显示在网站的首页,因此发布信息往往是管理员才拥有的高权限动作。在这个案例中,管理员登录系统后,可以访问到信息发布页面。管理员进行发布管理的URL为http://XXXXX/news/Publih/-1,如下图所示。 
高校信息系统常见漏洞-越权访问(图3)
通过该URL,管理员可点击“新增”,跳转至新增页面的URL,而该URL地址为:http://XXXXX/news/create

高校信息系统常见漏洞-越权访问(图4)

漏洞发现过程:

对于该URL,原本属于管理员特权才可以访问的URL,且对于低权限账号也采取了隐藏措施,低权限账号是无法看到该URL的。但是对于有经验的攻击者来说,该URL的命名/news/create,显然并不难猜,或者通过爬虫等手段均可以轻松访问到该URL。
我们以低权限的学生用户登录,发现可以直接访问该URL,并进一步可以进行新增等操作,如下图所示。
高校信息系统常见漏洞-越权访问(图5)

漏洞分析:

在这个案例中,我们看到,该系统的开发者采取了隐藏措施对特权URL进行保护,也就是在学生账户登录时,根本看不到该URL,但是并未对访问该URL的用户进行身份和权限的校验。这就导致学生账户如果知道该URL,也就可以直接访问并进一步进行信息的发布等高权限动作。由此我们也能看出,垂直权限的越权访问,往往带来的是权限提升,导致的问题也不仅仅是信息泄露,甚至还可以进一步导致数据的修改删除等。
案例三:低权限账户可以切换高权限身份
有一些系统中,开发者往往会定义出不同的角色类型,然后系统根据角色的不同而赋予不同的权限。在这个案例中,系统就通过roletpyes定义了角色的类型,并通过定义的数值代表不同角色的类型。
漏洞发现过程:
笔者在该系统的渗透测试过程中,通过burp进行了http协议数据的拦截和分析,发现在教师用户登录认证成功后,服务器向客户端发送的http响应包中包含一个roletypes:[“1”]的字段。而接下来页面首先会重定向到选择学生入学年级,而此时页面中显示当前用户的角色为指导教师,重定向的页面如下图所示。

高校信息系统常见漏洞-越权访问(图6)

此时访问该页面的http请求中,我们看到了定义的roletypes:[“1”],如下图所示。

高校信息系统常见漏洞-越权访问(图7)

笔者猜测roletypes很可能是开发人员定义的角色类型,于是对请求进行了重放,同时定义roletypes:[“5”],此时重定向的页面显示当前身份为管理员,选择年级后,就进入了管理员的后台。

高校信息系统常见漏洞-越权访问(图8)

漏洞分析:

这个案例也属于典型的垂直越权访问漏洞。而该漏洞的产生,与案例二的不同点在于,该漏洞并不是在于低权限用户可以直接访问高权限的URL,而是攻击者可以更改代表角色类型的roletypes。该案例中,开发者定义了不同用户的角色类型roletypes,并将角色类型值在用户认证成功后,发送给了客户端。后续的请求中,用户的请求都会携带该字段,服务器依此roletypes对用户进行授权。很显然该系统对登录用户的授权,仅校验了roletypes的值,而没有对用户的身份进行关联校验,导致登录用户只要更改roletypes值,就能获得不同角色的授权。
通过以上三个案例,我们能够进一步理解越权访问漏洞的表现及危害。水平越权访问,往往导致的是信息泄露,而垂直越权访问漏洞,则不只是信息泄露,获得高权限的攻击值,可以进一步对数据进行篡改、删除等动作,因此从危害角度来讲要高于水平越权访问。

三、漏洞产生原因




通常情况下,一个 Web 程序功能流程是登录 - 提交请求 - 验证权限 - 数据库查询 - 返回结果。如果验证权限不足,便会导致越权。常见有如下原因导致越权漏洞。

1. 通过隐藏 URL实现控制访问
有些程序的管理员管理页面只有管理员角色才显示,普通用户看不到,但可以利用 URL 实现访问控制, URL 一旦被泄露或被恶意攻击者猜到后,则会导致越权攻击。
2. 直接对象引用
这种方式通过修改参数就可以产生水平越权,例如查看用户信息页面 URL 后加上自己的 id 便可查看,当修改为他人的 ID 号时会返回他人的信息,便产生了水平越权。
3. 多阶段功能
多阶段功能是一个功能有多个阶段的实现。例如修改密码,可能第一步是验证用户身份信息、号码、验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不再验证用户身份,导致恶意攻击者抓包直接修改参数值,进而导致可修改任意用户密码的问题。
4. 静态文件
很多网站中,一些静态文件例如 pdf、word、xls 等,可能只有特定用户可下载,但当这些文件的 URL 地址泄露后,任何人都可下载。如果用户知道 URL 命名规则,则会遍历服务器的文档进行批量下载。
5. 平台配置错误
一些程序会通过控件来限制用户的访问,例如后台地址,普通用户不属于管理员组,则不能访问。但当配置平台或配置控件错误时,就会出现越权访问。


四、防范措施


对于越权访问漏洞,通常我们有如下的建议供开发者参考:

1. 双重验证机制:前后端同时对用户输入信息进行校验。
2. 调用功能前,验证用户是否有权限调用相关功能。
3. 执行关键操作前必须验证用户身份:验证用户是否具备操作数据的权限。
4. 直接对象引用的,加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理。
5. 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤。



搜索