逻辑漏洞¶
WEB · 知识域。不依赖"注入"的纯业务逻辑缺陷:让程序在非法状态下接受操作。标签:权限控制绕过、业务逻辑漏洞、数据校验绕过。
触发特征¶
- 题面描述"管理员才能做X""只有一次机会""金额不能为负"。
- 无明显注入点,功能流程长(注册→验证→重置→支付)。
权限控制绕过¶
- 水平越权(IDOR):改
uid/order_id/file_id遍历他人资源;未认证的 WIP 端点直接访问(srdnlenCTF 2026)。 - 垂直越权:普通用户请求管理员接口;前端隐藏 ≠ 服务端校验。
- 隐藏端点:从 JS 路由表、API 文档(
/swagger、/api-docs、GraphQL introspection)发现。 - 竞态(TOCTOU):签到/转账/次数限制,高并发击穿 check-then-act 窗口(Turbo Intruder /
asyncio并发)。 - 代理信任:信任
X-Forwarded-For判断内网管理员;HAProxy/中间件 ACL 绕过(→ HTTP请求)。
业务逻辑漏洞¶
- 支付/数量:负数、超大数、精度(float 精度丢失)、小数截断、重复退款;
int溢出(2^31、int8截断)。 - 状态机跳过:未支付直接访问完成回调;验证码先校验后置空;密码重置流程 token 可预测(
uniqid()、时间戳种子,→ Crypto-MT19937)。 - 批量操作:GraphQL aliasing 一次改多个;WebSocket mass assignment 批量改字段。
- 兑换/邀请:邀请码哈希可碰撞、并发重复兑换。
- 到期/限次:服务端只比时间字符串;cookie 检查点回滚(BYPASS CTF 2025 游戏型)。
数据校验绕过¶
- 类型混淆:数组/字符串双重身份(PHP
a[]=1,JSON{"id":[1]})、SQL 数组注入(→ NoSQL注入)。 - 长度截断:数据库列截断注册变体用户(VolgaCTF 2014,→ SQL注入);超长截断绕后缀判断。
- 编码不一致:前后端解码次数不同(
%252e双重编码)、Unicode 同形字符、parse_url与下游解析分歧。 - mass assignment:接口接受未声明的
{"isAdmin":true}、{"price":0}字段直接生效。 - 校验在前端:响应包改字段、hash 校验可重算、签名密钥泄露(→ JS)。
检查清单¶
- 画出完整业务流:注册 → 登录 → 重置 → 支付 → 兑换。
- 每步标记:鉴权对象、校验字段、状态存储位置(session/DB/cache)。
- 对每个校验问三句:服务端做没有?并发安全吗?类型/编码一致吗?
转向¶
- 越权拿到管理功能后 → 各类注入/上传技能;竞态属于并发类通病 → Pwn-逻辑漏洞