לדלג לתוכן

עקיפת 2FA - תרגיל

תרגיל 1: מניפולציית תגובה

רקע

אפליקציה מיישמת 2FA עם קוד בן 4 ספרות. לאחר הזנת סיסמה נכונה, המשתמש מופנה לדף 2FA.

משימות

  1. היכנסו עם הפרטים wiener:peter
  2. בשלב ה-2FA, הזינו קוד שגוי ויירטו את התגובה ב-Burp
  3. נתחו את התגובה - מה מציין הצלחה ומה כישלון?
  4. שנו את התגובה כך שתציין הצלחה
  5. בדקו אם קיבלתם גישה

שאלות

  1. מה ה-status code בתגובת הצלחה לעומת כישלון?
  2. האם יש הבדל בגוף התגובה?
  3. האם יש redirect שונה?

מעבדת PortSwigger

בצעו את המעבדה:
2FA simple bypass


תרגיל 2: כוח גס על קוד 2FA

רקע

אפליקציה דורשת קוד 2FA בן 4 ספרות. יש הגבלת ניסיונות, אך ניתן לעקוף אותה.

משימות

  1. היכנסו עם הפרטים שלכם והשלימו 2FA כדי להבין את הזרימה
  2. נסו להיכנס עם carlos:montoya
  3. בשלב ה-2FA, בדקו:
  4. כמה ניסיונות מותרים לפני חסימה?
  5. מה קורה לאחר חסימה? (נעילה לזמן? ניתוק? ביטול?)
  6. האם הכניסה מחדש מאפסת את מונה הניסיונות?
  7. הגדירו Macro ב-Burp שמתחבר מחדש לאחר כל X ניסיונות
  8. הריצו Intruder עם מספרים 0000-9999

הגדרת Macro ב-Burp

1. Project Options -> Sessions -> Session Handling Rules -> Add
2. Rule Actions -> Add -> Run a Macro
3. צרו Macro שכולל:
   - GET /login
   - POST /login (עם credentials)
   - GET /2fa
4. הגדירו שה-Rule יפעל עבור Intruder בלבד
5. הגדירו Scope לכתובת המטרה

מעבדת PortSwigger

בצעו את המעבדה:
2FA broken logic

ולאחר מכן:
2FA bypass using a brute-force attack


תרגיל 3: דילוג על שלב 2FA

רקע

אפליקציה מיישמת 2FA בזרימה הבאה: login -> 2fa -> dashboard. בדקו אם ניתן לדלג על שלב ה-2FA.

משימות

  1. היכנסו עם חשבון שלכם והשלימו את כל התהליך. תעדו את כל ה-URLs
  2. נתקו את הסשן וכנסו שוב עם הסיסמה בלבד
  3. במקום לגשת לדף ה-2FA, נסו לגשת ישירות ל:
  4. /dashboard
  5. /my-account
  6. /profile
  7. /api/user
  8. בדקו גם שינוי cookies:
  9. האם יש cookie שמציין 2fa_pending?
  10. מה קורה אם מוחקים אותו?

מעבדת PortSwigger

בצעו את המעבדה:
2FA simple bypass


תרגיל 4: עקיפת 2FA עם שינוי פרמטרים

רקע

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

משימות

  1. היכנסו עם החשבון שלכם (wiener:peter)
  2. כשאתם בדף ה-2FA, יירטו את בקשת האימות
  3. בדקו את הפרמטרים - האם יש שדה שמזהה את המשתמש?
  4. שנו את שדה המשתמש ל-carlos תוך שימוש בקוד ה-2FA שלכם
  5. בדקו אם קיבלתם גישה לחשבון של carlos

דוגמה

# בקשה מקורית
POST /verify-2fa HTTP/1.1
Cookie: session=abc123

code=123456&user=wiener

# בקשה מותקפת
POST /verify-2fa HTTP/1.1
Cookie: session=abc123

code=123456&user=carlos

תרגיל 5: ניצול קודי גיבוי

רקע

משתמש הפעיל 2FA וקיבל 10 קודי גיבוי בני 6 ספרות. אין הגבלת ניסיונות על קודי גיבוי.

משימות

  1. חשבו מספר הקומבינציות: 10 קודים מתוך 1,000,000 - מה הסיכוי?
  2. כתבו סקריפט Python שמבצע brute force על קודי גיבוי
  3. הריצו את הסקריפט ובדקו כמה זמן לוקח
  4. האם ניתן להריץ בקשות במקביל? אם כן - שפרו את הסקריפט
# השלימו את הסקריפט
import requests
from concurrent.futures import ThreadPoolExecutor

def try_backup_code(session_cookie, code):
    # ...
    pass

def brute_force_backup(target_url, session_cookie):
    # ...
    pass

תרגיל 6: תרחיש מורכב - שרשור טכניקות

תרחיש

אפליקציה עם ההגנות הבאות:
- 2FA עם קוד בן 6 ספרות
- הגבלת 3 ניסיונות לפני נעילה ל-60 שניות
- כתובת IP נחסמת לאחר 10 ניסיונות כושלים

משימות

  1. חשבו כמה זמן ייקח לעבור על כל הקומבינציות עם ההגבלות?
  2. בדקו אם ניתן לעקוף את הגבלת ה-IP עם headers (X-Forwarded-For)
  3. בדקו אם התחברות מוצלחת עם קוד נכון מאפסת את המונה
  4. כתבו סקריפט שמשלב:
  5. סיבוב IP באמצעות headers
  6. השהיה חכמה בין ניסיונות
  7. התחברות מחדש לאחר נעילה

בונוס

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


תרגיל 7: כתיבת דוח חולשות

בחרו אפליקציה (מעבדה או CTF) ובצעו בדיקה מלאה של מנגנון ה-2FA. כתבו דוח שכולל:

  1. תיאור מנגנון ה-2FA
  2. בדיקות שבוצעו (כולל אלו שלא מצאו חולשה)
  3. חולשות שנמצאו עם PoC
  4. דירוג חומרה (CVSS)
  5. המלצות תיקון מפורטות

תבנית דוח

## ממצא: [שם החולשה]

### חומרה: [קריטית/גבוהה/בינונית/נמוכה]

### תיאור
[תיאור החולשה]

### שלבי שחזור
1. ...
2. ...

### השפעה
[מה תוקף יכול לעשות]

### הוכחת יתכנות
[בקשות HTTP / קוד]

### המלצת תיקון
[כיצד לתקן]