当前位置: 首页 > news >正文

DVWA从入门到精通(十六):Authorisation Bypass(授权绕过)

摘要:本文是《DVWA从入门到精通》系列的第十六篇,带你全面掌握Authorisation Bypass(授权绕过)模块的攻防全流程。从认证与授权的核心区别出发,逐步讲解Low、Medium、High三个级别的攻击手法与源码分析,并深入探讨Impossible级别的终极防御方案。文章包含直接对象引用(IDOR)、垂直权限提升、水平权限提升、API端点未授权访问、Burp Suite数据包篡改等高阶技术,以及严格的访问控制检查、最小权限原则、统一的权限验证中间件等企业级防御策略,让你真正做到“知其然更知其所以然”。


一、什么是授权绕过?

1.1 认证(Authentication)vs 授权(Authorization)

在理解授权绕过之前,必须先分清两个极易混淆的核心概念:

概念英文含义生活类比
认证Authentication“你是谁?”——验证用户身份出示身份证,证明你是你本人
授权Authorization“你能做什么?”——验证用户权限根据你的身份,决定你能进入哪些区域

用一个生活化的例子来理解

想象你去一栋写字楼。在一楼大厅,你向保安出示了工牌(认证——证明你是公司员工)。保安确认后让你进入大楼。但是,你的工牌权限只能让你进入1-10楼的办公区,而11楼是财务部,需要更高权限。如果你没有财务部的授权却偷偷溜进了11楼,这就是授权绕过

认证解决了“你是谁”的问题,授权解决了“你能做什么”的问题。认证通过不代表授权正确——一个用户即使成功登录了系统,也可能通过某些手段访问到超出其权限范围的资源。

从技术角度来看

授权绕过(Authorisation Bypass)是一种严重的安全漏洞,攻击者通过利用系统的漏洞或错误配置,绕过正常的访问控制机制,获得未经授权的访问权限。这种漏洞可能导致敏感信息泄露、数据篡改、系统破坏等严重后果。

1.2 授权绕过的常见类型

授权绕过漏洞通常表现为以下几种形式:

类型说明示例
垂直权限提升低权限用户获取高权限功能普通用户访问管理员后台
水平权限提升用户访问同级其他用户的数据用户A查看用户B的订单信息
直接对象引用(IDOR)通过修改URL参数访问未授权资源?id=1改为?id=2查看他人资料
功能级访问控制缺失隐藏但未禁用的管理功能可被直接访问直接输入管理页面的URL
API端点未授权API接口缺乏权限验证直接调用管理API修改数据

1.3 模块目标

DVWA的Authorisation Bypass模块模拟了一个用户管理系统

  • 正常情况:只有管理员(admin)可以访问用户管理页面,查看和修改所有用户的信息

  • 攻击目标:作为非管理员用户(如gordonb),实现用户管理的功能

  • 核心挑战:找到系统中授权检查的漏洞,绕过权限限制


二、准备工作

2.1 靶场环境

确保DVWA已部署并正常运行:

  • 访问地址:http://你的服务器IP/dvwa/login.php

  • 准备两个测试账号:

    • 管理员账号admin/password

    • 普通用户账号gordonb/abc123

2.2 必备工具

工具用途
浏览器(Chrome/Firefox)访问靶场,观察菜单变化
Burp Suite抓包分析、修改请求参数(Medium/High级别必需)

2.3 基础知识储备

  • 理解HTTP请求方法(GET、POST)

  • 了解Cookie和Session的基本概念

  • 熟悉浏览器的开发者工具


三、Low级别:菜单隐藏≠权限控制

3.1 安全级别设置

将DVWA Security设置为Low级别,然后以普通用户gordonb登录DVWA。

3.2 观察变化:菜单消失了!

使用gordonb(密码abc123)登录后,观察左侧菜单栏——“Authorisation Bypass”这个选项消失了

这说明系统在前端隐藏了管理功能的入口。但是——前端隐藏 ≠ 后端禁止

