Web安全 -- 逻辑漏洞讲解
字数 1266 2025-08-29 08:32:00

Web安全逻辑漏洞详解

一、逻辑漏洞概述

逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能正常处理或处理错误的安全问题。这类漏洞通常出现在以下方面:

  • 任意密码修改(无旧密码验证)
  • 越权访问
  • 密码找回功能缺陷
  • 交易支付金额篡改
  • 验证码绕过

二、常见逻辑漏洞类型及实例

1. 登录验证绕过

常见漏洞点:

  • 返回包中包含验证码
  • 返回页面hidden字段中有验证码
  • 某些登录URL不需要验证码
  • 验证码不变或只在刷新URL时才变化
  • 第一次请求验证验证码后,第二次请求可绕过验证
  • 验证码和用户名密码非一次性提交
  • 公众号/APP无验证码保护

实例:反向爆破漏洞

  1. 获取加密后的密码字符串
  2. 将密码固定为已知加密值
  3. 对账号进行爆破(如银行卡号+6位数字密码组合)

2. 密码找回漏洞

常见漏洞类型:

  1. 验证码回传(直接显示在响应中)
  2. 验证码长时间有效可爆破
  3. 可修改接收验证码的手机号
  4. 邮箱验证码可猜测
  5. 多步验证中最后一步user参数可控
  6. 可跳过步骤直接访问最终页面
  7. 本地验证可修改返回值
  8. 服务器验证空值可绕过
  9. 全0验证码可绕过
  10. Token生成可控
  11. Cookie覆盖
  12. 删除验证码校验字段可绕过

实例:网易邮箱密码重置

  1. 注册测试账号
  2. 修改绑定手机接口中的uid参数为目标账号
  3. 绑定可控手机号到目标账号
  4. 通过手机找回密码方式重置目标账号密码

3. 支付逻辑漏洞

常见漏洞类型:

  • 金额/运费可修改为任意值(包括负数)
  • 请求可重放导致多次下单
  • 并发问题(数据库操作未加锁)
  • 参数污染(请求无该参数但返回该参数)

4. 越权访问漏洞

(1) 横向越权

同级用户间的越权访问,如用户A可操作用户B的信息。

实例:51社保越权查看用户信息

  • 漏洞点:/shebao/fillinfomation接口
  • 问题:employee_id参数可遍历
  • 影响:可查看任意用户个人信息(姓名、身份证等)

(2) 纵向越权

不同权限用户间的越权访问,如普通用户获取管理员权限。

实例:湖南科创CMS通用注入

  • 注入点:login.jsp中的userName参数
  • 利用方式:使用万能密码突破权限限制
  • 影响:普通用户可获得管理员身份

三、漏洞挖掘方法论

  1. 全面测试所有功能点:特别是涉及权限、验证、支付的环节
  2. 关注参数传递:检查所有可修改的参数
  3. 分析业务流程:寻找可跳过的步骤或不严谨的验证
  4. 尝试边界条件:如空值、特殊字符、并发请求等
  5. 逆向思维:思考开发者可能忽略的异常流程

四、防御建议

  1. 权限控制

    • 严格区分用户权限
    • 每次操作都验证用户身份和权限
    • 避免直接使用前端传入的参数作为权限判断依据
  2. 验证机制

    • 验证码一次性有效
    • 关键操作多因素验证
    • 服务端严格校验所有输入
  3. 业务流程安全

    • 完整记录操作日志
    • 关键操作添加二次确认
    • 支付类操作添加金额校验和防重放机制
  4. 代码安全

    • 避免硬编码敏感信息
    • 使用预编译语句防止SQL注入
    • 对用户输入进行严格过滤和转义

逻辑漏洞的防御核心在于"不信任原则" - 不信任任何来自客户端的输入,对所有操作进行完整的权限和有效性验证。

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注入 对用户输入进行严格过滤和转义 逻辑漏洞的防御核心在于"不信任原则" - 不信任任何来自客户端的输入,对所有操作进行完整的权限和有效性验证。