在 Web 安全领域,越权访问漏洞主要分为垂直越权和水平越权两种类型。本文将着重探讨垂直越权测试的思路与方法 。
早期在学习小迪的相关视频时,我了解到一种垂直越权的测试方式:通过替换高权限账号与低权限账号的 cookie,来尝试实现越权访问。这种方法在特定场景下有一定的可行性。
然而,在实际工作环境中,这种基于 cookie 替换的测试面临诸多挑战。一方面,测试人员往往很难获取到足够的测试账号,有时甚至仅能得到一个管理员账号。
若要通过添加用户功能来配置一个低权限小号用于测试越权,整个流程不仅繁琐,而且耗费精力,使得 cookie 替换的操作变得极为不便。
另一方面,即便系统允许用户自行注册,但注册用户所能使用的功能通常极为有限,在这种情况下,传统的 cookie 替换方式难以发挥作用。
那么,面对这些实际问题,我们该如何有效地进行垂直越权测试呢?
接下来,本文将围绕垂直越权的多种实用思路展开深入分析。
个人观点有两大种,四小种。
具体来说,就是将低权限账号的 cookie 替换后,用于访问原本仅限高权限账号使用的接口。
以/api/system/user/list
接口为例,该接口的作用是列举用户列表。在正常的权限设定下,这类接口只有管理员才有访问权限。普通用户登录系统后,由于系统权限控制,其操作界面不会出现用户管理相关功能入口,也就无法直接访问用户列表接口。
在进行越权测试时,我们把普通账号的 cookie 进行替换,然后用替换后的 cookie 去访问/api/system/user/list
接口,并发送请求数据包。若此时能够成功查询到用户列表数据,那就表明系统存在垂直越权漏洞,即低权限用户可通过不正当手段访问到高权限用户才能访问的资源。
在进行系统安全测试时,有一个重要的环节是针对接口的越权测试。具体操作流程是,在登录系统前后,分别提取相应的接口信息,并将这些接口汇总起来进行统一测试。
实际测试中,若面临没有测试账号的情况,主动向相关负责人申请账号是必要的途径,毕竟不主动申请,账号不会自动提供。
要是系统允许用户自行注册,且注册流程无需经过审核,注册完成即可直接登录,那么注册后就可以着手提取接口。
提取接口数据后,借助 Burp Suite 等专业工具对这些接口进行遍历测试。在遍历过程中,重点关注接口返回的内容,将其与登录后正常访问所获取的数据进行对比。
在遍历测试之前,建议先全面浏览后台的各个功能点,查看其中是否存在数据,以及这些数据是否涉及敏感信息。这样做的好处在于,当工具遍历跑出来数据后,能够更高效地判断,而无需对每一条数据都进行逐一细致对比,便能快速确定是否是由于越权问题导致的数据异常情况,从而大大提升测试效率和准确性。
基于 web 页面的越权
还有一种方式,也是基于接口,但是是针对 web 页面的越权,属于功能接口的分支。
比如登录后的 url 为
http://www.test.com/demo/#/home
http://www.test.com/demo/home
这两种,第一种大多数是vue框架
在进行系统安全测试时,我们首先利用熊猫头工具来获取接口信息。获取到接口信息后,有多种方式进行后续的访问遍历测试。一方面,可以通过编写 Python 脚本对获取的接口进行拼接访问;另一方面,也可以借助 Burp Suite 工具来完成接口的拼接访问操作。
例如,我们可能会将基础网址http://www.test.com/demo/#/
与不同的功能路径,如main
、system
、list
等进行拼接,形成类似http://www.test.com/demo/#/main
、http://www.test.com/demo/#/system
、http://www.test.com/demo/#/list
这样的访问链接。通过这种拼接访问的方式,运气好的话,有可能直接访问到原本受限的其他功能页面。
不过需要注意的是,并非所有基于 Vue 框架开发的系统都会存在此类越权访问漏洞。
系统是否存在漏洞,关键取决于业务系统权限的设置方式。
在实际情况中,可能出现多种结果:整个系统可能一个越权漏洞都不存在;也有可能在众多接口中,仅有一两个存在越权情况;甚至存在所有接口都存在越权漏洞的可能性。
另外,在访问过程中,还可能会遇到这样的现象:访问后虽然能打开新的页面,但在点击页面功能进行抓包时,发现返回的是错误信息(如 error 提示)或者 403 禁止访问状态码等。
这些情况在测试过程中都是较为常见的。所以,最终能否发现越权漏洞,在一定程度上存在不确定性 。
另一种情况是针对非 Vue 框架的系统。在这种情况下,可采用直接拼接路径的方法,如http://www.test.com/demo/home
、http://www.test.com/demo/list
、http://www.test.com/demo/system
等。这些路径的收集工作同样借助熊猫头工具来完成,收集之后再按照前面提到的利用 Python 脚本或 Burp Suite 等方式进行后续的测试操作,以检测是否存在潜在的安全漏洞或越权访问等问题。
下面就看一下实际案例:
这是我注册的账号,发现就这几个点
然后就获取接口,然后发现我自己可以获取到人员机构,并且能够添加成员,赋予登录权限后,就直接登录进来了
下面这个也是注册用户进来的
基本上就五个功能点,然后通过熊猫头提取接口
直接拼接
就发现了很多敏感信息。
基于目录扫描的越权
在安全测试中,还有一种测试思路值得关注。最后一种是在登录系统之后,通过配置 cookie 的方式,对网站进行全面的目录扫描。在此过程中,可使用预先准备好的字典进行匹配,以发现一些潜在的安全隐患。
例如,在进行目录扫描时,可能会发现一些敏感页面,如passwd.html
页面。当打开该页面后,可能会出现严重的安全问题,比如无需额外验证就能修改管理员账号密码,这种情况会给系统带来极大的安全风险。
另外,还有一种相对较少见的情况。
有些网站在访问登录地址时,会先跳转到后台页面,然后再跳转至登录页面。
针对这种情况,我们可以持续进行抓包操作,等待浏览器完全到达后台页面。在该页面上点击不同的功能点,并适时放包,直到 Burp 工具中出现相关的接口信息。然后,利用这些接口信息开展测试工作。
在实际测试过程中,我仅遇到过一次这样的情况,在这个案例中,该网站可以进行文件上传、信息查询等操作。
不过,从严格意义上讲,这种情况更倾向于属于未授权访问的范畴,其涉及的安全问题需要我们引起足够的重视,因为它会使未登录用户获取到本不应有的权限,可能导致信息泄露、数据篡改等一系列严重后果。
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款