3.3 核心漏洞:URL直接访问

虽然菜单被隐藏了,但每个漏洞模块实际上对应一个固定的子路径。管理员能访问的页面路径是:

http://靶机IP/vulnerabilities/authbypass/

普通用户虽然看不到菜单入口,但只要知道这个路径,就可以直接在浏览器地址栏中输入并访问

攻击步骤

  • 以普通用户gordonb登录DVWA

  • 在浏览器地址栏直接输入:

    http://靶机IP/vulnerabilities/authbypass/
  • 页面成功加载,显示用户管理列表——普通用户成功访问了管理员功能

3.4 更深层的漏洞:API接口也未授权

除了页面本身,Low级别中用于获取用户数据的API接口也同样没有任何权限保护

访问以下路径同样可以获取所有用户的数据:

http://靶机IP/vulnerabilities/authbypass/get_user_data.php

页面直接返回了数据库中所有用户的JSON数据。

3.5 源码分析

查看Low级别的核心代码:

<?php /* Nothing to see here for this vulnerability, have a look instead at the dvwaHtmlEcho function in: * dvwa/includes/dvwaPage.inc.php */ ?>

这段代码意味着什么?

Low级别的页面源码中没有任何授权检查的代码。页面本身不包含任何权限验证逻辑——任何人都可以访问

访问控制仅依赖于前端菜单的显示/隐藏,而后端完全没有实施任何权限检查。这就是典型的功能级访问控制缺失漏洞。

3.6 Low级别总结

缺陷说明
仅前端隐藏菜单菜单隐藏不等于权限控制
无后端授权检查页面源码中没有任何权限验证
API接口未授权数据接口同样可被直接访问
URL可预测模块路径有固定规律,可被猜测

四、Medium级别:页面拦住≠接口拦住

4.1 安全级别设置

将DVWA Security切换为Medium级别,仍以普通用户gordonb登录。

4.2 观察变化:页面进不去了

在Medium级别下,尝试直接访问/vulnerabilities/authbypass/

http://靶机IP/vulnerabilities/authbypass/

页面显示“Unauthorised”(未经授权)——这次被拦住了!

4.3 源码分析:页面级别的权限检查

查看Medium级别的核心代码:

<?php /* Only the admin user is allowed to access this page. Have a look at these two files for possible vulnerabilities: * vulnerabilities/authbypass/get_user_data.php * vulnerabilities/authbypass/change_user_details.php */ if (dvwaCurrentUser() != "admin") { print "Unauthorised"; http_response_code(403); exit; } ?>

Medium级别的变化

改进说明
增加了管理员身份检查只有admin用户才能访问主页面
返回403状态码未授权访问被明确拒绝
提示查看两个文件代码注释中暗示了可能的突破口

4.4 关键发现:API接口仍然未授权!

Medium级别的源码注释中特别提到了两个文件:

vulnerabilities/authbypass/get_user_data.php vulnerabilities/authbypass/change_user_details.php

攻击思路

虽然主页面index.php做了权限检查,但数据获取接口get_user_data.php和修改接口change_user_details.php可能没有同样的检查

攻击步骤

第一步:直接访问数据接口

http://靶机IP/vulnerabilities/authbypass/get_user_data.php

页面成功返回了所有用户的JSON数据!

第二步:Burp 构造合法 POST 请求修改用户资料

打开BurpSuite,开启代理拦截

浏览器开启代理,访问修改用户界面

http://靶机IP/vulnerabilities/authbypass/change_user_details.php

修改请求方法为post

通过get获取的用户数据,构造合法 POST 请求修改用户资料

{"id":"3","first_name":"YSYX","surname":"YYYY"} //修改id为3的用户的姓和名

点击放行,验证修改成功

4.5 攻击原理分析

Medium级别的漏洞本质是:授权检查只覆盖了主页面,但没有覆盖所有相关的API接口

