לדלג לתוכן

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

תרגיל 1: הbypass אלגוריתם None

רקע

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

משימות

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

מעבדת PortSwigger

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

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


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

רקע

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

משימות

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

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

# Complete the script
import jwt
import requests

TARGET = "https://TARGET_URL"

def solve():
    # Step 1: Log in and obtain a token
    # ...

    # Step 2: Obtain the public key
    # ...

    # Step 3: Create a token with algorithm confusion
    # ...

    # Step 4: Access the admin panel
    # ...
    pass

מעבדת PortSwigger

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


תרגיל 3: הexploit פרמטר kid

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

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

חלק ב - injection SQL

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

כתבו סקריפט

# Complete the script for both attacks
import jwt

def kid_traversal_attack(original_token, target_url):
    """Solution for path traversal"""
    # ...
    pass

def kid_sqli_attack(original_token, target_url):
    """Solution for SQL injection"""
    # ...
    pass

מעבדת PortSwigger

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


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

חלק א - injection JWK

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

חלק ב - injection 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: הchaining 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? אילו טכניקות bypass תנסו?
  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. הdecoding והדפסת תוכן הטוקן
  2. בדיקת none algorithm (כל הווריאציות)
  3. בדיקת kid path traversal
  4. בדיקת kid SQL injection
  5. ניסיון שבירת סוד HMAC עם מילון נפוצים
  6. בדיקת קבלת טוקנים שפג תוקפם

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