JWT & Session Security
🔥 Vibe Prompt
"Audit a JWT: decode, check for alg=none attack, brute-force weak HMAC key."
import jwt, json
# JWT structure: header.payload.signature
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiYWRtaW4iLCJyb2xlIjoidXNlciJ9.sig"
# Decode header & payload
header_b64, payload_b64, sig_b64 = token.split(".")
# Pad for base64
def b64_decode(s):
s += "=" * (4 - len(s) % 4)
return json.loads(__import__('base64').urlsafe_b64decode(s))
print(f"Header: {b64_decode(header_b64)}")
print(f"Payload: {b64_decode(payload_b64)}")
# Attack 1: alg=none
# Change alg to "none", remove signature
none_token = "eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJ1c2VyIjoiYWRtaW4iLCJyb2xlIjoiYWRtaW4ifQ."
try:
decoded = jwt.decode(none_token, options={"verify_signature": False})
print(f"\nalg=none attack: {decoded}") # Succeeds if server accepts
except:
print("alg=none rejected (good)")
# Attack 2: Weak HMAC key
# python jwt_bruteforce.py <token> /usr/share/wordlists/rockyou.txt
JWT Security Checklist
| Issue | Risk | Fix | |-------|------|-----| | alg=none | Critical | Reject none | | Weak secret | High | 256-bit random | | Hardcoded key | High | Key rotation | | No expiry | Medium | Add exp claim | | Sensitive data | Medium | Never store secrets in payload |
Session Security
# Good
session["user_id"] = user.id
session.permanent = True
app.permanent_session_lifetime = timedelta(hours=2)
# Regenerate after login
session.clear()
session["user_id"] = user.id # Prevents session fixation
Key Points
- Understand the core concepts thoroughly
JWT:便利與危險的一線之隔
JWT(JSON Web Token)是目前最流行的認證機制。但它也是最常被誤用的機制之一。
JWT 的三大常見誤解
| 誤解 | 正解 | |:----:|:----:| | 「JWT 比 Session 安全」 | JWT 和 Session 是兩種不同的設計哲學,不是誰取代誰 | | 「JWT 可以存放敏感資料」 | JWT payload 只是 Base64 編碼,任何人都能解碼!絕對不要放密碼或信用卡號 | | 「JWT 可以永不過期」 | 沒有過期的 JWT 像一把永遠有效的萬用鑰匙——遺失就完了 |
最常見的 JWT 攻擊
1. alg: none 攻擊
將 Header 的 alg 改為 none 並移除簽章。如果伺服器沒驗證簽章,即可偽造任意身份。
def decode_jwt_unsafe(token):
# ❌ 沒驗證簽章!任何人都能偽造
payload = json.loads(b64_decode(token.split(".")[1]))
return payload
# 攻擊者偽造的管理員 Token
token = "eyJhbGciOiJub25lIn0.eyJ1c2VyIjoiYWRtaW4iLCJyb2xlIjoiYWRtaW4ifQ."
print(decode_jwt_unsafe(token)) # {user: "admin", role: "admin"}
2. RS256 → HS256 混淆攻擊
伺服器用 RS256(非對稱),攻擊者拿到公鑰後,偽造 HS256(對稱)Token,誘騙伺服器用公鑰當 HMAC 密鑰驗證。
3. 弱 HMAC 密鑰爆破
用 "secret" 當密鑰?hashcat 幾分鐘內就能爆破出來。
下一章預告:把一切串起來
前三章學了偵察、認證攻擊、注入攻擊。下一章 完整 API 滲透測試 將整合所有技術,從資訊收集到漏洞利用到報告撰寫,一條龍完成。 完成本章後,你將能夠:
- 🎯 理解核心原理:掌握 JWT 與 Session 安全、動手實作、串聯所學、進階探索、專案實戰 的完整知識體系
- 💻 動手實作:使用 Python/JavaScript 寫出可運行的實作程式碼
- 🔍 除錯與分析:遇到相關問題時能快速定位根本原因
- 🏗️ 整合應用:將本章所學整合到你的實際專案中
銜接下一章
本章深入探討了 JWT 與 Session 安全 的核心概念與實作方法。下一章將在此基礎上,進一步探索更進階的應用場景——你將學會如何將本章的知識擴展到更複雜的真實世界問題中。
確保你已經完全理解本章的內容再前進,因為下一章會直接建立在這些基礎概念之上。