כלים מתקדמים ב-Burp Suite - תרגיל¶
הקדמה¶
בתרגיל זה נתקין ונגדיר את כל התוספים והכלים המתקדמים שלמדנו עליהם בהרצאה. בסיום התרגיל, סביבת Burp Suite שלכם תהיה מוכנה לעבודה מתקדמת לאורך כל הקורס.
חלק א - התקנת תוספים¶
משימה 1 - התקנת Jython¶
- הורידו את Jython Standalone מ-
https://www.jython.org/download - ב-Burp Suite, עברו ל-Extensions > Extensions Settings
- בשדה Python Environment, הגדירו את הנתיב לקובץ
jython-standalone-X.X.X.jar - לחצו Save
משימה 2 - התקנת תוספים מ-BApp Store¶
התקינו את התוספים הבאים מתוך BApp Store:
- Autorize - בדיקת הרשאות אוטומטית
- Logger++ - לוגים מתקדמים
- Turbo Intruder - פאזינג מהיר
- Param Miner - גילוי פרמטרים נסתרים
- Hackvertor - קידוד ופענוח
- JSON Web Tokens - עבודה עם JWT
ודאו שכל התוספים מסומנים כ-Loaded בטאב Extensions.
חלק ב - הגדרת Autorize¶
משימה 3 - בדיקת הרשאות ב-DVWA¶
דרישה מקדימה: ודאו ש-DVWA רץ (ראו שיעור קודם).
- פתחו דפדפן עם פרוקסי Burp והתחברו ל-DVWA עם המשתמש
gordonb:abc123 - העתיקו את עוגיית ה-PHPSESSID שלו
- בטאב Autorize, הדביקו את העוגייה בפורמט:
- הפעילו את Autorize (לחצו "Autorize is OFF" כדי להפוך ל-ON)
- כעת התחברו עם המשתמש
admin:password - גלשו לכל העמודים ב-DVWA
- בדקו את תוצאות 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 כאשר הסשן פג:
- עברו ל-Settings > Sessions > Macros > Add
- בחרו Record macro
- בצעו את השלבים הבאים בדפדפן:
- גלשו ל-
http://localhost:8081/login.php - הזינו
admin/passwordולחצו Login - במסך המאקרו, ודאו ששתי הבקשות מופיעות (GET login, POST login)
- שמרו את המאקרו בשם "DVWA Auto Login"
משימה 6 - הגדרת Session Handling Rule¶
- עברו ל-Settings > Sessions > Session handling rules > Add
- בשדה Rule description: "DVWA Auto Re-login"
- בטאב Rule Actions, לחצו Add > Check session is valid
- הגדירו:
- Issue current request
- Look for expression:
Login(בתגובה - אם מופיע "Login" סימן שהסשן פג) - If session is invalid: Run macro > בחרו "DVWA Auto Login"
- בטאב Scope:
- Tools scope: סמנו Repeater ו-Intruder
- URL scope: Use suite scope
אימות: שלחו בקשה ל-Repeater, מחקו את עוגיית הסשן, ושלחו - Burp אמור לבצע התחברות אוטומטית.
חלק ה - Turbo Intruder¶
משימה 7 - סקריפט סריקת ספריות¶
- שלחו בקשה ל-
http://localhost:8081/ב-Burp - לחצו ימני > Extensions > Turbo Intruder > Send to Turbo Intruder
- שנו את הבקשה כך שהנתיב יהיה
/%s:
- כתבו את הסקריפט הבא:
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)
- לחצו Attack
- רשמו אילו נתיבים החזירו קוד תגובה שונה מ-404
משימה 8 - סקריפט Race Condition¶
- שלחו בקשה POST ל-Repeater (למשל, בקשת שינוי סיסמה ב-DVWA)
- שלחו ל-Turbo Intruder
- כתבו סקריפט ששולח 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)
- הריצו ובדקו את התוצאות - האם כל התגובות זהות?
חלק ו - Param Miner¶
משימה 9 - גילוי פרמטרים נסתרים¶
- גלשו ל-Juice Shop (
http://localhost:3000) - בחרו בקשת GET לעמוד הראשי
- לחצו ימני > Extensions > Param Miner > Guess params
- הריצו את הסריקה עם ההגדרות הבאות:
- Guess URL params: מסומן
- Guess headers: מסומן
- Max params: 10
- המתינו לסיום הסריקה
- בדקו את הממצאים ב-Extensions > Param Miner > Output / Issues
שאלה: האם נמצאו פרמטרים או כותרות שמשנים את התנהגות האפליקציה?
חלק ז - Hackvertor¶
משימה 10 - תרגול קידוד מטענים¶
- שלחו בקשה ל-Repeater
- תרגלו את תגיות 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>
- לכל קידוד, שלחו את הבקשה ובדקו מה הגיע לשרת (ב-Logger++)
- נסו ליצור שרשור של קידודים שעוקף את פילטר ה-XSS של DVWA ברמת High
שאלות סיכום¶
- מה ההבדל בין Intruder המובנה לבין Turbo Intruder? מתי תעדיפו כל אחד מהם?
- כיצד Autorize עוזר לזהות בעיות IDOR שקשה למצוא ידנית?
- תארו תרחיש שבו מאקרו עם חילוץ טוקן CSRF חיוני לביצוע בדיקה ב-Intruder
- כיצד חוקי Match and Replace יכולים לעזור בבדיקת Clickjacking?
- מה היתרון של Hackvertor על פני קידוד ידני ב-Decoder?