浅谈一下什么是越权问题?

article/2025/11/11 15:34:55

1、什么是越权?

越权(或者说权限提升,Privilege Escalation)是指攻击者能够执行他本身没有资格执行的一些操作,属于“访问控制”的问题。用大白话讲,越权就是“超越了你你拥有的权限,干了你本来不可能干的事儿”。先来几个越权的例子:

Winmail普通用户可直接进入后台取得域名管理、用户管理等所有权限

大华DSS平台低权限账户越权直接修改system密码

前程无忧越权访问个人简历(简单测试上万份简历可查看)

易企秀越权修改信息致任意用户登入

一般情况下,常见的访问控制方式有三种:垂直访问控制、水平访问控制和上下文相关的访问控制。垂直访问控制允许不同类型的用户(常见的有基于角色划分用户类型)访问应用程序的不同功能,例如在某系统中普通用户只能执行有限的操作,管理员则拥有最高权限。水平访问控制允许用户访问一组相同类型的资源,如在一个网银系统中,每个用户只能看到他自己的账户信息,只能操作自己的账户进行转账。而上下文相关的访问控制可确保基于应用程序当前的状态,限制用户仅能访问所允许的内容,如在常见的找回/修改密码功能中,必须通过身份验证才能重新设置密码。许多情况下,垂直访问控制与水平访问控制会相交交叠,配合使用。

如果在一个应用中,用户能够访问他本身无权访问的功能或者资源,就说明该应用存在访问控制缺陷,也就是说存在越权漏洞。与访问控制相对应的,将越权分为垂直越权、水平越权和上下文相关的越权。

垂直越权:如果攻击者能够执行某项功能,而他所属的角色并不具备该权限,这就存在垂直越权漏洞,如上述示例中前两个例子。

水平越权:如果攻击者能够执行与自己同级别的其他用户能够执行的操作,这就存在水平越权漏洞,如上述示例中的后两个例子。

上下文相关的越权:如果攻击者能够利用应用程序状态机中的漏洞获得关键资源的访问权限,这就存在上下文相关的越权。如在找回密码过程中,攻击者使用自己的账户信息通过验证,但最终却通过某种手段(例如使用BurpSuite改数据包)将他人的密码进行了修改。上下文相关的越权漏洞一般属于业务逻辑漏洞。

 

2、为什么会出现越权

通常情况下,我们使用一个web应用程序提供的功能时,流程是:登录—>提交请求—>验证权限—>数据库查询—>返回结果。如果在“验证权限”环节存在缺陷,那么便会导致越权。一种常见的存在越权的情形是:Web应用程序的开发者安全意识不足,认为通过登录即可验证用户的身份,而对用户登录之后的操作不做进一步的权限验证,进而导致越权问题。

2.1、 通过隐藏URL实现访问控制

有些应用程序仅通过URL实现访问控制。例如:使用管理员身份登录后可以看到后台管理页面的链接,但是以普通用户登录则看不到该链接。在这种情况下,开发者认为普通用户不知道或者很难猜到后台管理页面的URL,因此实现对管理功能的保护。这其实是一种错误观点,因为攻击者完全有可能通过其他方式(如Google Hacking、HTML/js源码分析、暴力猜解URL、利用其他漏洞等)得到后台管理URL。

2.2、 直接对象引用(Direct Object reference)

用户提交HTTP请求访问某资源时,被请求资源的标识符常常以GET或者POST请求参数的形式出现在URL查询字符串或者POST请求主体中提交给服务器。例如,在一个网银系统中,用户可以使用以下URL查询账户信息:

https://www.onlinebank.com/viewInfo.php?accountId=12345678

其中accountId是用户自己的账户ID。用户登录自己的账户后,该URL的链接会出现在用户账户页面中,用户点击即可跳转到账户信息页面。虽然其他用户无法看到这个链接,但是如果该网银系统的访问控制不完善,攻击者完全可以通过枚举accountId进而构造出URL,然后越权查看他人的账户信息。

2.3、 多阶段功能

