Web安全 -- 逻辑漏洞讲解
字数 1626 2025-08-18 11:37:02

Web安全逻辑漏洞详解

一、逻辑漏洞概述

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

  • 任意密码修改(无旧密码验证)
  • 越权访问
  • 密码找回功能
  • 交易支付金额控制

二、登录验证漏洞

1. 验证码绕过方式

  • 返回包中包含验证码:验证码在响应中直接暴露
  • 隐藏字段包含验证码:页面hidden字段中存储验证码
  • 部分URL无需验证码:某些登录接口未实施验证码验证
  • 验证码不变:仅在刷新URL时变化,服务端未完整验证
  • 验证码一次性验证:第一次请求验证后,第二次请求不再验证
  • 拦截刷新请求:拦截验证码刷新请求,使用未失效的旧验证码
  • 验证码与凭证分离提交:验证码与用户名密码非同时提交
  • 无验证码场景:公众号、APP等平台可能缺少验证码机制

2. 反向爆破漏洞实例

  1. 获取加密后的密码固定值(如168168加密后字符串)
  2. 固定密码值,对其他用户信息进行爆破
  3. 利用系统验证可绕过的漏洞,针对银行账号等6位数字密码进行爆破
  4. 使用常见弱口令加密后进行测试

三、密码找回漏洞

1. 常见漏洞类型

  • 验证码回传:验证码直接返回给客户端
  • 验证码时效过长:可进行爆破攻击(可去除重复数字的字典)
  • 修改发送目标:将验证手机号修改为攻击者可控号码
  • 邮箱验证可猜测:邮箱验证码可预测或枚举
  • 多步骤绕过:正常流程到某步骤后修改关键参数(如user参数)
  • 直接跳步访问:直接访问密码找回的最终页面
  • 本地验证绕过:修改客户端返回的验证结果
  • 空验证码绕过:服务端验证空值时可通过
  • 全0验证码绕过:某些系统接受全0验证码
  • 可控Token生成:Token生成机制存在缺陷
  • Cookie覆盖:通过修改Cookie绕过验证
  • 删除验证码校验:直接删除请求中的验证码字段

2. 网易邮箱密码重置实例

  1. 注册126测试账号
  2. 观察手机绑定流程中的uid参数
  3. 修改uid为目标邮箱账号
  4. 绑定攻击者可控手机号
  5. 通过手机方式找回密码
  6. 漏洞接口:http://security.mail.126.com/mobileserv/mbp.do?uid=[目标账号]&backurl=

四、支付逻辑漏洞

1. 常见漏洞类型

  • 金额/运费修改:修改bxprice等参数为负数或任意值
  • 请求重放:多次重复提交订单
  • 并发问题:数据库操作未加锁导致并发问题
  • 参数污染:请求中不存在的参数被返回并可污染结果
  • 返回值篡改:修改服务端返回的关键数据

五、越权访问漏洞

1. 横向越权

权限平级用户间的越权访问,通常由于未验证操作对象所属权。

51社保越权实例

  • 漏洞点:/shebao/fillinfomation?insurance_location_id=6&employee_id=203§66§&person_id=*****&action=zr01
  • 问题:employee_id参数可遍历,导致可查看任意用户个人信息
  • 原因:参数未过滤,缺乏权限验证

2. 纵向越权

低权限用户访问高权限功能。

湖南科创CMS注入实例

  • 注入点:login.jsp中的userName字段
  • 利用方式:使用万能密码突破权限限制
  • 示例Payload:userName=admin'
  • 漏洞表现:普通用户可获得管理员权限

六、防御建议

  1. 验证码安全

    • 服务端生成和验证
    • 一次性有效
    • 与主请求绑定
    • 适当复杂度
  2. 密码找回

    • 多因素验证
    • 完整流程验证
    • 关键步骤不可跳转
    • 绑定信息不可篡改
  3. 支付安全

    • 关键参数服务端校验
    • 防重放机制
    • 金额不可为负
    • 并发控制
  4. 权限控制

    • 严格验证操作对象所属权
    • 基于角色的访问控制
    • 最小权限原则
    • 敏感操作日志记录
  5. 输入验证

    • 所有输入参数过滤
    • 使用预编译语句防SQL注入
    • 关键操作二次验证

