第 6 章 · 05 认证与 JWT(令牌伪造 + 弱口令)


文档摘要

第 6 章 · 05 认证与 JWT(令牌伪造 + 弱口令) 本节摘要:认证失败的两种最常见形态本节合并讲解:JWT/OIDC 失败——令牌伪造、令牌混淆、跨服务接受、持久账户接管,根因是「校验未绑定到签发者(iss)、受众(aud)、密钥与上下文」;弱口令/凭据爆破——默认凭据、撞库、可预测的系统生成口令、无速率限制的爆破,根因是「弱口令策略 + 缺 MFA + 缺速率限制」。前者从令牌内部攻破签名/头部/claim;后者从登录面外部用字典与爆破攻破。两者最终都指向「账户接管」:JWT 路径伪造任意身份、跨服务横行;弱口令路径拿下真实账户、横向移动。

第 6 章 · 05 认证与 JWT(令牌伪造 + 弱口令)

本节摘要:认证失败的两种最常见形态本节合并讲解:JWT/OIDC 失败——令牌伪造、令牌混淆、跨服务接受、持久账户接管,根因是「校验未绑定到签发者(iss)、受众(aud)、密钥与上下文」;弱口令/凭据爆破——默认凭据、撞库、可预测的系统生成口令、无速率限制的爆破,根因是「弱口令策略 + 缺 MFA + 缺速率限制」。前者从令牌内部攻破签名/头部/claim;后者从登录面外部用字典与爆破攻破。两者最终都指向「账户接管」:JWT 路径伪造任意身份、跨服务横行;弱口令路径拿下真实账户、横向移动。本节讲透 JWT 攻击面(端点侦察、token 头部/claim/格式)、关键漏洞(RS256→HS256 混淆、none 算法、kid/jku/x5u/jwk 头部滥用、claim 校验缺口、access vs ID token 混淆、刷新与会话)、弱口令攻击面(登录面、默认/硬编码、撞库、可预测口令、爆破)、工具(jwt_toolffufnmap NSE *-brute),以及把「弱口令 + 缺 MFA」打包成严重发现的完整链路。

内容来源:原项目知识包 strix/skills/vulnerabilities/{authentication_jwt,weak_password_detection}.md,汉化并套用体系化模板合并。

⚠️ 仅限授权测试:本节所有 payload 与技术仅用于你自己的应用或有书面授权的渗透测试。未经授权对他人系统使用这些技术是非法的。

学习目标

阅读完本节,你应当能够:

  1. 区分认证失败的两条路径:JWT/OIDC 内部攻破 vs 弱口令外部爆破。
  2. 完成 JWT 端点与 token 侦察(/.well-known/jwks.json、token 头部/claim/格式)。
  3. 复现 JWT 关键漏洞:RS256→HS256 混淆、none 算法、kid/jku/x5u/jwk 头部滥用、claim 校验缺口、token 混淆、刷新与会话缺陷。
  4. 完成弱口令侦察:登录面枚举、认证机制识别、用户名枚举。
  5. jwt_toolffufnmap NSE *-brute工具实施令牌攻击与凭据爆破。
  6. 用验证步骤确认漏洞、排除误报
  7. 评估两类认证失败的影响等级并理解账户接管的完整链路。

一、攻击面

两条路径的攻击面截然不同。

1.1 JWT / OIDC 路径

  • Web/移动/API 使用 JWT(JWS/JWE)与 OIDC/OAuth2 认证。
  • access vs ID token、refresh token、device/PKCE/Backchannel 流程。
  • 第一方与微服务校验、网关、JWKS 分发。

端点(well-known):/.well-known/openid-configuration/oauth2/.well-known/openid-configuration;密钥:/jwks.json、轮换 key 端点、租户特定 JWKS;认证:/authorize/token/introspect/revoke/logout、device code 端点;应用:/login/callback/refresh/me/session/impersonate

token 特征:

  • 头部:{"alg":"RS256","kid":"...","typ":"JWT","jku":"...","x5u":"...","jwk":{...}}
  • claim:{"iss":"...","aud":"...","azp":"...","sub":"user","scope":"...","exp":...,"nbf":...,"iat":...}
  • 格式:JWS(签名)、JWE(加密);注意未编码 payload 选项("b64":false)与 critical 头("crit")。

