未授权、越权类漏洞探究
字数 1298 2025-08-27 12:33:48

未授权与越权类漏洞深度探究

0x01 前言

权限类漏洞在当今Web安全领域日益重要,OWASP TOP10的变化也反映了这一趋势:注入漏洞已降至第三位,而访问控制类漏洞变得更加普遍。本文将从技术角度深入探讨未授权访问和越权访问两类漏洞的原理、挖掘方法和防御措施。

0x02 未授权访问漏洞

基本概念

未授权访问漏洞指系统功能本应经过认证才能访问,但攻击者通过技术手段绕过认证机制直接访问的情况。这类漏洞可分为两类:

  1. 组件类未授权:如Redis、MongoDB等服务的未授权访问
  2. WEB应用层未授权:如CMS系统的未授权文件上传、账号创建等

Cookie机制与认证

HTTP协议本身是无状态的,需要通过以下机制维持会话状态:

  • Cookie:存储在客户端的加密字符串,用于身份识别
  • Auth认证:如Basic Auth、Digest Auth等
  • JWT:JSON Web Token认证机制

漏洞挖掘方法

基本测试流程

  1. 记录正常认证后的操作流程和数据包
  2. 删除或修改认证因子(Cookie/Auth头/JWT等)
  3. 对比处理前后的响应差异

自动化测试工具

推荐使用Burp Suite插件burp-unauth-checker进行自动化测试,或使用Burp的Match/Replace功能:

  1. 在Burp中配置规则:
    • Match: Cookie:.*
    • Replace: Cookie: invalid_cookie=1
  2. 观察修改后的请求是否仍能获得相同响应

代码层面分析

以某OA系统为例,典型的鉴权实现:

// auth.inc.php
session_start();
if(!isset($_SESSION['userid'])) {
    header("Location: login.php");
    exit;
}

// 需要鉴权的文件
require_once('auth.inc.php');
// 后续业务逻辑...

0x03 越权访问漏洞

基本概念与分类

  1. 水平越权:相同权限用户间的越权操作
  2. 垂直越权:低权限用户执行高权限操作

漏洞挖掘方法

类型一:未使用Cookie鉴权

测试步骤

  1. 全局搜索userididcountid等参数
  2. 修改参数值为其他用户的标识
  3. 观察是否能获取/修改其他用户数据

典型案例

GET /api/userinfo?userid=123 HTTP/1.1
Host: example.com
Cookie: PHPSESSID=abc123

修改userid参数即可获取其他用户信息

类型二:使用Cookie鉴权但权限校验不严

场景一:拥有两个账号

  1. 使用管理员账号操作并抓包
  2. 替换Cookie为普通用户Cookie
  3. 重放请求观察是否成功

场景二:仅有一个普通账号

  1. 通过JS文件、Swagger等发现隐藏API
  2. 构造请求尝试越权操作
  3. 根据错误信息调整参数

典型测试流程

POST /api/updateUser HTTP/1.1
Host: example.com
Cookie: PHPSESSID=普通用户session
Content-Type: application/json

{
    "userid": "admin",
    "newRole": "superadmin"
}

高级挖掘技巧

  1. 参数FUZZ:对关键参数进行模糊测试
  2. 状态码分析:关注403/401与200的差异
  3. 业务逻辑分析:理解业务流程中的权限校验点

0x04 防御措施

通用防御方案

  1. 认证检查

    • 所有敏感操作前验证会话有效性
    • 使用框架提供的认证中间件
  2. 权限验证

    • 操作前验证用户权限是否匹配
    • 实施RBAC(基于角色的访问控制)模型

代码实现示例

// 检查是否登录
function checkLogin() {
    if(empty($_SESSION['userid'])) {
        die(json_encode(['code'=>401, 'msg'=>'未登录']));
    }
}

// 检查权限
function checkPermission($requiredRole) {
    $userRole = getUserRole($_SESSION['userid']);
    if($userRole < $requiredRole) {
        die(json_encode(['code'=>403, 'msg'=>'权限不足']));
    }
}