应用程序的一些功能通过几个阶段执行,并且在执行过程中向服务器依次提交多个请求。这种情况很常见,比如转账功能、找回密码功能等,需要先验证用户的身份,验证通过后才允许用户执行后续动作。多阶段功能本身并没有问题,但是如果开发者认为到达验证过程后续阶段的用户一定已经拥有了相关的权限,并在后续阶段执行操作时不再对用户提交的请求进行验证,那么就很有可能存在越权漏洞。攻击者完全有可能绕过前几阶段的验证阶段,直接执行后续的动作。讲一个我在测试中遇到的真实的案例。

某网站在找回密码时做了很严格的验证,需要验证姓名、手机号、身份证号等信息,验证通过了才能修改密码。那么问题来了,既然做了这么严格的验证,怎么还会存在越权?该网站的“找回密码”功能被设计成了两步(提交了两个请求报文):第一步验证用户身份,这时提交第一个请求报文,验证成功之后,进入第二步;第二步才是真正的修改密码的动作,而修改密码的POST数据包有3个请求参数,分别是新密码、确认新密码以及账号值。问题就出在第二步,在执行修改密码的动作时,服务器并未验证被修改密码的账户是否是第一步中通过身份验证的账户,因此攻击者可以很容易的以自己的身份通过认证,然后修改第二步提交的报文,实现对任意账户的密码修改!

2.4、 静态文件

有些Web应用程序在用户访问动态页面时会执行相应的访问控制检查,以确定用户是否拥有执行相关操作所需的权限。但是,用户仍然会提交对静态资源的访问请求,如下载网站中的word、excel、pdf文档等。这些文档都是完全静态的资源,其内容直接由Web服务器返回,它并不在服务器上运行。因此,静态资源自身并不能执行任何检查以确认用户的访问权限。如果这些静态资源没有得到有效的保护,那么任何知晓URL命名规则的人都可以越权访问这些静态资源。这种情况的越权也很常见,而且即使不知道URL命名规则,完全有可能通过Google hacking搜索到敏感文件。

http://p3.qhimg.com/t01b602cb1ff2a862a2.png

2.5、 平台配置错误

一些应用程序通过在Web服务器或应用程序平台层使用控件来控制对特定URL路径的访问。例如,有些应用程序会根据用户角色来限制对管理后台路径(如/admin)的访问,如果用户不属于“管理员”组,则拒绝其访问后台管理页面的请求。但是,如果在配置平台及控件时出现错误,就可能导致越权访问。

 

3、越权漏洞怎么挖

首先,找出疑似存在越权漏洞的请求。存在越权漏洞的请求有一定的特点,可以从两个方面下手。

从HTTP请求上来说,就是通过BurpSuite抓取在目标站点正常操作所产生的请求数据包,然后找出可能产生越权的请求。一般情况下,类似上文所述URL的GET或者POST请求都要列为重点怀疑对象:

https://www.onlinebank.com/viewInfo.php?accountId=12345678

从业务功能上来说,找到容易产生越权的功能点。常见的越权高发功能点有:根据订单号查订单、根据用户ID查看帐户信息、修改/找回密码等。

确定了怀疑对象之后,还需要进一步的分析,以确定是否真的存在越权。这时,需要两个不同的账号(下文分别称为账号A和账号B),以便测试登录账号A后进行操作能否影响到账号B。注意在浏览器中测试时,需要使用两个浏览器分别登录不同的账号,或者使用浏览器的隐私浏览功能登录其中一个账号。

以上文提到的URL为例进行说明。假设账号A的id为1234,账号B的id为5678,BurpSuite中抓取的数据包都是在账号A的。我的习惯做法是:在BurpSuite中将该请求发送到Repeater,然后将参数id的值修改为5678,最后提交修改后的请求包;服务器返回响应后,可以看一下BurpSuite中收到的响应报文。如果响应报文直接提示错误之类的,基本上可以确定此处不存在越权;如果响应报文提示操作成功,此时应该使用浏览器登录账号B进行二次确认,如果数据确实有相应的改动,那么则说明这里存在越权漏洞。这里需要注意:BurpSuite中报文提示操作成功有可能是误报,必须在浏览器中进行再次确认。而对于查询订单这类的请求来说,情况更简单了,修改参数id提交请求,如果返回了账号B的数据,那么就可以确定存在越权。

