לדלג לתוכן

תנאי מרוץ - Race Conditions - תרגול

תרגיל 1 - עקיפת מגבלת שימוש בקוד הנחה (Apprentice)

מעבדה: Limit overrun race conditions (PortSwigger)

רקע:
חנות מקוונת מאפשרת שימוש בקוד הנחה PROMO20 פעם אחת בלבד. המטרה: להחיל את ההנחה מספר פעמים ולרכוש מוצר במחיר מופחת.

שלבים:

  1. התחברו לחשבון עם הפרטים הנתונים
  2. הוסיפו מוצר לעגלה
  3. החילו את קוד ההנחה PROMO20 פעם אחת דרך Burp ולכדו את הבקשה
  4. שלחו את הבקשה ל-Burp Repeater
  5. שכפלו את הטאב 20 פעמים (Ctrl+R)
  6. בחרו את כל הטאבים וצרו קבוצה
  7. הגדירו את מצב השליחה ל-"Send group in parallel (single-packet attack)"
  8. שלחו את הקבוצה
  9. בדקו את העגלה - כמה פעמים הוחלה ההנחה?

שאלות:
- למה חשוב להשתמש ב-single-packet attack ולא בשליחה רגילה?
- מה חלון הזמן שמנצלים כאן?


תרגיל 2 - עקיפת אימות מרובה שלבים (Practitioner)

מעבדה: Bypassing rate limits via race conditions (PortSwigger)

רקע:
מערכת כניסה מגבילה את מספר הניסיונות לסיסמה. המטרה: לנצל תנאי מרוץ כדי לעקוף את המגבלה ולמצוא את הסיסמה הנכונה.

שלבים:

  1. נסו להתחבר עם סיסמה שגויה מספר פעמים וזהו את המגבלה
  2. הבינו את המנגנון - האם המגבלה נבדקת לפני או אחרי אימות הסיסמה?
  3. צרו סקריפט ב-Turbo Intruder ששולח מספר ניסיונות סיסמה בו-זמנית
  4. השתמשו ברשימת הסיסמאות הנתונה
  5. שלחו קבוצות של בקשות עם סיסמאות שונות בתקיפת single-packet

רמז: אם המגבלה היא 3 ניסיונות, שלחו קבוצות של 3 סיסמאות בו-זמנית. כולן יגיעו לפני שהמונה מתעדכן.


תרגיל 3 - תנאי מרוץ מרובה נקודות קצה (Practitioner)

מעבדה: Multi-endpoint race conditions (PortSwigger)

רקע:
חנות מקוונת עם מנגנון תשלום בשני שלבים - הוספה לעגלה ותשלום. המטרה: לרכוש מוצר שמחירו גבוה מהיתרה שלכם.

שלבים:

  1. בדקו את תהליך הרכישה התקין ומצאו את נקודות הקצה הרלוונטיות
  2. הבינו את הסדר: הוספה לעגלה, הוספת קוד הנחה, ביצוע תשלום
  3. הוסיפו מוצר זול לעגלה והכינו את בקשת התשלום
  4. צרו קבוצת בקשות שכוללת:
  5. בקשה להחלפת המוצר בעגלה למוצר יקר
  6. בקשת תשלום
  7. שלחו את שתי הבקשות במקביל (single-packet attack)
  8. בדקו אם התשלום עבר על המחיר הזול בעוד שקיבלתם את המוצר היקר

רמז: ייתכן שתצטרכו לנסות מספר פעמים. תנאי מרוץ אינם דטרמיניסטיים.


תרגיל 4 - תנאי מרוץ של בנייה חלקית (Practitioner)

מעבדה: Partial construction race conditions (PortSwigger)

רקע:
אפליקציה שבה תהליך ההרשמה כולל מספר שלבים. המטרה: לגשת לחשבון לפני שההגדרות שלו הושלמו.

שלבים:

  1. בחנו את תהליך ההרשמה ומצאו את כל הבקשות שנשלחות
  2. זהו את נקודת הקצה ליצירת משתמש ואת נקודת הקצה להגדרת הרשאות
  3. נסו לשלוח בקשת כניסה מיד אחרי בקשת ההרשמה - לפני שההרשאות הוגדרו
  4. השתמשו ב-Turbo Intruder עם שתי שלבים:
  5. שלב 1: שליחת בקשת הרשמה
  6. שלב 2: שליחת מספר בקשות כניסה מיד לאחר מכן
  7. בדקו מה ההרשאות שקיבלתם

תרגיל 5 - תקיפה רגישה לזמן (Practitioner)

מעבדה: Exploiting time-sensitive vulnerabilities (PortSwigger)

רקע:
מערכת איפוס סיסמה שבה הטוקן נוצר על בסיס חותמת זמן. המטרה: ליצור טוקן איפוס זהה לזה של משתמש אחר.

שלבים:

  1. בקשו איפוס סיסמה לחשבון שלכם ובדקו את הטוקן שקיבלתם
  2. בקשו איפוס נוסף ובדקו אם הטוקנים שונים (וודאו שזה מבוסס זמן)
  3. הכינו שתי בקשות איפוס - אחת לחשבון שלכם ואחת לחשבון הקורבן
  4. שלחו את שתי הבקשות בו-זמנית באמצעות single-packet attack
  5. בדקו את הטוקן שקיבלתם ונסו להשתמש בו עבור חשבון הקורבן

רמז: הטוקנים צריכים להיות זהים אם נוצרו באותה שנייה עם אותו אלגוריתם.


תרגיל 6 - כתיבת סקריפט Turbo Intruder מתקדם (Expert)

כתבו סקריפט Turbo Intruder שמבצע את הפעולות הבאות:

  1. שליחת בקשת כניסה (login) עם פרטים תקינים
  2. חילוץ ה-session cookie מהתגובה
  3. שימוש בה-cookie לשליחת 30 בקשות מקביליות של מימוש כרטיס מתנה
  4. דיווח על מספר הבקשות שהצליחו

תבנית לסקריפט:

def queueRequests(target, wordlists):
    engine = RequestEngine(
        endpoint=target.endpoint,
        concurrentConnections=1,
        engine=Engine.BURP2
    )

    # שלב 1: התחברות
    login_req = '''POST /login HTTP/2
Host: TARGET_HOST
Content-Type: application/x-www-form-urlencoded

username=wiener&password=peter'''

    engine.queue(login_req, gate='login')
    engine.openGate('login')

    # TODO: חלצו את ה-session cookie מהתגובה
    # TODO: שלחו 30 בקשות מקביליות עם ה-cookie

def handleResponse(req, interesting):
    table.add(req)

השלימו את הסקריפט ובדקו אותו.


תרגיל 7 - תרגול כולל (Expert)

תרחיש:
חנות מקוונת עם היתרה 50 דולר. מוצר יעד במחיר 1337 דולר. יש לכם קוד הנחה חד-פעמי של 20%.

מטרה: רכשו את המוצר.

רמזים:

  • שלב 1: החילו את ההנחה מספר פעמים באמצעות תנאי מרוץ
  • שלב 2: אם ההנחה לא מספיקה, חפשו תנאי מרוץ נוסף בתהליך התשלום
  • שלב 3: שלבו בין מספר טכניקות מרוץ

שאלות מנחות:
- כמה פעמים צריך להחיל את ההנחה כדי לרדת מתחת ל-50 דולר?
- האם יש נקודות קצה נוספות שאפשר לנצל?
- איך משלבים תקיפת single-packet עם מספר סוגי בקשות שונים?