// 业务接口
function updateUser() {
    checkLogin();
    checkPermission(ROLE_ADMIN);
    
    $targetUserId = $_POST['userid'];
    // 额外验证:当前用户是否有权操作目标用户
    if(!canOperateUser($_SESSION['userid'], $targetUserId)) {
        die(json_encode(['code'=>403, 'msg'=>'无权操作该用户']));
    }
    
    // 安全通过后执行业务逻辑
    // ...
}

0x05 总结

权限类漏洞在实际渗透测试中非常常见,危害性往往被低估。有效的防御需要:

  1. 在所有敏感操作前实施双重验证(认证+权限)
  2. 遵循最小权限原则
  3. 对用户输入进行严格的权限归属验证
  4. 定期进行权限专项审计

通过系统化的权限控制设计和严格的代码实现,才能有效防范未授权和越权类安全风险。

未授权与越权类漏洞深度探究 0x01 前言 权限类漏洞在当今Web安全领域日益重要,OWASP TOP10的变化也反映了这一趋势:注入漏洞已降至第三位,而访问控制类漏洞变得更加普遍。本文将从技术角度深入探讨未授权访问和越权访问两类漏洞的原理、挖掘方法和防御措施。 0x02 未授权访问漏洞 基本概念 未授权访问漏洞指系统功能本应经过认证才能访问,但攻击者通过技术手段绕过认证机制直接访问的情况。这类漏洞可分为两类: 组件类未授权 :如Redis、MongoDB等服务的未授权访问 WEB应用层未授权 :如CMS系统的未授权文件上传、账号创建等 Cookie机制与认证 HTTP协议本身是无状态的,需要通过以下机制维持会话状态: Cookie :存储在客户端的加密字符串,用于身份识别 Auth认证 :如Basic Auth、Digest Auth等 JWT :JSON Web Token认证机制 漏洞挖掘方法 基本测试流程 记录正常认证后的操作流程和数据包 删除或修改认证因子(Cookie/Auth头/JWT等) 对比处理前后的响应差异 自动化测试工具 推荐使用Burp Suite插件 burp-unauth-checker 进行自动化测试,或使用Burp的Match/Replace功能: 在Burp中配置规则: Match: Cookie:.* Replace: Cookie: invalid_cookie=1 观察修改后的请求是否仍能获得相同响应 代码层面分析 以某OA系统为例,典型的鉴权实现: 0x03 越权访问漏洞 基本概念与分类 水平越权 :相同权限用户间的越权操作 垂直越权 :低权限用户执行高权限操作 漏洞挖掘方法 类型一:未使用Cookie鉴权 测试步骤 : 全局搜索 userid 、 id 、 countid 等参数 修改参数值为其他用户的标识 观察是否能获取/修改其他用户数据 典型案例 : 修改 userid 参数即可获取其他用户信息 类型二:使用Cookie鉴权但权限校验不严 场景一:拥有两个账号 使用管理员账号操作并抓包 替换Cookie为普通用户Cookie 重放请求观察是否成功 场景二:仅有一个普通账号 通过JS文件、Swagger等发现隐藏API 构造请求尝试越权操作 根据错误信息调整参数 典型测试流程 : 高级挖掘技巧 参数FUZZ :对关键参数进行模糊测试 状态码分析 :关注403/401与200的差异 业务逻辑分析 :理解业务流程中的权限校验点 0x04 防御措施 通用防御方案 认证检查 : 所有敏感操作前验证会话有效性 使用框架提供的认证中间件 权限验证 : 操作前验证用户权限是否匹配 实施RBAC(基于角色的访问控制)模型 代码实现示例 0x05 总结 权限类漏洞在实际渗透测试中非常常见,危害性往往被低估。有效的防御需要: 在所有敏感操作前实施双重验证(认证+权限) 遵循最小权限原则 对用户输入进行严格的权限归属验证 定期进行权限专项审计 通过系统化的权限控制设计和严格的代码实现,才能有效防范未授权和越权类安全风险。