应用程序越权漏洞安全测试总结体会

devtools/2025/1/8 7:37:39/

应用程序越权漏洞安全测试总结体会

一、 越权漏洞简介

越权漏洞顾名思议超越了自身的权限去访问一些资源,在OWASP TOP10 2021中归类为A01:Broken Access Control,其本质原因为对访问用户的权限未进行校验或者校验不严谨。在一个特定的系统或者应用程序中,根据“默认拒绝”的安全设计公理,应将资源按组进行管理,对用户按角色进行管理,不同的角色可以访问不同的资源,然后给不同级别的用户赋予不同的角色,从而实现不同级别的用户去访问不同的资源,这是通常使用的RBAC模型(当然也有其他的授权模型)。越权有几种表现形式:

1、 水平越权访问。两个相同级别的用户A与B,A可以越权去访问B的资源。

2、 垂直越权访问。低级别权限的用户去访问高级别权限用户的资源,如普通用户去访问管理员用户的资源;或者高级别权限用户去访问低级别权限用户的私有资源;

3、 未授权访问。这个类别进行单列,尽管个人认为这是一个特殊的垂直越权访问方式。

二、 常见越权漏洞测试说明

在应用程序中进行权限控制有很多种不同的方式,目前见到的包括token、会话、用户名与用户id等参数,这些字段可能位于请求报文的URI、Cookie等Header、Body体中,报文的请求方式可能包括多种,比如GET、POST、DELETE等等。
在这里插入图片描述

简要说明如下:

1、 参数修改。部分应用程序通过一些用户名、Id等可以代表身份的参数进行用户权限控制,并且这些参数又可以进行猜解,因此在测试过程中可以准备不同的用户观察这些字段,然后测试,或者直接通过BURP对这些字段进行猜解爆破。

2、 身份权限控制猜解。对Token,JWT等代表身份权限控制的内容进行猜解,有的只进行了BASE64编码,可以解码后观察是否可以利用。

3、 关键URI替换。在测试前找到相关资源的URI,与域名或者IP进行拼接后放到其他权限的用户中进行访问。

4、 Cookie替换、token删除等。在高权限访问一些关键操作的时候,将cookie替换为低权限用户的cookie,以验证低权限用户能否进行此关键操作。方式3和方式4其实原理是一样的,只不过一个是换URI另外一个是换cookie。

在测试越权漏洞的过程中首先还是要使用不同的用户去观察他们权限的差异,常见的比如增、删、改操作,这样在测试过程中才能够比较容易发现结果的差异。

三、 环境搭建

这里我是在网上找的一套图书管理系统代码,基于JDK8、springboot、hibernate、mysql、shiro进行开发,在本地的IDEA运行后进行测试的。搭建后后登录页面:

在这里插入图片描述

这个登录界面是有安全漏洞的,可以进行爆破,这里不作进一步说明。

登录后先看一下管理员用户admin登录后有用户管理、角色管理、菜单管理、图书类型、图书管理几个菜单,如下所示:

在这里插入图片描述

再创建一个普通用户user1,登录后只有用户管理、角色管理以及菜单管理三个菜单,如下:

在这里插入图片描述

因此这里可以看到管理员用户与普通用户的权限是存在差别的,这也是我们在测试的时候需要关注的点。

四、 手工测试

1、 使用admin用户访问图书类型或者图书管理这两个特权菜单,在burp中截取URI信息/admin/book/list?page=1&limit=500:
在这里插入图片描述
与请求的IP或者域名进行拼接后为:
​ ​http://192.168.2.6//admin/book/list?page=1&limit=500​​

2、 使用user1进行登录,然后将上述URL在浏览器中打开,如下:
在这里插入图片描述

可以看到普通用户成功的访问到了此URL,证明存在越权漏洞

3、 退出user1再访问访问此URL,页面被强制跳转到登录页面,证明这里不存在未授权访问。

五、 使用BURP的Autorize进行自动化测试

在上面演示的是手工测试的方式,为了提高效率,可以使用BURP的插件Autorize进行自动化测试,Autorize的原理就是上面的第4种方式的自动化测试实现。

1、 安装Autorize插件

Autorize插件基于Python,在BURP的BApp Store中可以搜索到,需要首先安装Jython环境,根据说明就可以安装成功,安装好后多了一个Autorize标签。

2、 BURP处于正常监听admin管理员账号的状态。

3、 首先获取user1的cookie,Cookie: JSESSIONID=F129D56EB938F0BCA344D66846A4E25F,要确保该cookie处于有效期。