当然,越权漏洞的攻击点不仅仅存在于请求参数中,还有可能在Cookie中。因此,需要具体情况具体分析,复杂一点的可能还需要Cookie值配合请求参数值以实现越权攻击。

4、总结

实现应用程序的完善的访问控制不是件容易的事,因此越权漏洞防不胜防。对于开发者而言,一定要有安全意识,时刻保持警惕。以下是几点建议:

永远不要相信来自客户端(用户)的输入!

执行关键操作前必须验证用户身份,多阶段功能的每一步都要验证用户身份。

对于直接对象引用,加密资源ID,以防止攻击者对ID进行枚举。

在前端实现的验证并不可靠,前端可以验证用户的输入是否合规,在服务器端验证用户权限。

 

5、友情补充

一、局部纵向越权解决方案:

把这种越权问题,作为整块测试任务来做。新建自动化测试Case,让每一个接口(尤其是涉及分级的接口)都要有多个不同级别的用户进行权限校验。根据断言和数据库一致性(必须,有时候接口返回的成功,并不一定是成功),来判断是否存在越权问题。

操作流程如下:

1、添加最高级别用户S的测试Case

2、添加普通用户A的自动化测试Case

3、添加低级别用户B的自动化测试Case

4、多用户统一访问仅开放给S级别用户接口。Case通过条件:A、B访问失败

5、S、A、B循环第四步

二、横向越权解决方案:

搭建一个横向越权mock数据系统。

1、输入为:接口url ,以及正常的json 串。

2、处理过程:对url和json串进行比对,找到两者相同字段。

3、系统修改一致字段对应value

4、输出一组或者几组测试数据

5、将mock出来的数据,进行自动化测试。

6、验证是否存在横向越权。

6、参考文献

黑客攻防技术宝典:Web实战篇(第2版)

我的越权之道

What is privilege escalation

Direct Object References and Horizontal Privilege Escalation

越权问题解决优化方案

【技术分享】聊聊越权那些事儿

 


http://chatgpt.dhexx.cn/article/lL3imtY8.shtml

相关文章

快充协议(QC/PD/PE)及标准

快充协议(QC/PD/PE)及标准 充电按用途可分为:车充,墙冲,无线充和充电宝(移动电源);按接口可分为Micro-USB, USB-A or B, Type-C和Lightning(Apple); 按充电快…

通过QI协议发射和接收的无线充需要做CE认证吗?RED指令

QI协议其实是一个技术协议,和CE认证没有多大的关系。做了QI认证,还是要做CE认证的。具体的指标是RED指令。 关于如何办理QI认证和CE认证,欢迎关注Liwei_Chan!!每天学习一分钟,让你紧跟时代,扩充…

MQTT 协议

MQTT 简介 MQTT是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点得它对很多场景来说都是很有的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网…

通过QI协议发射和接收的无线充需要做CE认证吗?RED指令?

QI协议其实是一个技术协议,和CE认证没有多大的关系。做了QI认证,还是要做CE认证的。具体的指标是RED指令。 关于如何办理QI认证和CE认证,想更多了解vvv! WPC官网认证产品页面上有更新一款mophie新的发射器,此发射器为定…

通用协议(一)

协议 协议: 协议的本质就是执行一个任务,在密码这个领域有时也称一个协议就是为了计算一个函数,即为求一个函数值,但是这任务或者说求函数值,往往不是有一方来单独计算的,而是由多个参与方合作完成的任务&…

MQTT协议

目录 MQTT协议的通信模型 MQTT消息格式* 1 固定报头 2 可变报头 3 负载 MQTT控制报文 1 CONNECT-连接服务器* 2 CONNACK-确认连接请求 3 PUBLISH-发布消息* 4 PUBACK-发布确认 5 PUBREC-发布收到 6 PUBREL-发布释放 7 PUBCOMP-发布完成 8 SUBSCRIBE-订阅主题* …

【协议_简介】

协议简介常见协议UDP协议IP协议以太网帧协议ARP协议封装分用网络通信的过程ARP协议:通过IP地址查找MAC地址 协议简介 协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这…

