לדלג לתוכן

הרעלת מטמון - Web Cache Poisoning - תרגול

הקדמה

התרגולים מבוססים על מעבדות PortSwigger Web Security Academy בנושא Web Cache Poisoning. עבדו בסדר המוצג - הרמה עולה בהדרגה.


תרגיל 1 - הרעלה עם כותרת שאינה במפתח (Practitioner)

מעבדה: Web cache poisoning with an unkeyed header

משימה:
1. גלו כותרת שאינה במפתח המטמון אבל משפיעה על התגובה
2. השתמשו בכותרת הזו כדי להזריק JavaScript זדוני
3. הפעילו alert(document.cookie) על כל מבקר

רמז: נסו את הכותרת X-Forwarded-Host ובדקו אם הערך מופיע בתגובה. אם כן, הזריקו payload שסוגר את התגית הקיימת ופותח תגית script.


תרגיל 2 - הרעלה עם עוגיה שאינה במפתח (Practitioner)

מעבדה: Web cache poisoning with an unkeyed cookie

משימה:
1. מצאו עוגייה שמשפיעה על התגובה אבל אינה במפתח המטמון
2. השתמשו בעוגייה כדי להזריק JavaScript
3. הפעילו alert(1)

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


תרגיל 3 - הרעלה עם מספר כותרות (Practitioner)

מעבדה: Web cache poisoning with multiple headers

משימה:
1. הרעלה זו דורשת שילוב של שתי כותרות
2. מצאו את שתי הכותרות שביחד גורמות להפניה לדומיין שלכם
3. ארחו JavaScript זדוני ב-exploit server
4. הרעילו את המטמון כך שכל מבקר יופנה לסקריפט שלכם

רמז: נסו שילוב של X-Forwarded-Host ו-X-Forwarded-Scheme. אחת גורמת להפניה, השנייה קובעת את היעד.


תרגיל 4 - הרעלה ממוקדת עם Vary (Practitioner)

מעבדה: Targeted web cache poisoning using an unknown header

משימה:
1. מצאו כותרת שאינה במפתח שמאפשרת הזרקה
2. שימו לב לכותרת Vary בתגובה - היא כוללת User-Agent
3. גלו את ה-User-Agent של הקורבן (חפשו בפונקציונליות הקיימת)
4. הרעילו את המטמון רק עבור ה-User-Agent הספציפי של הקורבן

רמז: בדקו אם יש פונקציונליות תגובות (comments) שבה אפשר להטמיע HTML שמדווח את ה-User-Agent.


תרגיל 5 - הרעלה דרך הבדלי נרמול URL (Practitioner)

מעבדה: Web cache poisoning via an unkeyed query string

משימה:
1. מצאו שהמטמון מתעלם מה-query string במפתח
2. הזריקו JavaScript דרך פרמטר query שמופיע בתגובה
3. הפעילו alert(1)

רמז: שלחו בקשה עם cache buster ב-query string. אם בקשה ללא ה-cache buster מחזירה hit עם אותה תגובה - ה-query string לא במפתח.


תרגיל 6 - הרעלה דרך פרמטר שאינו במפתח (Practitioner)

מעבדה: Web cache poisoning via an unkeyed query parameter

משימה:
1. חלק מהפרמטרים נכללים במפתח וחלק לא
2. מצאו פרמטר ספציפי שאינו במפתח (השתמשו ב-Param Miner)
3. הזריקו XSS דרך הפרמטר הזה

רמז: פרמטרי UTM (utm_content, utm_source) לעתים קרובות אינם במפתח המטמון.


תרגיל 7 - הסתרת פרמטרים (Practitioner)

מעבדה: Parameter cloaking

משימה:
1. מצאו הבדל בפרסור query string בין המטמון לשרת
2. השתמשו בנקודה-פסיק (;) כמפריד פרמטרים
3. הסתירו פרמטר זדוני שהמטמון מתעלם ממנו אבל השרת מעבד

רמז:

GET /js/geolocate.js?callback=setCountry&utm_content=x;callback=alert(1)

המטמון רואה callback=setCountry (מפתח). השרת רואה את ;callback=alert(1) כפרמטר נפרד ומשתמש בו.


תרגיל 8 - הרעלה דרך בקשת GET עם גוף (Practitioner)

מעבדה: Web cache poisoning via a fat GET request

משימה:
1. שלחו בקשת GET עם גוף שמכיל פרמטר
2. גלו שהשרת מעדיף את הפרמטר מהגוף על זה מה-URL
3. הרעילו את המטמון

רמז:

GET /js/geolocate.js?callback=setCountry HTTP/1.1
Content-Type: application/x-www-form-urlencoded

callback=alert(1)

תרגיל 9 - הרעלה דרך נרמול URL (Practitioner)

מעבדה: URL normalization

משימה:
1. מצאו הבדל בנרמול URL בין המטמון לשרת
2. השרת מנרמל /<script>alert(1)</script> ומחזיר 404 עם הנתיב בתגובה
3. המטמון שומר תחת הנתיב המקורי (לא מנורמל)
4. שלחו לקורבן לינק לנתיב המקודד שיוגש מהמטמון

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


תרגיל 10 - הרעלה דרך import דינמי (Expert)

מעבדה: Web cache poisoning to exploit a DOM vulnerability via a cache with strict cacheability criteria

משימה:
1. מצאו משאב שהמטמון שומר עם קריטריונים מחמירים
2. גלו כותרת שמשפיעה על התגובה
3. נצלו חולשת DOM שמשתמשת בנתונים מהתגובה
4. הפעילו alert(document.cookie)


תרגיל 11 - הרעלה משולבת עם כותרת Vary (Expert)

מעבדה: Combining web cache poisoning vulnerabilities

משימה:
1. מצאו שתי חולשות הרעלה נפרדות
2. שלבו אותן לשרשרת תקיפה אחת
3. הפעילו alert(document.cookie) על הקורבן


תרגיל בונוס - סריקה אוטומטית

כתבו סקריפט Python שמבצע:

#!/usr/bin/env python3
"""
כתבו סקריפט שמקבל URL ומבצע:
1. בדיקה אם יש מטמון (חיפוש כותרות X-Cache, Age, CF-Cache-Status)
2. בדיקה אם ה-query string במפתח המטמון
3. בדיקת רשימה של כותרות נפוצות שעלולות להיות מחוץ למפתח
4. דיווח על ממצאים

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

משאבים נוספים

  • PortSwigger Web Security Academy - Web Cache Poisoning: https://portswigger.net/web-security/web-cache-poisoning
  • מאמר המחקר של James Kettle: "Practical Web Cache Poisoning"
  • מאמר המחקר: "Web Cache Entanglement"
  • כלי Param Miner ל-Burp Suite