לדלג לתוכן

הברחת בקשות - HTTP Request Smuggling - תרגול

הקדמה

התרגולים מבוססים על מעבדות PortSwigger Web Security Academy בנושא HTTP Request Smuggling. עבדו על כל מעבדה בסדר המוצג - הרמה עולה בהדרגה.


תרגיל 1 - הברחת CL.TE בסיסית (Practitioner)

מעבדה: HTTP request smuggling, basic CL.TE vulnerability

משימה:
1. היכנסו למעבדה וזהו שהשרת החזיתי משתמש ב-Content-Length והאחורי ב-Transfer-Encoding
2. בנו בקשת POST שמבריחה את המחרוזת GPOST לתחילת הבקשה הבאה
3. שלחו את הבקשה פעמיים - בפעם השנייה צריך להתקבל שגיאת "Unrecognized method GPOST"

רמז:

POST / HTTP/1.1
Host: <lab-url>
Content-Type: application/x-www-form-urlencoded
Content-Length: ???
Transfer-Encoding: chunked

0

GPOST / HTTP/1.1
Content-Length: 5

x=1

חשבו מה צריך להיות ה-Content-Length כדי שהשרת החזיתי יעביר את כל הגוף.


תרגיל 2 - הברחת TE.CL בסיסית (Practitioner)

מעבדה: HTTP request smuggling, basic TE.CL vulnerability

משימה:
1. זהו שהשרת החזיתי משתמש ב-Transfer-Encoding והאחורי ב-Content-Length
2. בנו בקשה שמבריחה prefix של בקשת GPOST
3. אשרו את ההברחה על ידי שליחת שתי בקשות

רמז: ב-TE.CL, הגוף המוברח צריך להיות בתוך חלק chunked. ה-Content-Length הנמוך גורם לשרת האחורי לקרוא רק חלק מהנתונים.


תרגיל 3 - ערפול TE.TE (Practitioner)

מעבדה: HTTP request smuggling, obfuscating the TE header

משימה:
1. שני השרתים תומכים ב-Transfer-Encoding, אבל אחד מהם ניתן לערפול
2. נסו את כל טכניקות הערפול עד שתמצאו את זו שעובדת:
- Transfer-Encoding: xchunked
- Transfer-Encoding : chunked
- Transfer-Encoding: chunked (עם רווח בסוף)
- Transfer-Encoding:\tchunked
- ושאר הוריאציות
3. לאחר שמצאתם את הערפול הנכון, הבריחו בקשה שגורמת לשגיאה


תרגיל 4 - עקיפת בקרות גישה (Practitioner)

מעבדה: Exploiting HTTP request smuggling to bypass front-end security controls, CL.TE

משימה:
1. הפאנל /admin חסום על ידי השרת החזיתי
2. השתמשו בהברחת CL.TE כדי לגשת לפאנל הניהול
3. מחקו את המשתמש carlos

רמז: הבקשה המוברחת צריכה לכלול את הכותרת Host ואת Content-Length מתאים.


תרגיל 5 - עקיפת בקרות גישה TE.CL (Practitioner)

מעבדה: Exploiting HTTP request smuggling to bypass front-end security controls, TE.CL

משימה:
1. אותה מטרה כמו תרגיל 4, אבל הפעם הסוג הוא TE.CL
2. גשו ל-/admin דרך הברחה ומחקו את carlos


תרגיל 6 - חשיפת שכתוב בקשות (Practitioner)

מעבדה: Exploiting HTTP request smuggling to reveal front-end request rewriting

משימה:
1. השרת החזיתי מוסיף כותרות לבקשה (כמו X-Forwarded-For). אתם צריכים לגלות אילו
2. השתמשו בהברחה כדי ללכוד את הכותרות שהשרת החזיתי מוסיף
3. השתמשו במידע הזה כדי לגשת ל-/admin

רמז: הבריחו POST לנתיב שמציג את הקלט בתגובה (חיפוש, תגובה). הגוף של הבקשה הבאה יצורף לפרמטר ותוכלו לראות את הכותרות.


תרגיל 7 - לכידת בקשות משתמשים (Practitioner)

מעבדה: Exploiting HTTP request smuggling to capture other users' requests

משימה:
1. השתמשו בהברחה כדי ללכוד את הבקשה של משתמש אחר
2. חלצו את עוגיית ה-session שלו
3. השתמשו בעוגייה כדי לגשת לחשבון שלו

רמז: הבריחו POST שכותב תגובה לפוסט, עם Content-Length גדול שיגרום לשרת להמשיך לקרוא את הבקשה הבאה ולצרף אותה לגוף התגובה.


תרגיל 8 - XSS דרך הברחה (Practitioner)

מעבדה: Exploiting HTTP request smuggling to deliver reflected XSS

משימה:
1. מצאו נקודת XSS מוחזר באפליקציה (בכותרת User-Agent)
2. השתמשו בהברחה כדי להפעיל את ה-XSS על בקשת המשתמש הבא
3. הפעילו alert(1)


תרגיל 9 - הפניה פתוחה דרך הברחה (Practitioner)

מעבדה: Exploiting HTTP request smuggling to perform web cache poisoning

משימה:
1. מצאו הפניה (redirect) שמשתמשת בכותרת Host
2. השתמשו בהברחה כדי להפנות את הבקשה הבאה לדומיין של exploit server
3. הגישו JavaScript זדוני דרך ה-redirect


תרגיל 10 - הרעלת מטמון דרך הברחה (Expert)

מעבדה: Exploiting HTTP request smuggling to perform web cache poisoning

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

רמז: הבריחו בקשה שנתיב ה-URL שלה מצביע על ה-JavaScript הסטטי, אבל ה-Host מצביע על שרת התוקף. התגובה מהשרת הזדוני תישמר במטמון.


תרגיל 11 - הרעלת תור תגובות (Expert)

מעבדה: Response queue poisoning via H2.TE request smuggling

משימה:
1. השתמשו בהברחת HTTP/2 כדי לגרום ל-desync של תור התגובות
2. לכדו תגובה שמכילה טוקן session של משתמש אחר
3. השתמשו בטוקן כדי לגשת לחשבון הקורבן


תרגיל 12 - הברחה לביצוע CL.0 (Expert)

מעבדה: CL.0 request smuggling

משימה:
1. מצאו endpoint שהשרת האחורי מתעלם מ-Content-Length עבורו
2. השתמשו בהתנהגות זו כדי להבריח בקשה
3. גשו לפאנל הניהול ומחקו את carlos

רמז: חפשו endpoints כמו /resources שמגישים קבצים סטטיים - שרתים לפעמים מתעלמים מגוף הבקשה במקרים כאלה.


תרגיל בונוס - כתיבת סקריפט זיהוי

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

#!/usr/bin/env python3
"""
כתבו סקריפט שמקבל URL ובודק:
1. האם יש חולשת CL.TE (באמצעות תזמון)
2. האם יש חולשת TE.CL (באמצעות תזמון)
3. האם יש חולשת TE.TE (עם ניסיון ערפולים שונים)

הסקריפט צריך:
- לשלוח בקשות HTTP גולמיות באמצעות socket
- למדוד את זמן התגובה
- להחליט על סמך timeout אם יש חולשה
- להדפיס את הממצאים
"""

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

  • PortSwigger Web Security Academy - HTTP Request Smuggling: https://portswigger.net/web-security/request-smuggling
  • כלי HTTP Request Smuggler ל-Burp Suite
  • מאמר המחקר המקורי של James Kettle: "HTTP Desync Attacks"