逻辑漏洞
支付逻辑漏洞
概述
支付逻辑漏洞是指在支付、结算或充值等涉及金额操作的业务流程中,由于逻辑设计缺陷导致攻击者能够以非预期的方式修改金额、数量或优惠条件,从而获得不当利益。常见于电商、直播平台、游戏充值和会员订阅场景。
常见场景
- 购物车结算:用户在结算时修改商品价格或数量。
- 优惠券使用:绕过优惠券使用限制或重复使用。
- 直播间刷礼物:通过篡改请求降低礼物价格或增加赠送数量。
- 游戏充值:修改充值金额以低价获取高额虚拟货币。
- 会员充值:绕过支付流程直接激活会员权限。
测试方式
金额相关测试
- 负数金额:尝试将商品价格、充值金额或优惠金额设置为负数(如-99),观察系统是否接受并退款。
- 小额修改:将金额从正常值(如 99)改为极小值(如 0.01 或 1),检查是否按修改后的金额结算。
- 边界值测试:尝试使用超大金额(如 99999999)或小数点后多位(如 0.00000001)测试系统处理逻辑。
数量相关测试
- 负数数量:将商品或礼物的购买数量设置为负数,观察是否导致退款或库存异常。
- 超大数量:设置极大数量(如 999999),测试系统是否因整数溢出或其他异常导致漏洞。
- 零数量:尝试以数量为 0 下单,检查是否能免费获取商品。
并发测试
- 优惠券重复使用:通过快速发送多个请求,测试同一优惠券是否能多次使用。
- 库存竞争:多线程下单抢购限量商品,检查是否能绕过库存限制。
参数篡改
- 优惠券 ID 替换:抓包修改优惠券 ID(如将“满 10 减 1”的 ID 替换为“满 30 减 15”),测试是否能使用更高级优惠券。
- 商品 ID 替换:将低价商品 ID 替换为高价商品 ID,测试是否能以低价购买高价商品。
- 支付渠道篡改:修改支付渠道参数,尝试绕过支付流程。
签约/会员升级漏洞
- 签约:利用多设备登录挤出和支付页面缓存漏洞,可能实现同一优惠在多笔订单中的重复使用。
- 会员升级:会员升级漏洞指利用系统未严格校验会员状态或订单的漏洞,通过多设备或并发操作实现重复享受优惠券或升级会员特权的行为。
密码找回逻辑漏洞
概述
密码找回逻辑漏洞是指在用户忘记密码或修改密码的流程中,由于验证机制不严谨,攻击者能够绕过身份验证直接重置他人密码。此类漏洞可能导致账号被盗或敏感信息泄露。
常见场景
- 忘记密码:通过邮箱、手机号或密保问题重置密码。
- 账号找回:通过身份信息恢复被锁定的账号。
- 修改密码:在登录状态下更改密码。
测试方式
验证码相关测试
- 验证码爆破:若验证码为 4 位纯数字(0000-9999),尝试暴力枚举,测试系统是否限制尝试次数。
- 验证码泄露:检查 HTTP 响应体、JS 代码或前端调试工具中是否直接暴露验证码。
- 验证码复用:使用同一验证码多次提交,测试是否因未失效而被接受。
- 空验证码:提交空验证码或随机验证码,检查系统是否误判为有效。
密保问题测试
- 答案泄露:检查 HTTP 响应或 JS 代码中是否包含密保问题答案(如“你就读的小学名称”)。
- 弱问题:测试密保问题是否过于简单(如“1+1 =?”),可通过猜测绕过。
流程跳跃
- 步骤绕过:若密码重置分为多步(如输入用户名 → 获取验证码 → 输入新密码),尝试直接访问最后一步 URL,检查是否能绕过验证码验证。
- 状态篡改:修改请求参数(如将“未验证”改为“已验证”),测试是否能跳过验证逻辑。
逻辑缺陷
- 弱验证:如仅需提供生日和手机号即可重置密码(如美团案例),测试是否无需额外验证。
- 链接可猜解:检查邮箱重置密码链接是否可预测(如包含用户 ID 或时间戳),尝试构造链接重置他人密码。
绑定测试
- 任意绑定:抓包修改绑定手机号或邮箱的请求,尝试绑定任意号码或邮箱。
- 解绑绕过:测试是否能无需验证直接解绑已绑定的手机号或邮箱。
注册覆盖
- 账号覆盖:注册与已有用户(如 admin)同名的账号,检查是否覆盖原账号信息。
- 弱注册校验:测试注册流程是否允许使用已存在的敏感用户名。
返回包篡改
- 状态修改:将验证失败的返回包(如“false”)改为“true”,测试是否能绕过验证。
- 错误码修改:修改错误码(如 403 改为 200),观察系统是否接受。
越权漏洞
概述
越权漏洞是指用户能够访问或操作超出其权限范围的资源或功能,通常分为平行越权(同级用户间)和垂直越权(低权限访问高权限)。此类漏洞多见于需要登录的后台管理系统。
常见场景
- 用户中心:查看或修改其他用户信息。
- 订单管理:访问或取消他人订单。
- 后台管理:普通用户访问管理员功能。
测试方式
平行越权
- ID 替换:注册两个账号 A 和 B,将 A 的请求中用户 ID 替换为 B 的 ID,测试是否能访问或修改 B 的信息。
- ID 遍历:若无注册功能,尝试递增或递减用户 ID(如 20250001 改为 20250002),测试是否能访问其他用户数据。
垂直越权
- 权限提升:用普通账号 A 尝试访问管理员功能(如修改系统配置),检查是否被允许。
- 角色篡改:抓包修改类似角色等可能相关的参数(如将“user”改为“admin”),测试是否获得更高权限。
参数修改
- GET/POST 参数:修改 URL 或表单中的用户 ID、角色等参数。
- Cookie 篡改:修改 Cookie 中的用户 ID 或权限标识,测试是否生效。
未授权访问漏洞
概述
未授权访问漏洞是指无需登录或以低权限账号即可访问受限资源,通常发生在前后端分离的系统中,后端 API 未严格校验权限。
常见场景
- API 接口:直接访问后端 API 获取敏感数据。
- 管理后台:无需登录即可访问管理员页面。
- 静态资源:直接访问未受保护的配置文件或备份文件。
测试方式
未登录访问
- 收集后端 API 地址,尝试在未登录状态下访问。
- 检查返回状态码:200 或 405 可能表示未授权访问,403 表示权限控制正常。
低权限访问
- 以普通用户登录,尝试访问管理员专属 API 或页面。
- 检查返回状态码。
路径遍历
- 尝试访问敏感路径(如/admin、/api/config),检查是否公开。
验证码逻辑漏洞
概述
验证码逻辑漏洞是指验证码验证机制存在缺陷,导致攻击者能够绕过、猜测或重复使用验证码。此类漏洞常见于注册、登录、密码重置等场景。
常见场景
- 手机/邮箱验证码:用于身份验证的短信或邮件验证码。
- 图形/拼图验证码:用于防止自动化攻击的图片验证。
- reCaptcha/人脸识别:第三方验证码或生物识别。
测试方式
验证码爆破
- 测试 4 位纯数字验证码(0000-9999),检查是否限制尝试次数。
验证码泄露
- 检查 HTTP 响应、JS 代码或前端调试工具中是否包含验证码。
- 测试验证码是否在前端生成(前端验证等于无验证)。
验证码复用
- 使用同一验证码多次提交,测试是否因未失效而被接受。
- 测试验证码有效期是否过长(如 24 小时)。
验证码缺失
- 提交空验证码或不提交验证码,检查系统是否误判为有效。
- 删除验证码相关参数,测试是否仍能通过验证。
验证码弱化
- 测试图形验证码是否过于简单,可通过 OCR 或 AI 识别。
- 检查拼图验证码是否可通过坐标猜测绕过。
接口滥用
概述
接口滥用是指攻击者通过重复调用第三方服务接口(如短信或邮件验证码接口)造成资源浪费或服务瘫痪,常见于依赖外部服务的系统。
常见场景
- 短信验证码:频繁发送短信验证码耗尽服务商配额。
- 邮件验证码:通过邮件接口发送垃圾邮件。
- 第三方支付:滥用支付接口造成交易异常。
测试方式
轰炸测试
- 快速重复调用短信或邮件验证码接口,测试是否有限制。
- 修改手机号或邮箱,尝试对多个目标进行轰炸。
频率测试
- 测试接口是否设置了请求间隔(如每分钟 1 次)。
- 检查是否对同一目标有每日发送上限。
参数篡改
- 修改接口参数(如验证码类型),测试是否能触发其他功能。
- 删除认证参数,检查是否仍能调用接口。
敏感信息泄露
概述
敏感信息泄露是指网站或前端代码中意外暴露用户数据、系统配置或其他敏感信息,可能被攻击者利用进行进一步攻击。
常见场景
- 前端代码:JS 或 HTML 注释中包含数据库连接信息。
- API 响应:返回包中包含未过滤的用户信息。
- 错误信息:服务器错误页面泄露系统路径或版本。
测试方式
代码查看
- 检查 JS、HTML 或 CSS 中是否包含硬编码的敏感信息(如 API 密钥)。
- 查看注释中是否包含开发者的调试信息。
响应分析
- 抓包分析 API 返回数据,检查是否包含多余字段(如用户密码)。
- 测试错误响应是否泄露系统信息(如堆栈跟踪)。
文件遍历
- 尝试访问常见备份文件(如 backup.sql、.git)。
- 检查是否存在公开的配置文件(如 config.php)。
身份验证缺陷
概述
身份验证缺陷是指认证机制(如 Cookie 或 Session)设计不当,导致攻击者能够伪造身份或绕过验证。此类漏洞常见于依赖 Cookie 的系统。
常见场景
- Cookie 验证:使用可预测的 Cookie 值进行身份验证。
- Session 管理:SessionID 未及时失效或可被猜测。
- 弱令牌:认证令牌未加密或过于简单。
测试方式
Cookie 篡改
- 检查 Cookie 是否包含可读信息(如 user_id = 123; role = student)。
- 修改 Cookie 值(如将 role 改为 admin),测试是否提升权限。
Session 测试
- 测试 SessionID 是否可预测(如基于时间戳或用户 ID)。
- 尝试复用旧 SessionID,检查是否仍有效。
令牌测试
- 检查认证令牌是否加密,尝试解码或伪造。
- 测试令牌是否设置了有效期。
参考:Wooyun Drops