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 滲透測試 將整合所有技術,從資訊收集到漏洞利用到報告撰寫,一條龍完成。 完成本章後,你將能夠:

  1. 🎯 理解核心原理:掌握 JWT 與 Session 安全、動手實作、串聯所學、進階探索、專案實戰 的完整知識體系
  2. 💻 動手實作:使用 Python/JavaScript 寫出可運行的實作程式碼
  3. 🔍 除錯與分析:遇到相關問題時能快速定位根本原因
  4. 🏗️ 整合應用:將本章所學整合到你的實際專案中

銜接下一章

本章深入探討了 JWT 與 Session 安全 的核心概念與實作方法。下一章將在此基礎上,進一步探索更進階的應用場景——你將學會如何將本章的知識擴展到更複雜的真實世界問題中。

確保你已經完全理解本章的內容再前進,因為下一章會直接建立在這些基礎概念之上。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!