לדלג לתוכן

תקיפת JWT - תרגיל

תרגיל 1: עקיפת אלגוריתם None

רקע

קיבלתם גישה לאפליקציה כמשתמש רגיל. לאחר ההתחברות, האפליקציה מנפיקה טוקן JWT. פאנל הניהול נמצא ב-/admin ודורש role: admin בטוקן.

משימות

  1. היכנסו לאפליקציה עם הפרטים wiener:peter
  2. חלצו את טוקן ה-JWT מתוך ה-cookie או ה-header
  3. פענחו את הטוקן באמצעות jwt.io וזהו את המבנה
  4. שנו את ה-alg ל-"none" ואת ה-role ל-"admin"
  5. הסירו את החתימה (השאירו נקודה בסוף)
  6. שלחו את הטוקן המזויף ובדקו אם קיבלתם גישה ל-/admin

מעבדת PortSwigger

בצעו את המעבדה:
JWT authentication bypass via unverified signature

ולאחר מכן:
JWT authentication bypass via flawed signature verification


תרגיל 2: תקיפת בלבול אלגוריתמים - Algorithm Confusion

רקע

האפליקציה משתמשת ב-RS256 לחתימת טוקנים. המפתח הציבורי חשוף.

משימות

  1. מצאו את המפתח הציבורי של השרת (בדקו את /.well-known/jwks.json או /jwks.json)
  2. המירו את המפתח מפורמט JWK לפורמט PEM
  3. שנו את האלגוריתם בטוקן מ-RS256 ל-HS256
  4. שנו את ה-payload כך שתהיו אדמין
  5. חתמו על הטוקן עם HS256 תוך שימוש במפתח הציבורי כסוד
  6. שלחו את הטוקן וגשו לפאנל הניהול

כתבו סקריפט Python שמבצע את כל השלבים

# השלימו את הסקריפט
import jwt
import requests

TARGET = "https://TARGET_URL"

def solve():
    # שלב 1: התחברות וקבלת טוקן
    # ...

    # שלב 2: השגת המפתח הציבורי
    # ...

    # שלב 3: יצירת טוקן עם algorithm confusion
    # ...

    # שלב 4: גישה לפאנל ניהול
    # ...
    pass

מעבדת PortSwigger

בצעו את המעבדות:
- JWT authentication bypass via algorithm confusion
- JWT authentication bypass via algorithm confusion with no exposed key


תרגיל 3: ניצול פרמטר kid

חלק א - מעבר ספריות - Path Traversal

  1. זהו אפליקציה שמשתמשת בפרמטר kid ב-JWT
  2. בדקו אם ניתן לבצע path traversal דרך ה-kid
  3. הצביעו את ה-kid על /dev/null וחתמו עם מחרוזת ריקה
  4. השיגו גישת אדמין

חלק ב - הזרקת SQL

  1. בדקו אם פרמטר ה-kid מועבר לשאילתת SQL
  2. השתמשו ב-UNION injection כדי להחליף את מפתח האימות
  3. כתבו payload שמחזיר ערך ידוע כמפתח
  4. חתמו את הטוקן עם הערך שהזרקתם

כתבו סקריפט

# השלימו את הסקריפט עבור שתי התקיפות
import jwt

def kid_traversal_attack(original_token, target_url):
    """פתרון עבור path traversal"""
    # ...
    pass

def kid_sqli_attack(original_token, target_url):
    """פתרון עבור SQL injection"""
    # ...
    pass

מעבדת PortSwigger

בצעו את המעבדה:
JWT authentication bypass via kid header path traversal


תרגיל 4: הזרקת JWK ו-JKU

חלק א - הזרקת JWK

  1. צרו זוג מפתחות RSA חדש
  2. הטמיעו את המפתח הציבורי שלכם בתוך ה-header באמצעות פרמטר jwk
  3. שנו את ה-payload לקבלת הרשאות אדמין
  4. חתמו את הטוקן עם המפתח הפרטי שלכם

חלק ב - הזרקת JKU

  1. הקימו שרת שמגיש JWK Set (השתמשו ב-Burp Collaborator או ב-exploit server)
  2. שנו את ה-jku ב-header להצביע על השרת שלכם
  3. חתמו את הטוקן ובדקו אם השרת מאמת אותו

מעבדת PortSwigger

בצעו את המעבדות:
- JWT authentication bypass via jwk header injection
- JWT authentication bypass via jku header injection


תרגיל 5: שרשור JWT עם SSRF

תרחיש

אפליקציה משתמשת ב-JWT עם פרמטר jku. השרת בודק שה-URL מתחיל ב-https://trusted-server.com, אך קיים open redirect ב-/redirect?url=.

משימות

  1. זהו את בדיקת ה-URL שהשרת מבצע על ה-jku
  2. מצאו את נקודת ה-open redirect באפליקציה
  3. שרשרו את ה-open redirect עם ה-jku כדי להפנות לשרת שלכם:
    https://trusted-server.com/redirect?url=https://attacker.com/jwks.json
    
  4. ארחו JWK Set בשרת שלכם
  5. חתמו טוקן עם הרשאות אדמין
  6. גשו לפאנל הניהול

שאלות נוספות

  1. מה קורה אם השרת בודק את ה-URL גם ברמת ה-domain? אילו טכניקות עקיפה תנסו?
  2. האם ניתן לשלב את ה-SSRF כדי לגשת למשאבים פנימיים? תנו דוגמה
  3. כיצד הייתם מונעים תקיפה זו כמפתחים?

תרגיל 6: שבירת סוד HMAC

משימות

  1. קיבלתם טוקן JWT חתום ב-HS256
  2. השתמשו ב-hashcat לשבירת הסוד:
    hashcat -m 16500 jwt_token.txt /path/to/wordlist.txt
    
  3. לחילופין, השתמשו ב-jwt_tool:
    python3 jwt_tool.py <token> -C -d /path/to/wordlist.txt
    
  4. לאחר שמצאתם את הסוד, צרו טוקן חדש עם הרשאות אדמין
  5. אילו מילוני סיסמאות הכי יעילים למטרה זו?

תרגיל בונוס: סקריפט סריקה אוטומטי

כתבו סקריפט Python מקיף שמקבל טוקן JWT וכתובת יעד, ומבצע את כל הבדיקות הבאות באופן אוטומטי:

  1. פענוח והדפסת תוכן הטוקן
  2. בדיקת none algorithm (כל הווריאציות)
  3. בדיקת kid path traversal
  4. בדיקת kid SQL injection
  5. ניסיון שבירת סוד HMAC עם מילון נפוצים
  6. בדיקת קבלת טוקנים שפג תוקפם

הסקריפט צריך להדפיס דוח מסודר של כל הממצאים.