当开发人员必须在复杂的系统中构建授权矩阵时,他们很容易忽略在每个地方添加正确的检查,尤其是那些无法通过浏览器直接访问的地方,例如API调用。

4.6 Medium级别总结

改进局限性
主页面增加了管理员检查API接口没有同样的检查
返回403禁止访问攻击者可绕过页面直接调用接口
比Low级别有所提升授权检查覆盖不完整

五、High级别:GET拦住≠POST拦住

5.1 安全级别设置

将DVWA Security切换为High级别,仍以普通用户gordonb登录。

5.2 观察变化:GET请求被拦了

在High级别下,尝试直接访问get_user_data.php

http://靶机IP/vulnerabilities/authbypass/get_user_data.php

页面显示“Unauthorised”——GET请求被拦截了。

5.3 源码分析

查看High级别的核心代码:

<?php /* Only the admin user is allowed to access this page. Have a look at this file for possible vulnerabilities: * vulnerabilities/authbypass/change_user_details.php */ if (dvwaCurrentUser() != "admin") { print "Unauthorised"; http_response_code(403); exit; } ?>

High级别的变化

改进说明
get_user_data.php也加了检查数据获取接口被保护了
仅提示change_user_details.php暗示修改接口可能是突破口

5.4 攻击方法:POST请求绕过

虽然GET请求被拦截了,但change_user_details.php接口可能接受POST请求,而POST请求的权限检查可能与GET不同。

攻击步骤

第一步:使用Burp Suite抓包

配置好Burp Suite代理,准备拦截和修改请求。

第二步:构造POST请求

直接向change_user_details.php发送POST请求,尝试修改用户数据:

第三步:观察响应

服务器成功处理了请求,用户信息被修改!

5.5 攻击原理分析

High级别的漏洞本质与Medium级别类似,但更隐蔽:GET请求被拦截了,但POST请求没有被拦截

开发人员可能只检查了$_GET请求的权限,而忽略了$_POST请求同样需要进行授权验证。

5.6 High级别总结

改进局限性
get_user_data.php增加了检查change_user_details.php的POST请求未检查
GET请求被拦截POST请求可以绕过
覆盖面更广请求方法层面的检查不完整

六、Impossible级别:终极防御方案

6.1 安全级别设置

将DVWA Security切换为Impossible级别。

6.2 源码分析

查看Impossible级别的核心代码:

<?php /* Only the admin user is allowed to access this page */ if (dvwaCurrentUser() != "admin") { print "Unauthorised"; http_response_code(403); exit; } ?>

6.3 Impossible级别的防御机制

乍一看,Impossible级别的代码与Medium/High级别看起来几乎一样——都是检查当前用户是否为admin

但关键在于

  • 所有入口都被保护:不仅是主页面,所有相关的API接口、文件都统一进行了权限检查

  • 统一的权限验证机制:不存在“漏网之鱼”

  • 没有可绕过的接口:所有可能被直接访问的端点都实施了相同的检查

6.4 安全启示

Impossible级别传达了一个重要的安全原则:

“没有绝对安全的防护,但是一定要做好安全防护措施”

对于授权控制来说,这意味着:

原则说明
统一入口所有功能点使用统一的权限验证机制
全面覆盖不遗漏任何API接口、文件或请求方法
服务端强制不依赖前端隐藏,所有检查在服务端完成
最小权限只授予完成任务所需的最低权限

6.5 为什么Impossible级别无法被绕过?

攻击方式Impossible级别的防护攻击者能否达成
URL直接访问所有页面统一权限检查❌ 被拦截
API接口直接调用所有接口统一权限检查❌ 被拦截
POST请求绕过所有请求方法统一检查❌ 被拦截
前端菜单隐藏不依赖前端控制❌ 后端强制检查

统一、全面、强制的权限检查,使得授权绕过攻击在Impossible级别下完全不可行


七、防御授权绕过的最佳实践

通过DVWA四个级别的对比,我们可以总结出防御授权绕过的最佳实践

