Web 渗透测试:未授权与越权漏洞全流程挖掘思路
前言
在Web安全漏洞中,未授权访问与越权访问属于权限控制类高频高危漏洞,几乎贯穿业务系统前后端开发全流程。这类漏洞本质成因是后端未做好身份校验、权限边界校验,攻击者可绕过登录、越权查看/篡改他人数据,轻则泄露用户隐私,重则导致业务数据被批量篡改、系统后台沦陷。
本文结合渗透实战思维导图思路,完整梳理两类漏洞的原理、探测方法、工具使用、挖掘技巧与防御方案,适合渗透测试入门学习、红队日常打点、开发安全自查使用。
一、漏洞基础概念区分
1. 未授权访问
核心定义:无需登录、无需携带合法身份凭证,就能直接访问本需要权限才能进入的页面、接口、后台功能。
简单理解:本该上锁的门完全没锁,任何人可以直接推门进入。
按照前后端交互形态分为两类:
- 前端未授权:目标为HTML页面、静态页面、管理后台可视化页面
- 后端未授权:目标为JSON数据接口、后台API、数据查询接口
2. 越权漏洞
核心定义:攻击者拥有合法账号登录权限,但权限范围被非法扩大,横向查看其他同级别用户数据(水平越权)、纵向获取管理员权限(垂直越权)。
简单理解:你手里有自家房门钥匙,却能用这把钥匙打开邻居家房门、甚至物业总控房门。
同样划分为前端参数可控越权、后端接口逻辑越权两大挖掘方向。
二、未授权访问漏洞完整挖掘方法论
(一)前端未授权(HTML页面类)
针对网页、后台管理页面、功能页面做未授权绕过探测,三大核心手段:
1. 目录爆破FUZZ
核心思路:在不登录的前提下,暴力枚举网站常见后台路径、管理页面路径,直接访问地址看是否可正常打开。
推荐工具:dirsearch
常用爆破字典:后台路径字典、通用后台地址、编辑器备份文件、git泄露路径、phpinfo探针路径等。
实操要点:目标站点开启缓存、404页面统一跳转时,可通过响应长度、状态码差异化筛选有效路径。
2. 抓包分析返回包特征绕过
登录状态下抓取正常业务数据包,观察响应返回关键字段:
- 响应体包含
false、500、deny、forbidden、unauth等拒绝标识; - 使用Burp Suite批量替换数据包关键参数、Cookie值、Token值,重放请求判断是否可绕过鉴权直接获取页面内容。
3. 前端页面文案线索突破
页面明文提示「禁止访问」「不允许操作」「需要付费解锁」「权限不足」时,大概率只是前端JS做了页面隐藏拦截,后端未做二次校验。
常见绕过方式:
- F12开发者工具删除前端限制JS代码;
- 直接在地址栏输入功能对应接口路由,跳过前端页面校验;
- 抓包删除前端校验参数后重放请求。
(二)后端未授权(JSON接口类)
这类漏洞不会直接展示页面,而是接口直接返回业务JSON数据,也是接口测试中最容易遗漏的漏洞点。
1. 路由与接口信息搜集
接口来源主要有两处:
- 爬取前端JS文件:网站打包后的js、chunk文件内会明文写死接口URL、后台bash管理接口、增删改查API路径;
- 历史数据包溯源:浏览器Network历史请求、Burp历史记录、爬虫抓取的过往流量包,从中提取后台隐藏接口。
2. 功能点定向FUZZ
针对已发现的同目录接口做批量遍历:
例如已知接口/api/user/info,枚举同路径下/api/user/list、/api/user/delete、/api/user/admin等衍生接口,无凭证直接访问测试未授权。
3. 多维度字典爆破
枚举对象分为三类,批量发包测试:
- 请求参数:GET/POST参数名爆破;
- 参数值:ID、页码、类型值枚举;
- 接口路由:全路径API地址字典枚举。
三、越权漏洞分层挖掘实战思路
(一)前端越权
漏洞根源:页面数据由URL参数直接控制,后端仅简单读取参数,未校验该参数归属当前登录用户。
- 直接修改URL参数值
典型场景:个人订单页面地址order.php?id=1001,将id改为1002、1003,即可查看其他用户订单,属于最经典水平越权。 - FUZZ爆破URL参数
使用工具ffuf、arjun自动化枚举URL参数、参数值,批量遍历ID、uid、gid、userid等身份标识,快速批量命中越权数据接口。
(二)后端越权(核心高危)
后端越权校验逻辑更深,需要先定位鉴权凭证位置,再针对性测试。
步骤1:定位鉴权字段携带位置
先确认系统用哪种方式校验用户身份:
- GET请求URL参数携带token、uid;
- POST表单请求体携带账号凭证;
- Cookie内存储Session、身份标识;
- JSON请求体携带Authorization、token、user_id等鉴权字段。
步骤2:基于增删改查四大功能点测试越权
场景1:请求完全不存在鉴权字段
直接手动添加鉴权字段,例如原数据包无userid参数,新增userid=目标用户编号,查看是否可操作他人数据。
场景2:数据包存在鉴权字段但参数为空
例如请求携带uid=空值,手动填入其他用户UID、管理员UID,后端未做非空校验与归属校验,触发垂直/水平越权。
场景3:已有合法鉴权值,直接替换为他人凭证
拿自己账号的Token、Session替换为其他用户凭证,观察接口返回数据,属于典型会话绑定缺失越权。
四、实战渗透测试标准执行流程
- 信息收集:子域名、目录结构、JS文件、爬虫抓取全站接口;
- 未授权探测:dirsearch扫目录、批量无Cookie重放所有接口;
- 登录低权限账号,抓取全量业务数据包;
- 前端层面:修改URL参数、F12篡改页面限制、ffuf爆破参数;
- 后端层面:逐个接口修改uid/token/id,新增鉴权参数、清空鉴权参数测试;
- 区分漏洞类型:判定为未授权 / 水平越权 / 垂直越权;
- 复现漏洞、截图留存证据,整理漏洞详情与修复建议。
五、漏洞成因与安全防御方案
1. 核心漏洞成因
- 开发依赖前端做权限控制,后端无接口鉴权逻辑;
- 接口复用过度,内部后台接口对外开放无访问白名单;
- 增删改查接口只校验登录状态,不校验数据归属关系;
- 身份凭证(Session、Token)未绑定用户设备与用户唯一ID;
- 测试环节缺少越权、未授权专项安全用例。
2. 后端开发防御规范
- 统一鉴权中间件:所有后台接口强制走身份校验拦截器,未携带合法凭证直接拦截;
- 数据行级权限校验:查询/修改数据时,SQL语句强制拼接
where user_id = 当前登录用户ID; - 后台管理接口配置内网白名单,公网无法直接访问管理路由;
- 前端隐藏限制仅做体验优化,禁止作为唯一安全校验手段;
- 定期扫描历史接口、下线废弃无用API,减少攻击面;
- 上线前加入安全测试用例,专项测试未授权与越权场景。
六、工具清单汇总
| 测试方向 | 推荐工具 | 用途 |
|---|---|---|
| 目录未授权扫描 | dirsearch | 网站后台路径、目录爆破 |
| URL参数FUZZ越权 | ffuf、arjun | 自动化枚举参数与参数值 |
| 数据包批量测试 | Burp Suite | 抓包改包、批量重放、自动替换参数 |
| JS接口提取 | LinkFinder、JSFinder | 从JS文件提取隐藏API路由 |
结语
未授权与越权属于入门门槛较低、漏洞产出率极高的权限类漏洞,不需要复杂漏洞利用链,仅依靠信息搜集+数据包修改即可大量发现问题。
渗透测试中建议养成固定思维:能不登录就访问的页面先试一遍未授权;登录低权限账号后,所有参数能改则改、能删则删、能加则加,按照本文思维导图思路系统化遍历测试,就能覆盖绝大多数权限类安全风险。