Web安全 -- 逻辑漏洞讲解
字数 1626 2025-08-18 11:37:02
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应用中的逻辑缺陷,提升系统整体安全性。