netty实现多协议,多编解码器

实现多协议,多编解码器详解 前言netty中handler的执行顺序和条件(重要)执行顺序入栈handler介绍出栈handler介绍入栈handler处理器顺序出栈handler处理器顺序 执行条件 编码演示客户端服务端 编解码器异常继续传递消息(扩展&#…

什么是802.1q协议

欢迎来到东用知识小课堂! 1.VLAN VLAN全称:Virtual Local Area Network(虚拟局域网),是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。在数据帧的SMAC字段后添加VLAN标签字段,基于接口、IP、MAC或协…

qi无线充电协议_无线充电Qi专利池正式上线!

展位合作,请联系:infochongdiantou.com 此前,充电头网报道了Philips飞利浦将征收无线充专利费的事件,引发行业关于无线充专利费收取的广泛讨论。1月14日,关于大家关心的无线充专利授权,业界有了最新进展&am…

MQTT - 消息队列遥测传输协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在19…

无线充qi协议c语言详解,无线充电Qi协议正向通信FSK的解调设计

白光磊 池卿华 王兆俊 江昊 史佳雯 周天 摘 要: 无线充电Qi协议提出发射器和接收器通过频率调制(FSK)方式进行正向通信,进而建立完整的通信状态控制。接收器可采用测宽法进行频率解调,然而由于电磁耦合变化、负载变化、载波占空比变化、测量量化等引起的误差,该方法无法满…

无线充qi协议c语言详解,QI无线充通信协议数据包格式解析

QI通信数据格式编码: 协议规定时钟信号的频率应该是Fclk = 2(4%)KHZ,所以每一位的传输时间约500us,如图所示 数据 0:500us的高电平,或者500us的低电平 数据 1:250us高电平+250us低电平,或者250us低电平+250us高电平 电源接收端(移动设备端)采用 11 位异步串行格式传输数…

无线充电协议Qi 转 UART

前言 最近有个网友联系我,咨询做无线充电的方案; 于是开始评估一下这个方案: 1:无线充电分为供电端无线发射(通过MOS开关斩波,使线圈的电流变化,这样线圈对外才会很强的电磁辐射)受…

无线充QI协议之TX与RX通讯方式篇

谈到无线充通讯,首先得了解下无线充电的工作原理,在描述中,提供功率的一端称为发射端,接收功率的一端称为接收端; 发射端直流电经过全桥转换为交流电,交流电通过线圈产生磁场(电生磁&#xff0…

无线充电原理与QI协议详解

一 、无线充电基本原理 无线充电的基本原理就是我们平时常用的开关电源原理,区别在于没有磁介质耦合,那么我们需要利用磁共振的方式提高耦合效率,具体方法是在发送端和接收端线圈串并联电容,是发送线圈处理谐振状态,接…

Android 项目必备(二十六)-->获取手机中所有 APP

效果图 代码 添加依赖 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30 implementation androidx.recyclerview:recyclerview:1.1.0AppInfo.java import android.graphics.drawable.Drawable;/*** created on 2020/8/3 20:22** author Scarf Gong*…

基于uni-app多平台管理系统模板uniapp-admin

uniapp-admin 2.0.0 重磅发布! 更加完善的开发指南主题定制:支持颜色主题和深色模式,页面更加美观国际化/多语言:应用内容和pages.json国际化,支持N种语言引入iconfont:海量字体图标支持引入rap2接口管理平…

AppAnnie——AppStore统计工具

前言 随着iOS开发的流行,针对iOS开发涉及的方方面面,早有一些公司提供了专门的解决方案或工具。这些解决方案或工具包括:用户行为统计工具(友盟,Flurry,Google Analytics等), App Store销售分析工具&#x…

Android 启动 应用程序详情AppInfo(AppDetail) -源码分析

在Launcher (桌面)上,长按应用图标然后点击 右上角的 应用详情 按钮, 将会进入 该 应用的详情 界面。 这个过程将会涉及 Client (Launcher App) -> App API(LauncherApps ) -> Framework API(LauncherAppsService) 下面将以…