לדלג לתוכן

כלים מתקדמים ב-Burp Suite - תרגיל

הקדמה

בתרגיל זה נתקין ונגדיר את כל התוספים והכלים המתקדמים שלמדנו עליהם בהרצאה. בסיום התרגיל, סביבת Burp Suite שלכם תהיה מוכנה לעבודה מתקדמת לאורך כל הקורס.


חלק א - התקנת תוספים

משימה 1 - התקנת Jython

  1. הורידו את Jython Standalone מ-https://www.jython.org/download
  2. ב-Burp Suite, עברו ל-Extensions > Extensions Settings
  3. בשדה Python Environment, הגדירו את הנתיב לקובץ jython-standalone-X.X.X.jar
  4. לחצו Save

משימה 2 - התקנת תוספים מ-BApp Store

התקינו את התוספים הבאים מתוך BApp Store:

  1. Autorize - בדיקת הרשאות אוטומטית
  2. Logger++ - לוגים מתקדמים
  3. Turbo Intruder - פאזינג מהיר
  4. Param Miner - גילוי פרמטרים נסתרים
  5. Hackvertor - קידוד ופענוח
  6. JSON Web Tokens - עבודה עם JWT

ודאו שכל התוספים מסומנים כ-Loaded בטאב Extensions.


חלק ב - הגדרת Autorize

משימה 3 - בדיקת הרשאות ב-DVWA

דרישה מקדימה: ודאו ש-DVWA רץ (ראו שיעור קודם).

  1. פתחו דפדפן עם פרוקסי Burp והתחברו ל-DVWA עם המשתמש gordonb:abc123
  2. העתיקו את עוגיית ה-PHPSESSID שלו
  3. בטאב Autorize, הדביקו את העוגייה בפורמט:
Cookie: PHPSESSID=<the-cookie-value>; security=high
  1. הפעילו את Autorize (לחצו "Autorize is OFF" כדי להפוך ל-ON)
  2. כעת התחברו עם המשתמש admin:password
  3. גלשו לכל העמודים ב-DVWA
  4. בדקו את תוצאות Autorize - אילו עמודים נגישים גם למשתמש gordonb

שאלה: האם מצאתם עמודים שמשתמש gordonb לא אמור לגשת אליהם אך הגישה מותרת?


חלק ג - חוקי Match and Replace

משימה 4 - הגדרת חוקים

הגדירו את חוקי Match and Replace הבאים:

חוק 1 - הוספת כותרת X-Forwarded-For:
- Type: Request header
- Match: (ריק)
- Replace: X-Forwarded-For: 127.0.0.1

חוק 2 - הסרת CSP מתגובות:
- Type: Response header
- Match: Content-Security-Policy:.*
- Replace: (ריק)

חוק 3 - הסרת X-Frame-Options:
- Type: Response header
- Match: X-Frame-Options:.*
- Replace: (ריק)

אימות: גלשו לאתר שמחזיר כותרות CSP ו-X-Frame-Options. ודאו ב-Burp Proxy שהכותרות הוסרו מהתגובה (השוו בין הבקשה המקורית בטאב HTTP History לבין מה שהדפדפן קיבל).


חלק ד - מאקרו לסשן

משימה 5 - יצירת מאקרו התחברות

צרו מאקרו שמבצע התחברות אוטומטית ל-DVWA כאשר הסשן פג:

  1. עברו ל-Settings > Sessions > Macros > Add
  2. בחרו Record macro
  3. בצעו את השלבים הבאים בדפדפן:
  4. גלשו ל-http://localhost:8081/login.php
  5. הזינו admin / password ולחצו Login
  6. במסך המאקרו, ודאו ששתי הבקשות מופיעות (GET login, POST login)
  7. שמרו את המאקרו בשם "DVWA Auto Login"

משימה 6 - הגדרת Session Handling Rule

  1. עברו ל-Settings > Sessions > Session handling rules > Add
  2. בשדה Rule description: "DVWA Auto Re-login"
  3. בטאב Rule Actions, לחצו Add > Check session is valid
  4. הגדירו:
  5. Issue current request
  6. Look for expression: Login (בתגובה - אם מופיע "Login" סימן שהסשן פג)
  7. If session is invalid: Run macro > בחרו "DVWA Auto Login"
  8. בטאב Scope:
  9. Tools scope: סמנו Repeater ו-Intruder
  10. URL scope: Use suite scope

