לדלג לתוכן

הCache Poisoning - Web Cache Poisoning - תרגול

הקדמה

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


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

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

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

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


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

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

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

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


תרגיל 3 - poisoning עם מספר headers (Practitioner)

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

מעבדה: Parameter cloaking

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

רמז:

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

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


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

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

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

רמז:

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

callback=alert(1)

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

מעבדה: URL normalization

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

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


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

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

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


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

מעבדה: Combining web cache poisoning vulnerabilities

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


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

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

#!/usr/bin/env python3
"""
Write a script that receives a URL and performs:
1. Checking whether there is a cache (searching for X-Cache, Age, CF-Cache-Status headers)
2. Checking whether the query string is in the cache key
3. Checking a list of common headers that might be outside the key
4. Reporting the findings

The script should:
- Send requests with a cache buster
- Measure the response headers
- Compare responses with and without the tested header
"""

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

  • 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