7.1 必须实施的防御措施

措施说明优先级
统一的访问控制机制所有页面和API使用统一的权限验证中间件⭐⭐⭐⭐⭐
服务端强制检查不依赖前端隐藏,所有检查在服务端完成⭐⭐⭐⭐⭐
覆盖所有请求方法GET、POST、PUT、DELETE等全部检查⭐⭐⭐⭐⭐
覆盖所有端点页面、API接口、静态资源等全部覆盖⭐⭐⭐⭐⭐

7.2 推荐的辅助措施

措施说明优先级
最小权限原则只授予用户完成任务所需的最低权限⭐⭐⭐⭐⭐
基于角色的访问控制(RBAC)明确定义角色和权限矩阵⭐⭐⭐⭐
参数验证和加密对URL参数和请求参数进行严格验证⭐⭐⭐⭐
日志和监控记录所有访问和修改操作⭐⭐⭐

7.3 常见误区

在实际开发中,以下做法不能有效防御授权绕过:

  • 仅在前端隐藏菜单/按钮:攻击者可以直接输入URL访问(如Low级别)

  • 仅保护主页面:API接口可能被直接调用(如Medium级别)

  • 仅拦截GET请求:POST请求可能被绕过(如High级别)

  • 分散的权限检查:不同功能使用不同的检查逻辑,容易遗漏


八、授权绕过的实战检测思路

在实际的渗透测试中,如何快速发现授权绕过漏洞?

8.1 检测步骤

识别功能角色:确定系统中存在哪些角色(管理员、普通用户、访客等)

映射功能点:列出所有页面、API接口和功能

低权限测试:使用低权限账号访问高权限功能

直接URL访问:尝试直接输入管理页面的URL

API接口测试:尝试直接调用管理API

请求方法变换:尝试用不同的HTTP方法(GET、POST、PUT等)

参数篡改:修改请求中的用户ID等参数

8.2 常见检测手法

检测手法说明DVWA对应级别
直接URL访问输入管理功能路径Low
API接口调用直接访问数据接口Medium
请求方法变换GET改POSTHigh
参数遍历修改ID参数水平权限提升
Cookie篡改修改用户标识会话劫持

8.3 关键测试点

在实际测试中,以下位置最容易出现授权绕过:

  • 隐藏的管理页面/admin/manage/system

  • API接口/api/users/api/admin

  • 文件上传接口:可能被用于上传WebShell

  • 用户资料修改接口:可能修改其他用户的信息

  • 配置修改接口:可能修改系统配置


九、总结

本文系统学习并实战复现了 Web 授权绕过漏洞的原理、分类与防御方案。本章首先明确了认证与授权的核心区别:认证用于校验用户身份、解决 “你是谁” 的问题,授权用于管控用户权限、解决 “你能做什么” 的问题;同时梳理了授权绕过的常见漏洞类型,包含垂直权限提升、水平权限提升、IDOR 未授权访问、功能级访问控制缺失、API 接口未授权等主流场景。随后逐级完成 DVWA 授权绕过模块的攻防实战:Low 级别仅在前端隐藏管理菜单,后端未部署任何权限校验,攻击者可直接通过访问 URL 绕过前端限制进入管理页面;Medium 级别虽对主页面增加了管理员权限校验,但后端get_user_data.phpchange_user_details.php等核心 API 接口缺失权限判断,存在接口未授权访问漏洞;High 级别完善了部分接口防护,对get_user_data.php请求做了权限校验,但仍存在防护遗漏,change_user_details.php的 POST 请求依旧可以绕过权限限制;Impossible 级别构建了完整的授权防御体系,对所有页面、所有后端接口、全部请求方法统一强制校验权限,全方位杜绝授权绕过风险。最后本章总结了授权漏洞的核心防御最佳实践,包括搭建统一访问控制机制、服务端强制校验权限、全覆盖所有业务端点与请求方法、严格遵循最小权限原则等。授权绕过属于典型的 Web 业务逻辑漏洞,并非代码注入类缺陷,核心成因是开发设计疏漏导致权限校验缺失或不完整。通过本模块的分级学习,我们不仅掌握了授权绕过漏洞的挖掘与利用方法,更建立了系统化的权限设计思维。在实际生产环境中,依托统一权限校验中间件、全覆盖接口端点校验、落实最小权限原则的组合防御方案,能够从架构层面彻底规避授权绕过漏洞,保障 Web 业务访问安全。