אימות: שלחו בקשה ל-Repeater, מחקו את עוגיית הסשן, ושלחו - Burp אמור לבצע התחברות אוטומטית.


חלק ה - Turbo Intruder

משימה 7 - סקריפט סריקת ספריות

  1. שלחו בקשה ל-http://localhost:8081/ ב-Burp
  2. לחצו ימני > Extensions > Turbo Intruder > Send to Turbo Intruder
  3. שנו את הבקשה כך שהנתיב יהיה /%s:
GET /%s HTTP/1.1
Host: localhost:8081
  1. כתבו את הסקריפט הבא:
def queueRequests(target, wordlists):
    engine = RequestEngine(
        endpoint=target.endpoint,
        concurrentConnections=10,
        requestsPerConnection=100,
        pipeline=True
    )

    wordlist = [
        "admin", "login", "config", "backup", "test",
        "api", "debug", "console", "phpinfo.php", "info.php",
        "robots.txt", ".htaccess", "sitemap.xml", "server-status",
        "wp-admin", "wp-login.php", ".git/HEAD", ".env",
        "swagger.json", "api-docs"
    ]

    for word in wordlist:
        engine.queue(target.req, word)

def handleResponse(req, interesting):
    if req.status != 404:
        table.add(req)
  1. לחצו Attack
  2. רשמו אילו נתיבים החזירו קוד תגובה שונה מ-404

משימה 8 - סקריפט Race Condition

  1. שלחו בקשה POST ל-Repeater (למשל, בקשת שינוי סיסמה ב-DVWA)
  2. שלחו ל-Turbo Intruder
  3. כתבו סקריפט ששולח 20 בקשות זהות במקביל:
def queueRequests(target, wordlists):
    engine = RequestEngine(
        endpoint=target.endpoint,
        concurrentConnections=20,
        requestsPerConnection=1,
        pipeline=False
    )

    for i in range(20):
        engine.queue(target.req, gate="race1")

    engine.openGate("race1")

def handleResponse(req, interesting):
    table.add(req)
  1. הריצו ובדקו את התוצאות - האם כל התגובות זהות?

חלק ו - Param Miner

משימה 9 - גילוי פרמטרים נסתרים

  1. גלשו ל-Juice Shop (http://localhost:3000)
  2. בחרו בקשת GET לעמוד הראשי
  3. לחצו ימני > Extensions > Param Miner > Guess params
  4. הריצו את הסריקה עם ההגדרות הבאות:
  5. Guess URL params: מסומן
  6. Guess headers: מסומן
  7. Max params: 10
  8. המתינו לסיום הסריקה
  9. בדקו את הממצאים ב-Extensions > Param Miner > Output / Issues

שאלה: האם נמצאו פרמטרים או כותרות שמשנים את התנהגות האפליקציה?


חלק ז - Hackvertor

משימה 10 - תרגול קידוד מטענים

  1. שלחו בקשה ל-Repeater
  2. תרגלו את תגיות Hackvertor הבאות:

קידוד מטען XSS בדרכים שונות:

# קידוד URL:
<@urlencode><script>alert(document.cookie)</script><@/urlencode>

# קידוד Base64:
<@base64><script>alert(1)</script><@/base64>

# קידוד HTML entities:
<@htmlencode><img src=x onerror=alert(1)><@/htmlencode>

# קידוד כפול (URL):
<@urlencode><@urlencode><script>alert(1)</script><@/urlencode><@/urlencode>

# קידוד Unicode:
<@unicode_escapes>alert<@/unicode_escapes>
  1. לכל קידוד, שלחו את הבקשה ובדקו מה הגיע לשרת (ב-Logger++)
  2. נסו ליצור שרשור של קידודים שעוקף את פילטר ה-XSS של DVWA ברמת High

שאלות סיכום

  1. מה ההבדל בין Intruder המובנה לבין Turbo Intruder? מתי תעדיפו כל אחד מהם?
  2. כיצד Autorize עוזר לזהות בעיות IDOR שקשה למצוא ידנית?
  3. תארו תרחיש שבו מאקרו עם חילוץ טוקן CSRF חיוני לביצוע בדיקה ב-Intruder
  4. כיצד חוקי Match and Replace יכולים לעזור בבדיקת Clickjacking?
  5. מה היתרון של Hackvertor על פני קידוד ידני ב-Decoder?