4、 按照步骤配置Autorize的cookie信息,3里面的名字是自定义的。
在这里插入图片描述

5、 点击Autorize is off按钮开启,然后在admin用户登录的浏览器中正常的访问特权菜单。

6、 观察Autorize的结果:
在这里插入图片描述

可以看到直观的展示了结果,在左边展示的是在页面上点击菜单的操作触发的URL请求,结果包括修改后的请求测试结果以及未授权请求测试结果,状态分别为红色的Bypassed!以及绿色的Enforced!,红色的Bypassed表示存在越权,而绿色的Enforced表示不存在越权。同时也显示了报文的返回长度,通过长度也可以进行初步的判断。点击某一条后,在右边的Request/Response Viewers中可以看到请求与返回的结果,同样是分为修改后的请求(Modified)、原始请求(Original)以及未认证请求(Unauthenticated)三种情况的请求与响应报文,方便对报文进行比对。同时要以看到因为是在菜单栏进行的每一个操作,实际上会产生两条结果。

7、 配置过滤器
如果因为BURP截获的报文较大,导致这里展示的信息太多,可以进行过滤,比如我这里配置如下:
在这里插入图片描述

这里选择URL中要包括192.168.2.6:80这个字符串,再次访问,这里在左边就只会展示符合过滤条件的内容了。

8、 不足
使用Autorize插件提高了效率,但是仍然存在一些不足,比如在上述中有一个操作是对条目进行删除操作,由于在原始请求中已经进行了删除操作,因此在修改后的越权删除操作中无法再次删除,导致测试结果失败,这种操作需要手工再进行验证。

六、 总结

本文对越权漏洞进行了简介,对常见测试方式进行了总结,通过手工方式以及自动化工具Autorize进行了简要的说明,由于作者水平有限,可能总结远远不到位,在这里献丑了。还需要在工作中不断的测试学习,积累经验,提高漏洞发现率。


http://www.ppmy.cn/devtools/148383.html

相关文章

django vue3实现大文件分段续传(断点续传)

前端环境准备及目录结构: npm create vue 并取名为big-file-upload-fontend 通过 npm i 安装以下内容"dependencies": {"axios": "^1.7.9","element-plus": "^2.9.1","js-sha256": "^0.11.0&quo…

解决 :VS code右键没有go to definition选项(转到定义选项)

问题背景: VScode 右键没有“go to definition”选项了,情况如图所示: 问题解决办法: 第一步:先检查没有先安装C/C插件,没有安装就先安装下。 第二步: 打开VS CODE设置界面:文件->…

【网络】HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3比对

HTTP/3是HTTP协议的最新版本,它基于QUIC协议,而QUIC最初由Google开发,后来被IETF标准化。以下是包含HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3(基于QUIC)的对比表格: 特性HTTP/1.0HTTP/1.1HTTP/2HTTP/3 (基于QU…

【HarmonyOS】:DevEco Studio安装与应用工程创建指南

前言 本文旨在为初涉 HarmonyOS 开发的开发者提供一份详尽的入门指南,涵盖从安装最新版 DevEco Studio 到使用该 IDE 创建首个应用工程的具体步骤。通过遵循本指南,您将能够顺利搭建起自己的开发环境,并迈出构建HarmonyOS应用的第一步。 一、…

Visual Studio 中增加的AI功能

前言: 人工智能的发展,在现在,编程技术的IDE里面也融合了AI的基本操做。本例,以微软的Visual Studio中的人工智能的功能介绍例子。 本例的环境: Visual Studio 17.12 1 AI 智能变量检测: 上图展示了一…

Kafka 全面指南:从基础到实战

Kafka 全面指南:从基础到实战 📚 1. 什么是 Kafka? Apache Kafka 是一个分布式的 消息队列 和 流处理平台,用于处理 实时数据流。它可以将 数据生产者 和 数据消费者 解耦,提供高性能、可扩展的消息传递系统。 📝 Kafka 的核心概念 名词描述Producer生产者,向 Kafka …

贴吧ip属地不准确什么意思?是根据什么来的

在数字化时代,IP地址作为网络设备的唯一标识符,不仅承载着用户的网络身份,还关联着用户的地理位置信息。百度贴吧等社交平台,为了维护网络环境的健康与秩序,遵循相关规定,在用户个人主页等位置展示账号IP属…

Singleton: WebRTC中ThreadManager中的单例模式

1. 什么是单例模式: 旨在确保一个类只有一个实例,并提供全局访问点。 应用场景:需要一个全局唯一的实例,避免资源浪费。 2. 单例模式的实现: Lazy Initialization(懒汉式)(延迟初…