1.2 弱口令路径

  • 登录门户(Web、API、移动、SSH、FTP、Telnet、RDP)。
  • 管理面板、仪表盘、管理接口。
  • 应用与设备的默认/硬编码凭据。
  • 弱口令策略的自助注册流程。
  • 生成可预测 token 或口令的密码重置流程。
  • 弱 secret 的 API key/token 认证。

端点识别:标准登录表单(/login/signin/auth);管理面板(/admin/console);API 认证(/api/v1/token/oauth/token、GraphQL login mutation);服务端口(SSH 22、FTP 21、SMB 445、RDP 3389、MySQL 5432、Redis 6379、MongoDB 27017)。

认证机制判定:表单 POST、Basic 认证、bearer token/JWT(password grant)、API key、多步认证、CAPTCHA 类型、速率限制指示(429、锁定消息、延迟)。

💡 核心心法:JWT 不要信任头部、claim 或 token 不透明——校验必须绑定到正确的 iss、aud、key 与客户端上下文。弱口令不要信任用户选的密码——默认凭据先试、用户名先枚举、小字典先于大字典、缺 MFA 即严重。

二、检测通道(侦察)

2.1 JWT 侦察

  • 盘点签发者/消费者:IdP、API 网关、各服务、移动/Web 客户端。
  • 捕获多角色 access 与 ID token;记录头部、claim、签名。
  • 映射校验端点:/.well-known/jwks.json
  • 构建「token 类型 × 受众 × 服务」矩阵,尝试跨用。

2.2 弱口令侦察

  • 用户名枚举:错误消息差异(「用户名无效」vs「密码无效」);注册页用户名可用性检查;密码重置流的响应时延或消息泄露;公开资料/API/元数据暴露用户名;常见模式(admin/root/test/guest/support);从公司域名推导邮箱格式。

三、利用方法与技术

3.1 JWT 关键漏洞

签名校验:

  • RS256→HS256 混淆:把 alg 改成 HS256,用 RSA 公钥当 HMAC secret(若算法未固定)。
  • none 算法接受:设 "alg":"none" 并去掉签名(若库接受)。
  • ECDSA 可塑性/误用:弱校验设置接受非规范签名。

头部操纵:

  • kid 注入:路径穿越 ../../../../keys/prod.key;key 查找里的 SQL/命令/模板注入;或指向全局可读文件。
  • jku/x5u 滥用:托管攻击者控制的 JWKS/X509 链;若未 pin/白名单,服务器取并信任攻击者密钥。
  • jwk 头注入:在头部嵌入攻击者 JWK;部分库优先用内联 JWK 而非服务端配置的 key。
  • 经远程 key 取数的 SSRF:利用 JWKS URL 取数触达内网。

密钥与缓存:

  • JWKS 缓存 TTL 与 key 轮换:接受废弃 key;轮换窗口竞态;缺 kid pinning → 接受任何匹配 kty/alg。
  • 混合环境:dev/stage/prod 共用 secret;跨租户/服务 key 复用。
  • 回退:kid 找不到时遍历所有 key 或无 key 也校验通过(实现 bug)。

claim 校验缺口:

  • iss/aud/azp 未强制:跨服务 token 复用;接受任意签发者或错误受众。
  • scope/roles 全盘信任:服务端不重新推导授权;签名弱时经 claim 编辑提权。
  • exp/nbf/iat 未强制或时钟偏差容忍过大:接受长期过期或未生效 token。
  • typ/cty 未强制:在需要 access token 处接受 ID token(token 混淆)。

令牌混淆与 OIDC:

  • access vs ID token 互换:对只校验签名却不校验 audience/typ 的 API 用 ID token。
  • OIDC mix-up:redirect_uri 与 client 混淆,client A 的 token 在 client B 兑换。
  • PKCE 降级:缺 S256 要求;接受 plain 或缺失 code_verifier
  • state/nonce 弱点:可预测或缺失 → CSRF/登录逻辑拦截。
  • device/Backchannel 流程:code 与 token 被非预期 client/服务接受。

刷新与会话:

  • refresh token 轮换未强制:无限复用旧 refresh token;无复用检测。
  • 长 JWT 无吊销:登出后仍可持久访问。
  • 会话固定:把新 token 绑到攻击者控制的 session ID 或 cookie。

传输与存储:

  • token 在 localStorage/sessionStorage:易被 XSS 外带;cookie vs header 的 SameSite/CSRF 权衡。
  • 不安全 CORS:通配源 + 带凭据请求暴露 token 与受保护响应。
  • TLS 与 cookie 标志:缺 Secure/HttpOnly;缺 mTLS 或 DPoP/cnf 绑定 → 可从他设备重放。

