<< All versions

Skill v1.0.0

currentAutomated scan100/100
haibo3434358/scareaisec/captcha-bypass
──Details
PublishedOctober 29, 2026 at 12:41 AM
Content Hashsha256:d481591932f5c35b...
Git SHAac1175627876
──Files
Files (1 file, 9.9 KB)
SKILL.md9.9 KBactive
SKILL.md · 253 lines · 9.9 KB

name: captcha-bypass description: "验证码/短信验证码/邮件验证码/滑块/人机验证绕过方法论。当登录、注册、找回密码、短信发送、邮箱验证、支付确认、MFA、评论提交等流程出现 captcha/code/otp/sms/email verify/geetest/TCaptcha 时使用。覆盖验证码重放、泄露、万能码、空值绕过、接收者未绑定、限频绕过、短信轰炸和时间窗口问题。" priority: 10 vuln_types:

  • 验证码绕过
  • 短信轰炸
  • OTP绕过
  • 验证码重放
  • 限频绕过

triggers:

  • captcha
  • code
  • verify_code
  • otp
  • sms
  • email_code
  • geetest
  • TCaptcha
  • slider
  • 验证码
  • 短信验证码
  • 邮箱验证码
  • 人机验证
  • 发送验证码

synonyms:

  • captcha bypass
  • otp bypass
  • sms bombing
  • verification code bypass
  • rate limit bypass
  • 验证码复用
  • 万能验证码

metadata: version: "1.0.0" tags: "captcha,验证码,短信验证码,图形验证码,滑动验证码,重放,bypass,sms,邮箱验证码,爆破,频率限制,轰炸" category: discovery authority: "reference"


验证码绕过方法论

🤖 Agent 工具映射

场景优先使用的 Agent 工具
捕获登录、注册、找回密码、MFA、支付确认、短信/邮件发送等验证码流程browser_* + proxy_get_traffic
删除验证码字段、传空字符串、null、万能码,验证服务端是否强制校验proxy_replay / proxy_send_request
重放已成功使用的验证码、短信码、邮件码或滑块 token,验证是否一次性失效proxy_replay
用 A 手机/邮箱收到的验证码验证 B 手机/邮箱或 B 账号,检查接收者绑定proxy_send_request / proxy_diff_responses
少量重复调用发送接口,测试同号限频、IP/session 限频和手机号格式变形绕过proxy_send_request / proxy_batch_send
检查响应 body/header/Cookie/JS/localStorage 是否泄露验证码或验证 tokenproxy_get_flow_detail + browser_evaluate + browser_get_cookies
对比正确码、错误码、空值、复用、跨账号、流程跳步的业务结果proxy_diff_responses
固化绕过、复用、泄露、未绑定、限频缺失或短信轰炸证据checklist_mark + note_add

执行要点:验证码安全要验证“绑定、一次性、限频、服务端校验、泄露”五件事;短信轰炸只做少量验证,不能进行真实大规模发送。


0. 立即执行摘要:验证码要验证“绑定、一次性、限频、服务端校验”

看到登录、注册、找回密码、短信/邮件发送、MFA、支付确认、敏感操作确认中的 captcha、code、otp、verify_code、sms、email_code、滑块 token 时,必须进入本 skill。验证码安全不是“有没有验证码”,而是 是否服务端校验、是否绑定账号/手机号/session/场景、是否一次性、是否限频、是否泄露。

优先顺序:

  1. 删除验证码、空值、null、万能码,确认服务端是否强制校验。
  2. 成功使用后的验证码再次提交,确认是否一次性失效。
  3. A 手机/邮箱收到的验证码能否验证 B 手机/邮箱或 B 账号。
  4. 发送接口是否限频,手机号格式变形是否绕过限频。
  5. 响应、Cookie、JS、localStorage 是否泄露验证码或验证 token。

1. 数据包特征触发矩阵

特征漏洞假设立即测试
code/otp/captcha空值/万能码绕过删除、空、null、0000、123456
发送验证码接口短信轰炸/限频绕过同号少量重复、格式变形、IP/session 对照
验证接口含手机号/邮箱接收者未绑定A 收码验证 B 账号/手机号
响应返回 code/token验证码泄露检查 body/header/cookie/localStorage
滑块/三方验证 tokentoken 重放复用 token、跨 session、过期时间
MFA/支付确认验证码流程跳步未验证直接调业务 API

Phase 1: 识别验证码类型

验证码类型:
├─ 图形验证码(CAPTCHA 图片)
├─ 短信验证码(4-6 位数字)
├─ 邮件验证码
├─ 滑动/拼图验证(极验 geetest、腾讯 TCaptcha)
├─ 点击验证(点选文字/图标)
└─ 计算题验证(1+2=?)

Phase 2: 通用绕过手法

2.1 验证码重放(最常见!)

1. 正常获取验证码,填写正确提交(抓包)
2. 重放同一请求 → 如果仍然成功 → 验证码可重用
3. 说明服务端没有在验证后使验证码失效
→ 可用同一验证码无限次提交(配合爆破密码等)

2.2 响应中泄露验证码

