עקיפת 2FA - תרגיל¶
תרגיל 1: מניפולציית תגובה¶
רקע¶
אפליקציה מיישמת 2FA עם קוד בן 4 ספרות. לאחר הזנת סיסמה נכונה, המשתמש מופנה לדף 2FA.
משימות¶
- היכנסו עם הפרטים
wiener:peter - בשלב ה-2FA, הזינו קוד שגוי ויירטו את התגובה ב-Burp
- נתחו את התגובה - מה מציין הצלחה ומה כישלון?
- שנו את התגובה כך שתציין הצלחה
- בדקו אם קיבלתם גישה
שאלות¶
- מה ה-status code בתגובת הצלחה לעומת כישלון?
- האם יש הבדל בגוף התגובה?
- האם יש redirect שונה?
מעבדת PortSwigger¶
בצעו את המעבדה:
2FA simple bypass
תרגיל 2: כוח גס על קוד 2FA¶
רקע¶
אפליקציה דורשת קוד 2FA בן 4 ספרות. יש הגבלת ניסיונות, אך ניתן לעקוף אותה.
משימות¶
- היכנסו עם הפרטים שלכם והשלימו 2FA כדי להבין את הזרימה
- נסו להיכנס עם
carlos:montoya - בשלב ה-2FA, בדקו:
- כמה ניסיונות מותרים לפני חסימה?
- מה קורה לאחר חסימה? (נעילה לזמן? ניתוק? ביטול?)
- האם הכניסה מחדש מאפסת את מונה הניסיונות?
- הגדירו Macro ב-Burp שמתחבר מחדש לאחר כל X ניסיונות
- הריצו 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.
משימות¶
- היכנסו עם חשבון שלכם והשלימו את כל התהליך. תעדו את כל ה-URLs
- נתקו את הסשן וכנסו שוב עם הסיסמה בלבד
- במקום לגשת לדף ה-2FA, נסו לגשת ישירות ל:
/dashboard/my-account/profile/api/user- בדקו גם שינוי cookies:
- האם יש cookie שמציין
2fa_pending? - מה קורה אם מוחקים אותו?
מעבדת PortSwigger¶
בצעו את המעבדה:
2FA simple bypass
תרגיל 4: עקיפת 2FA עם שינוי פרמטרים¶
רקע¶
אפליקציה בודקת 2FA, אך פרמטר בבקשה מציין את המשתמש. ניתן לשנות אותו.
משימות¶
- היכנסו עם החשבון שלכם (
wiener:peter) - כשאתם בדף ה-2FA, יירטו את בקשת האימות
- בדקו את הפרמטרים - האם יש שדה שמזהה את המשתמש?
- שנו את שדה המשתמש ל-
carlosתוך שימוש בקוד ה-2FA שלכם - בדקו אם קיבלתם גישה לחשבון של 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 ספרות. אין הגבלת ניסיונות על קודי גיבוי.
משימות¶
- חשבו מספר הקומבינציות: 10 קודים מתוך 1,000,000 - מה הסיכוי?
- כתבו סקריפט Python שמבצע brute force על קודי גיבוי
- הריצו את הסקריפט ובדקו כמה זמן לוקח
- האם ניתן להריץ בקשות במקביל? אם כן - שפרו את הסקריפט
# השלימו את הסקריפט
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 ניסיונות כושלים
משימות¶
- חשבו כמה זמן ייקח לעבור על כל הקומבינציות עם ההגבלות?
- בדקו אם ניתן לעקוף את הגבלת ה-IP עם headers (
X-Forwarded-For) - בדקו אם התחברות מוצלחת עם קוד נכון מאפסת את המונה
- כתבו סקריפט שמשלב:
- סיבוב IP באמצעות headers
- השהיה חכמה בין ניסיונות
- התחברות מחדש לאחר נעילה
בונוס¶
מצאו דרך לזהות את הקוד הנכון מבלי לנחש את כולם:
- האם זמן התגובה שונה עבור קוד נכון?
- האם גודל התגובה שונה?
- האם יש דליפת מידע בהודעות שגיאה?
תרגיל 7: כתיבת דוח חולשות¶
בחרו אפליקציה (מעבדה או CTF) ובצעו בדיקה מלאה של מנגנון ה-2FA. כתבו דוח שכולל:
- תיאור מנגנון ה-2FA
- בדיקות שבוצעו (כולל אלו שלא מצאו חולשה)
- חולשות שנמצאו עם PoC
- דירוג חומרה (CVSS)
- המלצות תיקון מפורטות