通过全面理解这些逻辑漏洞类型和实例,安全人员可以更好地识别和防范Web应用中的逻辑缺陷,提升系统整体安全性。

Web安全逻辑漏洞详解 一、逻辑漏洞概述 逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能正常处理或处理错误的安全问题。这类漏洞通常出现在以下场景: 任意密码修改(无旧密码验证) 越权访问 密码找回功能 交易支付金额控制 二、登录验证漏洞 1. 验证码绕过方式 返回包中包含验证码 :验证码在响应中直接暴露 隐藏字段包含验证码 :页面hidden字段中存储验证码 部分URL无需验证码 :某些登录接口未实施验证码验证 验证码不变 :仅在刷新URL时变化,服务端未完整验证 验证码一次性验证 :第一次请求验证后,第二次请求不再验证 拦截刷新请求 :拦截验证码刷新请求,使用未失效的旧验证码 验证码与凭证分离提交 :验证码与用户名密码非同时提交 无验证码场景 :公众号、APP等平台可能缺少验证码机制 2. 反向爆破漏洞实例 获取加密后的密码固定值(如168168加密后字符串) 固定密码值,对其他用户信息进行爆破 利用系统验证可绕过的漏洞,针对银行账号等6位数字密码进行爆破 使用常见弱口令加密后进行测试 三、密码找回漏洞 1. 常见漏洞类型 验证码回传 :验证码直接返回给客户端 验证码时效过长 :可进行爆破攻击(可去除重复数字的字典) 修改发送目标 :将验证手机号修改为攻击者可控号码 邮箱验证可猜测 :邮箱验证码可预测或枚举 多步骤绕过 :正常流程到某步骤后修改关键参数(如user参数) 直接跳步访问 :直接访问密码找回的最终页面 本地验证绕过 :修改客户端返回的验证结果 空验证码绕过 :服务端验证空值时可通过 全0验证码绕过 :某些系统接受全0验证码 可控Token生成 :Token生成机制存在缺陷 Cookie覆盖 :通过修改Cookie绕过验证 删除验证码校验 :直接删除请求中的验证码字段 2. 网易邮箱密码重置实例 注册126测试账号 观察手机绑定流程中的uid参数 修改uid为目标邮箱账号 绑定攻击者可控手机号 通过手机方式找回密码 漏洞接口: http://security.mail.126.com/mobileserv/mbp.do?uid=[目标账号]&backurl= 四、支付逻辑漏洞 1. 常见漏洞类型 金额/运费修改 :修改bxprice等参数为负数或任意值 请求重放 :多次重复提交订单 并发问题 :数据库操作未加锁导致并发问题 参数污染 :请求中不存在的参数被返回并可污染结果 返回值篡改 :修改服务端返回的关键数据 五、越权访问漏洞 1. 横向越权 权限平级用户间的越权访问,通常由于未验证操作对象所属权。 51社保越权实例 : 漏洞点: /shebao/fillinfomation?insurance_location_id=6&employee_id=203§66§&person_id=*****&action=zr01 问题:employee_ id参数可遍历,导致可查看任意用户个人信息 原因:参数未过滤,缺乏权限验证 2. 纵向越权 低权限用户访问高权限功能。 湖南科创CMS注入实例 : 注入点:login.jsp中的userName字段 利用方式:使用万能密码突破权限限制 示例Payload: userName=admin' 漏洞表现:普通用户可获得管理员权限 六、防御建议 验证码安全 : 服务端生成和验证 一次性有效 与主请求绑定 适当复杂度 密码找回 : 多因素验证 完整流程验证 关键步骤不可跳转 绑定信息不可篡改 支付安全 : 关键参数服务端校验 防重放机制 金额不可为负 并发控制 权限控制 : 严格验证操作对象所属权 基于角色的访问控制 最小权限原则 敏感操作日志记录 输入验证 : 所有输入参数过滤 使用预编译语句防SQL注入 关键操作二次验证 通过全面理解这些逻辑漏洞类型和实例,安全人员可以更好地识别和防范Web应用中的逻辑缺陷,提升系统整体安全性。