לדלג לתוכן

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

תרגיל 1: הpoisoning 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 ונסו לחזות את הטוקן

רמזים

# Try the following checks:
import hashlib
import base64

token = "THE_TOKEN_HERE"

# Check Base64
try:
    print(base64.b64decode(token))
except:
    pass

# Check MD5 of 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: הbypass אימות מייל

רקע

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

משימות

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

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

רקע

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

משימות

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

סקריפט

# Complete
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}")

# Send 20 requests in parallel
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: הexploit 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)
- דירוג חומרה
- המלצות תיקון