微服务与网关:受众不匹配——内部服务校验签名却忽略 aud → 接受他服务 token;头部信任——边缘/网关注入 X-User-Id,后端信任它胜过 token claim;异步消费者——worker 用 bearer token 处理消息却不在重放时复查。

JWS 边界:未编码 payload(b64=false)+ crit 头——库误处理校验路径;嵌套 JWT(JWT-in-JWT)校验顺序错——外层接受而内层 claim 被忽略。

SSO 联邦:多 IdP/SP 间信任配置错误、混合元数据、陈旧 key → 接受外来 token。

3.2 弱口令关键漏洞

弱口令策略:无最小长度/复杂度;允许常见口令(password/123456/qwerty/admin/letmein);不查泄露库(HIBP);大小写不敏感存储;无口令历史;最大长度过短(暗示明文或弱哈希)。

默认与硬编码:厂商默认(admin/adminroot/rootguest/guest);框架默认(django/admintomcat/tomcatweblogic/weblogic);IoT/路由器/摄像头厂商特定默认;数据库默认(postgres/postgressa/saroot/(空));硬编码在源码/配置/文档。

撞库(Credential Stuffing):跨服务口令复用;泄露凭据表(COMB、Collection #1-5)支撑大规模接管;无 MFA 即可直接访问;缺泄露检测或强制轮换。

可预测系统生成口令:顺序/模式(Password1Welcome2025!CompanyName123);基于时间(注册时间戳派生);弱随机(可猜 PRNG 种子);重置 token 兼作临时口令且过期短。

爆破漏洞:登录无速率限制;无或无效账户锁定(仅客户端,易绕);基于 IP 的封锁却无会话/用户关联(经代理轮换 IP);CAPTCHA 可绕或仅过度尝试后触发;并行登录尝试不跟踪(计数器竞态);冗长错误泄露合法用户名。

3.3 弱口令高级技巧

定向口令表:从公司名/产品名/域名、地理/行业词、季节+年(Summer2025!)、键盘走位与 leet、目标域历史泄露口令生成;爬目标站点构建内容派生表。

撞库工作流:按目标域过滤泄露库;测邮箱:口令对(邮箱匹配目标域);测用户名:口令对(常见用户名推导);在触发 MFA 前用会话端点验证登录成功。

多步认证绕过:用户名枚举 → 第二步口令爆破;步骤间会话固定;经直接 URL 跳到后续阶段;响应操纵绕过校验。

API/移动专项:GraphQL login mutation——经数组输入批量爆破;移动 API 常缺速率限制;JWT password grant 流程爆破 /token;OAuth2 password grant 测弱凭据。

服务级爆破:

ffuf -w users.txt:USER -w passwords.txt:PASS -u https://target.com/login -X POST -d "username=USER&password=PASS" -fr "Invalid" nmap -p 22 --script ssh-brute --script-args userdb=users.txt,passdb=passwords.txt target.com

可用的 NSE *-brute 脚本:ssh-bruteftp-brutesmb-brutetelnet-brutemysql-brutepgsql-brutemongodb-bruteredis-brutehttp-brutehttp-form-brute

四、绕过技巧

4.1 JWT 绕过

  • 算法不明确时:先试 RS256→HS256 与 none;否则聚焦头部 key 控制(kid/jku/x5u/jwk)。
  • JWKS 缓存与轮换竞态:试废弃 key 与缺 kid 回退。
  • 跨服务复用:许多后端只查签名,不查 audience/typ。
  • OIDC 流程:PKCE/state/nonce 变体与混合 client,找 mix-up。
  • DPoP/mTLS 缺失:从他设备重放 token。
  • 每条接受路径都测:网关、服务、worker、WebSocket、gRPC——校验常随栈而异(移动 vs Web vs 网关)。

4.2 弱口令绕过

  • 口令喷洒(password spraying):一个口令、多用户——避开逐账户锁定。
  • GraphQL batching:单请求测多凭据,绕每请求限制。
  • 代理轮换 + 抖动:规避基于 IP 的速率限制。
  • 并发会话限制:成功登录可能踢出合法用户(本身是发现)。
  • 动态解析 CSRF token:在爆破请求间解析。

💡 绕过的本质:JWT——校验逻辑常在不同栈/服务间分歧,任一接受路径缺绑定即可伪造;弱口令——速率限制常按 IP/连接/请求计,而非按「真实账户意图」,分布式与喷洒可绕。

五、验证与误报排除

5.1 JWT 验证

  1. 展示伪造或跨上下文 token 被接受(错误 alg、错误 audience/issuer,或攻击者签名 JWKS)。
  2. 演示 access token vs ID token 在 API 处混淆。
  3. 证明 refresh token 复用无轮换检测或吊销。
  4. 确认头部滥用(kid/jku/x5u/jwk)导致攻击者控制的 key 被选中。
  5. 提供 owner vs non-owner 证据(同样请求,仅 token 上下文不同)。

5.2 弱口令验证

  1. 用捕获凭据确认登录成功(session token/cookie/JWT)。
  2. 验证账户访问级别(admin vs user)。
  3. 检查登录后是否强制 MFA 或可绕过。
  4. 测凭据跨端点/服务复用。
  5. 记录允许此次攻破的口令策略弱点。
  6. 验证同样凭据是否在 staging/dev/相关域生效。

常见误报:

  • JWT:因严格 audience/issuer 强制被拒;key pinning + JWKS 白名单 + TLS 校验;短命 token + 轮换 + 登出吊销;API 不接受 ID token。
  • 弱口令:蜜罐账户/蜜罐响应;临时锁定(区别于永久封禁);错误消息差异实际不代表用户名枚举;CAPTCHA/WAF 阻断表现为登录失败;速率限制返回 429 而非 401(调时序)。

六、影响评估

两类认证失败最终都指向账户接管,影响等量齐观:

  • JWT:账户接管与持久会话;经 claim 操纵或跨服务接受提权;跨租户/跨应用数据访问;经攻击者控制的 key/端点铸造 token。
  • 弱口令:受影响用户完整账户接管;管理员访问 = 全系统失陷;跨服务凭据复用横向移动;数据外带、提权、持久化;声誉损害与合规违规(GDPR、PCI-DSS)。

⚠️ 弱口令 + 缺 MFA = 严重发现;JWT 任一签发/校验路径缺绑定 = 可伪造任意身份。两者都不要止步于「拿到一个账户」——测跨服务复用、测提权、测持久化。

本节要点回顾

  1. 核心心法:JWT——校验必须绑定 iss/aud/key/客户端上下文,不信任头部/claim/不透明 token;弱口令——默认凭据先试、用户名先枚举、小字典先于大字典、缺 MFA 即严重。
  2. JWT 攻击面:well-known 端点、/jwks.json、token 头部(alg/kid/jku/x5u/jwk)/claim(iss/aud/azp/sub/exp/scope)/格式(JWS/JWE/b64/crit)。
  3. JWT 关键漏洞:RS256→HS256 混淆、none 算法、kid 路径穿越/注入、jku/x5u/jwk 头滥用(攻击者控制 key)、JWKS 缓存/轮换竞态、iss/aud/exp/scope 校验缺口、access vs ID token 混淆、OIDC mix-up/PKCE 降级、refresh 不轮换。
  4. 弱口令攻击面:登录门户/管理面板/服务端口;默认与硬编码;撞库;可预测系统生成口令;爆破(无速率限制/无效锁定/IP 封锁可绕)。
  5. 工具链:JWT——jwt_tool -t <url> -rh "Authorization: Bearer <token>" -M at(全攻击矩阵)、jwt_tool <token> -C -d <wordlist>(爆破 HMAC secret);弱口令——ffuf(Web 登录)、nmap NSE *-brute(服务级)、自定义 Python(requests + 线程 + 抖动 + 代理轮换)。
  6. 绕过本质:JWT——校验随栈分歧,任一接受路径缺绑定即可伪造;弱口令——速率限制按 IP/连接/请求计而非真实账户意图,分布式与喷洒可绕。
  7. 验证:JWT——伪造/跨上下文 token 被接受、token 混淆、refresh 复用、头部滥用、owner vs non-owner;弱口令——登录成功证据、访问级别、MFA 强制、跨服务复用、策略弱点。
  8. 影响:两类都指向账户接管——JWT 伪造任意身份/跨服务横行,弱口令拿下真实账户/横向移动;弱口令+缺 MFA=严重,JWT 缺绑定=可伪造任意身份。

下一节,我们看业务逻辑与竞争——当业务规则在并发、重放、乱序下失效,「免费领钱」「超额退款」「突破限额」就成为可能。


发布者: 作者: 灏天文库 转发
评论区 (0)
U