Web安全 -- 逻辑漏洞讲解
字数 1266 2025-08-29 08:32:00
Web安全逻辑漏洞详解
一、逻辑漏洞概述
逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能正常处理或处理错误的安全问题。这类漏洞通常出现在以下方面:
- 任意密码修改(无旧密码验证)
- 越权访问
- 密码找回功能缺陷
- 交易支付金额篡改
- 验证码绕过
二、常见逻辑漏洞类型及实例
1. 登录验证绕过
常见漏洞点:
- 返回包中包含验证码
- 返回页面hidden字段中有验证码
- 某些登录URL不需要验证码
- 验证码不变或只在刷新URL时才变化
- 第一次请求验证验证码后,第二次请求可绕过验证
- 验证码和用户名密码非一次性提交
- 公众号/APP无验证码保护
实例:反向爆破漏洞
- 获取加密后的密码字符串
- 将密码固定为已知加密值
- 对账号进行爆破(如银行卡号+6位数字密码组合)
2. 密码找回漏洞
常见漏洞类型:
- 验证码回传(直接显示在响应中)
- 验证码长时间有效可爆破
- 可修改接收验证码的手机号
- 邮箱验证码可猜测
- 多步验证中最后一步user参数可控
- 可跳过步骤直接访问最终页面
- 本地验证可修改返回值
- 服务器验证空值可绕过
- 全0验证码可绕过
- Token生成可控
- Cookie覆盖
- 删除验证码校验字段可绕过
实例:网易邮箱密码重置
- 注册测试账号
- 修改绑定手机接口中的uid参数为目标账号
- 绑定可控手机号到目标账号
- 通过手机找回密码方式重置目标账号密码
3. 支付逻辑漏洞
常见漏洞类型:
- 金额/运费可修改为任意值(包括负数)
- 请求可重放导致多次下单
- 并发问题(数据库操作未加锁)
- 参数污染(请求无该参数但返回该参数)
4. 越权访问漏洞
(1) 横向越权
同级用户间的越权访问,如用户A可操作用户B的信息。
实例:51社保越权查看用户信息
- 漏洞点:
/shebao/fillinfomation接口 - 问题:employee_id参数可遍历
- 影响:可查看任意用户个人信息(姓名、身份证等)
(2) 纵向越权
不同权限用户间的越权访问,如普通用户获取管理员权限。
实例:湖南科创CMS通用注入
- 注入点:login.jsp中的userName参数
- 利用方式:使用万能密码突破权限限制
- 影响:普通用户可获得管理员身份
三、漏洞挖掘方法论
- 全面测试所有功能点:特别是涉及权限、验证、支付的环节
- 关注参数传递:检查所有可修改的参数
- 分析业务流程:寻找可跳过的步骤或不严谨的验证
- 尝试边界条件:如空值、特殊字符、并发请求等
- 逆向思维:思考开发者可能忽略的异常流程
四、防御建议
-
权限控制:
- 严格区分用户权限
- 每次操作都验证用户身份和权限
- 避免直接使用前端传入的参数作为权限判断依据
-
验证机制:
- 验证码一次性有效
- 关键操作多因素验证
- 服务端严格校验所有输入
-
业务流程安全:
- 完整记录操作日志
- 关键操作添加二次确认
- 支付类操作添加金额校验和防重放机制
-
代码安全:
- 避免硬编码敏感信息
- 使用预编译语句防止SQL注入
- 对用户输入进行严格过滤和转义
逻辑漏洞的防御核心在于"不信任原则" - 不信任任何来自客户端的输入,对所有操作进行完整的权限和有效性验证。