重要声明:本教程及文中所有操作仅限于合法授权的安全学习与研究。作者及发布平台不承担因不当使用本教程所引发的任何直接或间接法律责任。请务必遵守中华人民共和国网络安全相关法律法规。

如果这篇文章帮你解决了实操上的困惑,别忘记点击点赞、分享,也可以留言告诉我你遇到的其它问题,我会尽快回复。你的关注是我坚持原创和细节共享的力量来源,谢谢大家。

http://www.jsqmd.com/news/1156030/

相关文章:

  • openEuler-bootstrap安全指南:构建安全可靠的引导包
  • 杭州卖黄金别踩雷!盘点回收行业四大坑与辨别靠谱商家方法 - 奢侈品回收评测
  • 瑞德克斯平台:从信息披露习惯切入的框架复盘
  • 2026图片去背景工具实操指南:免费在线、电脑软件、手机,APP,全流程教学
  • 中山区vs高新园vs金州横向测评:2026大连商圈名表回收价差真相,本地老店口碑对比 - 小蝶回收测评
  • 企业部署Agent的硬件环境最低要求是什么?从算力基准到生产级工程化落地指南
  • 2026南京包包回收权威龙头测评|本地连锁标杆门店综合实力横评 - 小蝶回收测评
  • lazy.vim:Neovim现代插件加载引擎原理与实战
  • 别再盲目试了!2026实测好用的AI论文网站|避坑版
  • 终极iOS漫画阅读解决方案:如何使用Aidoku实现免费无广告阅读体验
  • 比较好的AI-Geo厂家哪家专业 - 招财兔数字员工
  • 2026图片去背景工具实操指南:免费无水印在线工具、手机,APP,与电脑专业软件全教程
  • 生产企业质量管理怎么做?—— 一套完整的落地实践指南
  • JVM逃逸分析与去优化测试:MopFuzzer高级应用指南
  • STM32 电子钟 2 种闹钟实现对比:软件轮询 vs 硬件 RTC Alarm 中断
  • 万国官方售后服务中心电话和热线实地考察报告多信源验证(2026年7月最新) - 万国中国官方服务中心
  • AI Agent开发实战:从零构建智能体,掌握LangChain核心组件与应用
  • 亲测西安靠谱手表回收门店,百达翡丽 24 小时极速打款变现 - 讯息早知道
  • 大数据实习,可以“偷学”什么?
  • 2026南京钻石回收怎么选?本地五家正规钻石回收机构实测对比指南 - 每日生活报
  • 重庆主城九区分区测评,2026 重庆黄金回收全域优质门店汇总推荐 - 奢侈品回收评测
  • JavaWeb 内存马查杀实战:Arthas 3步定位与shell-analyzer 1键清除
  • 静态路由 vs RIPv2 对比配置:4路由器校园网场景下的 3 项关键性能差异分析
  • Office一键部署:OTP+XML配置实现标准化安装与KMS激活
  • 本地AI智能体Hermes Agent:从安装部署到自动化实战指南
  • NBM7100A芯片与STM32的低功耗电源管理方案
  • 5. 元素内定义的变量,如果识别不到,可以用父亲元素id.变量名的方式,这种方式有可能可以调用
  • Kokoro:本地、CPU 友好,实现多语言高质量文本转语音!
  • ISC DHCP快速入门:10分钟搭建企业级DHCP服务器
  • MatAnyone:无需绿幕!AI视频抠像神器,5分钟实现专业级背景替换