检查以下位置:
1. 发送验证码的接口响应 body — 直接返回验证码明文
2. 响应 header — 偶尔在 X-Verify-Code 等自定义头中
3. Cookie — 验证码 MD5/Base64 编码存在 Cookie 中
4. 前端 JS — 验证码生成逻辑在前端
→ proxy_get_flow_detail 查看完整响应
→ browser_evaluate 检查页面变量和 Cookie

2.3 空值/万能验证码

尝试以下值:
- 空字符串: ""
- null: null
- 删除验证码参数(整个字段不传)
- 常见万能码: 0000, 1234, 6666, 8888, 9999
- -1, 000000
→ proxy_replay 逐个尝试

2.4 前端校验绕过

如果验证码只在前端校验:
1. 直接改包删除验证码字段 → proxy_replay
2. 或随便填一个值,看服务端是否再次校验
3. browser_evaluate 检查是否有前端 JS 校验逻辑

2.5 修改接收者

短信/邮件验证码场景:
1. 发送验证码到自己手机 A
2. 改包修改验证接口的手机号为目标手机 B
3. 用发到 A 的验证码去验证 B → 验证码与手机号未绑定

Phase 3: 短信验证码专项

爆破 4-6 位数字

4 位数字: 0000-9999(10000 种)
6 位数字: 000000-999999(100 万种,通常不可行)
判断是否可爆破:
1. 验证码有效期多长?(通常 5-15 分钟)
2. 有无频率限制?(连续错误 N 次后锁定)
3. 有无 IP 限制?
如果 4 位 + 无限制 → 直接爆破
如果有频率限制 → 尝试 proxy_batch_send 并发绕过

短信轰炸

发送验证码接口无频率限制:
1. 连续调用发送接口 → 目标手机收到大量短信
2. 改手机号遍历 → 批量轰炸
测试方法:
- 同一手机号连续请求 5 次发送接口
- 如果都返回成功 → 存在短信轰炸
- 注意:只需证明无频率限制即可,不要真的大量发送

验证码时间窗口

1. 请求发送新验证码
2. 用旧验证码提交 → 如果仍有效 → 旧码未失效
3. 说明可以无限获取新码同时旧码仍可用

Phase 4: 图形验证码专项

1. 不带验证码参数直接提交 → 服务端是否强制校验
2. 同一验证码重复提交多次 → 是否一次性
3. 验证码图片 URL 是否包含答案(如 /captcha?text=A3Bx)
4. 验证码图片是否有规律(固定几张轮换)
5. OCR 识别简单验证码(Agent 无此能力,记录为建议)

Phase 5: 滑动/智能验证码

这类验证码通常较难绕过,但可以尝试:
1. 抓包分析验证参数,是否有固定值可重放
2. 验证结果 token 是否过期(获取后多久失效)
3. 验证是否绑定 session(换 session 是否需重新验证)
4. 删除验证相关参数,看业务接口是否仍可调用

验证与记录

验证码绕过需要证明:
1. 可以在不正确输入验证码的情况下完成操作
2. 或验证码可被重用/预测
3. 截图完整的绕过过程
4. vuln_verify + note_add(type="result")

结果判定与误报排除

  • confirmed_vuln:无需正确验证码即可完成受保护动作,或验证码可重放/泄露/跨账号使用/无限发送造成实际绕过。
  • suspected_vuln:存在响应差异、限频弱、token 可复用迹象,但缺少最终业务动作成功证据。
  • needs_review:缺少接收短信/邮件条件、三方验证码环境或测试账号。
  • not_vuln:完成空值、复用、绑定、泄露、限频、格式变形、流程跳步检查后无异常。

误报排除:

  • 发送接口返回成功不代表短信真的发送,需要结合实际接收或服务端计数。
  • 前端提示验证码错误不够,要看业务接口是否仍执行。
  • 图形验证码 OCR 难不代表安全,服务端绑定和一次性仍必须测。

⛔ 「最低必测自检」— 标 not_vuln/skipped 前必答(验证码绕过/短信轰炸)

#必测项跳过的合法理由
1空值绕过:把 captcha/code 字段去掉、传空字符串、传 null,看是否仍能继续接口无验证码字段
2复用绕过:用过的验证码再次提交,看是否仍接受(一次性验证码失效检查)-
3OCR 识别:图形验证码用 OCR 自动识别(如简单数字/英文)是滑块/三方验证
4客户端绕过:检查响应 JS 是否泄露验证码(变量、cookie、localStorage)-
5短信轰炸:连发同一手机号 10 次,看后端是否限频(应该只发 1-2 次后限制)接口非短信发送
6手机号枚举:发送验证码接口,输入存在的手机号 vs 不存在的,响应是否不同-
7限频参数篡改:在 phone/mobile 字段中加空格、+86 前缀、unicode 不可见字符,看是否绕过限频(同一号码不同表达式)-

输出格式

text
[验证码检查]
入口/流程:登录/注册/找回密码/MFA/支付/短信发送/邮箱验证/其他
验证码类型:图形/短信/邮件/滑块/三方token/未知
测试动作:空值/万能码/复用/接收者绑定/限频/泄露/流程跳步/token重放
业务结果:成功/失败/响应差异/未知
结论:confirmed_vuln | suspected_vuln | needs_review | not_vuln
安全边界:仅测试账号/少量发送/禁止轰炸/其他
All versions