שרשור חולשות - תרגיל¶
תרגיל 1 - שרשרת XSS ל-Account Takeover¶
תיאור¶
בסביבת התרגול יש יישום עם הפיצ'רים הבאים:
- מערכת פרופילים שמאפשרת הזנת HTML בשדה "אודות"
- נקודת קצה לשינוי סיסמה ללא הגנת CSRF
- נקודת קצה לשינוי מייל
משימות¶
- מצאו את חולשת ה-XSS בשדה הפרופיל
- וודאו שנקודת הקצה לשינוי סיסמה פגיעה ל-CSRF
- כתבו payload שמשרשר את שתי החולשות:
- ה-XSS מבצע קריאת AJAX לשינוי סיסמה
- ה-XSS מבצע קריאת AJAX לשינוי מייל
- ה-XSS שולח את פרטי הקורבן לשרת חיצוני
- הדגימו השתלטות מלאה על חשבון
רמזים¶
- בדקו אם שדה ה-bio מסנן תגיות HTML
- נסו
<img src=x onerror=...>כנקודת התחלה - השתמשו ב-
fetch()עםcredentials: 'include'לביצוע הקריאות
תרגיל 2 - שרשרת SSRF ל-Cloud RCE¶
תיאור¶
יישום שמאפשר שליפת תוכן מ-URL חיצוני (פיצ'ר "תצוגה מקדימה של קישור"). היישום רץ על מופע AWS EC2.
משימות¶
- מצאו את נקודת הקצה הפגיעה ל-SSRF
- עקפו הגנות (אם קיימות) - DNS rebinding, redirect, או קידוד URL
- גשו לשירות metadata של AWS:
- קבלו את שם ה-role
- קבלו את ה-credentials (AccessKeyId, SecretAccessKey, Token)
- כתבו סקריפט Python שמשתמש ב-credentials שנגנבו:
- מזהה את ה-role וההרשאות
- מנסה לגשת ל-S3 buckets
- מנסה להריץ פקודות דרך SSM
- תעדו את כל השרשרת מתחילתה ועד סופה
רמזים¶
- כתובת ה-metadata:
http://169.254.169.254/ - אם יש חסימה של כתובת ה-metadata, נסו:
- קידוד:
http://0xa9fea9fe/ - עם redirect: העבירו דרך שרת שעושה redirect
- DNS rebinding: דומיין שמצביע ל-169.254.169.254
- השתמשו ב-boto3 לעבודה עם AWS
תרגיל 3 - שרשרת תלת-שלבית¶
תיאור¶
ביישום התרגול קיימות שלוש חולשות נפרדות:
1. IDOR בנקודת קצה /api/users/{id} - חושפת מידע על משתמשים
2. חשיפת API key של אדמין בתשובת ה-IDOR
3. נקודת קצה אדמין /api/admin/execute שמקבלת API key ומריצה פקודות
משימות¶
- כתבו סקריפט שסורק את נקודת הקצה של המשתמשים ומזהה חשבונות אדמין
- חלצו את ה-API key של האדמין
- השתמשו ב-API key כדי לגשת לנקודת הקצה של האדמין
- הריצו פקודה שמוכיחה RCE
# שלד לסקריפט
import requests
BASE_URL = "http://target:8080"
SESSION = requests.Session()
# שלב 1 - סריקת משתמשים
# TODO: השלימו
# שלב 2 - חילוץ API key
# TODO: השלימו
# שלב 3 - ניצול נקודת הקצה של האדמין
# TODO: השלימו
רמזים¶
- סרקו IDs בטווח 1-100
- חפשו שדה
role: adminבתגובה - ה-API key נמצא בשדה
api_key - נקודת הקצה מקבלת את ה-API key בכותרת
X-API-Key
תרגיל 4 - מעבדות PortSwigger¶
השלימו את המעבדות הבאות ב-PortSwigger Web Security Academy:
מעבדות חובה¶
- Exploiting XSS to perform CSRF - שרשור XSS עם CSRF
-
כתובת:
https://portswigger.net/web-security/cross-site-scripting/exploiting/lab-perform-csrf -
SSRF with filter bypass via open redirection - שרשור SSRF עם Open Redirect
-
כתובת:
https://portswigger.net/web-security/ssrf/lab-ssrf-with-filter-bypass-via-open-redirection -
Stealing OAuth access tokens via an open redirect - שרשור OAuth עם Open Redirect
- כתובת:
https://portswigger.net/web-security/oauth/lab-oauth-stealing-oauth-access-tokens-via-an-open-redirect
מעבדות מתקדמות¶
- Web cache poisoning to exploit XSS - שרשור Cache Poisoning עם XSS
- Multi-step exploitation - כל מעבדת Expert שדורשת שרשור
לכל מעבדה¶
- תעדו את השלבים שביצעתם
- צלמו מסך של כל שלב
- כתבו את ה-payloads ששימשו אתכם
- הסבירו את הקשר בין השלבים בשרשרת
תרגיל 5 - אתגר מרובה חולשות¶
תיאור¶
בנו סקריפט PoC מלא שמדגים שרשרת תקיפה מורכבת. הסקריפט צריך:
- לבצע סריקה ראשונית של היעד
- לזהות חולשות באופן אוטומטי
- לשרשר אותן לתקיפה אחת מלאה
- לייצר דוח של כל השלבים
דרישות¶
# המבנה הנדרש לסקריפט
class VulnChainExploit:
def __init__(self, target):
self.target = target
self.findings = []
self.chain = []
def recon(self):
"""שלב 1 - סריקה"""
pass
def find_vulns(self):
"""שלב 2 - זיהוי חולשות"""
pass
def build_chain(self):
"""שלב 3 - בניית שרשרת"""
pass
def exploit(self):
"""שלב 4 - ניצול"""
pass
def generate_report(self):
"""שלב 5 - דוח"""
pass
קריטריונים להצלחה¶
- השרשרת כוללת לפחות 3 חולשות שונות
- כל שלב מתועד עם קלט ופלט
- הסקריפט מייצר דוח מסודר
- קיים טיפול בשגיאות בכל שלב