אתגר CTF - bypass WAF¶
מבוא¶
אתגר זה משלב את כל הטכניקות שנלמדו בפרק 8. תעברו חמישה שלבים, כל אחד דורש שילוב של טכניקות bypass שונות. כל שלב נותן דגל (flag) שמאפשר גישה לשלב הבא.
שלב 1 - זיהוי ה-WAF¶
תיאור¶
הגישו בקשה לאפליקציית היעד ב-http://TARGET:8080/ וזהו את ה-WAF.
משימות¶
-
השתמשו ב-wafw00f לזיהוי ראשוני:
-
בצעו זיהוי ידני:
-
זהו את רמת הפרנויה על ידי בדיקה שיטתית:
import requests target = "http://TARGET:8080" # Payloads by paranoia level tests = { "PL1 - basic SQLi": "1' OR 1=1--", "PL1 - basic XSS": "<script>alert(1)</script>", "PL2 - encoded SQLi": "1' UNION ALL SELECT 1--", "PL2 - alt XSS": "<img src=x onerror=alert(1)>", "PL3 - suspicious chars": "SELECT FROM WHERE", "PL3 - any HTML tag": "<div onmouseover=x>", "PL4 - special chars": "(); {}", } for name, payload in tests.items(): r = requests.get(f"{target}/search", params={"q": payload}) status = "BLOCKED" if r.status_code == 403 else "PASSED" print(f"[{status}] {name}: {payload}") -
תעדו את הממצאים שלכם:
- סוג ה-WAF
- גרסה (אם זיהיתם)
- רמת פרנויה משוערת
- חוקים ספציפיים שזיהיתם
דגל שלב 1: לאחר זיהוי נכון, הגישו את התשובה ב-/api/stage1?waf=WAF_NAME¶noia=LEVEL
שלב 2 - bypass XSS¶
תיאור¶
נקודת injection XSS מוחזרת (Reflected XSS) בכתובת:
הקלט מוזרק ישירות ל-HTML:
ה-WAF חוסם:
- כל סוגי תגיות <script>
- Event handlers נפוצים: onerror, onload, onclick, onfocus
- פונקציות: alert, eval, Function
- javascript: protocol
- הencoding URL של הנ"ל
משימות¶
-
נסו שרשרת encoding:
-
נסו תגיות חלופיות עם event handlers חלופיים:
-
נסו פונקציות חלופיות:
-
שלבו טכניקות:
- תגית חלופית + event handler חלופי + encoding של הפונקציה
- Unicode full-width + פונקציה חלופית
-
HPP לפיצול הpayload
-
המטרה: להריץ
alert(document.domain)בדפדפן
דגל שלב 2: כאשר ה-JavaScript רץ, הוא חושף את הדגל בעמוד.
שלב 3 - bypass SQLi¶
תיאור¶
נקודת injection SQL בכתובת:
הquery בצד השרת:
טבלת flags:
ה-WAF חוסם:
- UNION SELECT (כל הווריאציות הנפוצות)
- OR 1=1, AND 1=1
- information_schema
- SLEEP(), BENCHMARK()
- הערות /**/ ו---
- הencoding URL של הנ"ל
משימות¶
-
נסו תחביר חלופי:
-
שלבו עם טכניקות encoding:
-
שלבו עם טכניקות פרוטוקול:
-
המטרה: חלצו את הדגל מטבלת flags:
דגל שלב 3: תוכן שדה flag בטבלת flags.
שלב 4 - SSRF מאחורי WAF¶
תיאור¶
נקודת SSRF בכתובת:
השרת מבצע בקשת HTTP ל-URL ומחזיר את התוכן. שרת פנימי רץ על http://127.0.0.1:9090/flag ומכיל את הדגל.
ה-WAF חוסם:
- 127.0.0.1 (כל הפורמטים הנפוצים)
- localhost
- 0.0.0.0
- 169.254.x.x
- כתובות פרטיות (10.x, 172.16.x, 192.168.x)
- file://, gopher://, dict://
- IPv6 [::1]
משימות¶
-
נסו ייצוגים חלופיים של 127.0.0.1:
-
נסו DNS-based bypass:
-
נסו redirect-based bypass:
- הקימו שרת שמחזיר:
-
שלחו ל-
http://YOUR_SERVER/redirect -
שלבו עם טכניקות encoding:
דגל שלב 4: תוכן התגובה מ-http://127.0.0.1:9090/flag.
שלב 5 - אתגר סופי - RCE¶
תיאור¶
השלב הסופי משלב את כל מה שלמדתם. נקודת injection פקודות:
השרת מריץ:
הדגל נמצא בקובץ /flag.txt.
ה-WAF חוסם (רמת פרנויה 4):
- כל מפרידי פקודות: ;, |, &, `
- $( ו-)
- cat, head, tail, less, more, nl, tac
- /flag, flag.txt
- שורות חדשות בגוף JSON
- Wildcards: *, ?
- הencoding URL של כל הנ"ל
- הערות #
- Backticks
משימות¶
זה האתגר הקשה ביותר. תצטרכו לשלב מספר טכניקות:
- ברמת פרוטוקול:
- שנו Content-Type
- השתמשו ב-chunked encoding
-
נסו HPP
-
ברמת encoding:
- הencoding כפול
- Unicode
-
Hex
-
ברמת פקודה:
- הרחבת משתנים:
$'\x63\x61\x74' - מרכאות:
c""at - Base64:
echo ... | base64 -d | bash -
Variable splitting:
a=c;b=at;$a$b -
ברמת נתיב:
- Wildcards:
/????.??? - Symlinks
-
/proc/self/root/flag.txt -
רמזים:
- שורות חדשות בתוך JSON עשויות לעבוד אם מקודדות כ-
\n(JSON escape) ולא כ-%0a - חלק מה-WAFs לא בודקים גוף JSON באותו אופן כמו form-urlencoded
- נסו
\nכמפריד פקודות בתוך JSON string - שילוב של Variable expansion עם hex escape:
$'\x63\x61\x74'=cat - נתיב חלופי לקובץ:
/proc/self/root/flag.txtאו symlink
דגל שלב 5: תוכן /flag.txt.
משאבים מומלצים¶
מעבדות PortSwigger¶
- SQL injection with filter bypass via XML encoding
- Reflected XSS with some SVG markup allowed
- SSRF with filter bypass via open redirection
אתגרי HackTheBox¶
- WAF bypass challenges בקטגוריית Web
- Machines עם WAF: Bounty Hunter, Nunchucks, Trick
כלים¶
- wafw00f - זיהוי WAF
- SQLMap - עם tamper scripts לbypass WAF:
- Burp Suite + Hackvertor - שרשראות encoding
- XSStrike - מציאת payloads XSS שעוקפים פילטרים
מערכת ניקוד¶
| שלב | ניקוד | נושא |
|---|---|---|
| שלב 1 | 10 נקודות | זיהוי WAF |
| שלב 2 | 20 נקודות | הbypass ל-XSS |
| שלב 3 | 25 נקודות | הbypass ל-SQLi |
| שלב 4 | 20 נקודות | הbypass ל-SSRF |
| שלב 5 | 25 נקודות | שילוב לכל טכניקות ל-RCE |
| סהכ | 100 נקודות |
בונוסים¶
- שלב 2: הpayload XSS ללא תגיות כלל (בתוך הקשר JavaScript) - 5 נקודות בונוס
- שלב 3: הextraction כל הנתונים מכל הטבלאות - 5 נקודות בונוס
- שלב 5: ביצוע reverse shell - 10 נקודות בונוס
דוח¶
בסיום האתגר, הגישו דוח שמכיל:
- לכל שלב:
- הpayload שעבד
- רשימת הניסיונות שנחסמו
- הסבר למה הbypass עובדת
-
הדגל
-
סיכום:
- איזו טכניקה הכי יעילה באופן כללי?
- איזה שילוב טכניקות הכי עוצמתי?
-
אילו המלצות הגנה הייתם נותנים?
-
סקריפטים:
- צרפו את כל הסקריפטים שכתבתם
- תעדו כל סקריפט עם הסבר לשימוש