עקיפת CSP - תרגיל¶
תרגיל 1: זיהוי חולשות ב-CSP¶
נתונות המדיניות הבאות. עבור כל אחת, זהו את החולשה וכתבו payload לעקיפה.
א.¶
ב.¶
ג.¶
ד.¶
ה.¶
רמז: בדקו אילו הנחיות חסרות.
תרגיל 2: עקיפה עם AngularJS¶
האתר הבא משתמש ב-CSP שמרשה טעינת סקריפטים מ-CDN:
בדף יש injection point בתוך תגית <div>:
כתבו payload שינצל AngularJS כדי להריץ alert(document.cookie).
תרגיל 3: עקיפה עם base-uri¶
האתר משתמש ב-CSP הבא:
בדף יש סקריפט שטוען קובץ JS בנתיב יחסי:
<script nonce="random123">
var s = document.createElement('script');
s.src = '/js/analytics.js';
document.body.appendChild(s);
</script>
יש לכם injection point לפני הסקריפט הזה. הסבירו כיצד תנצלו את החולשה וכתבו את ה-payload.
תרגיל 4: JSONP על דומיין מורשה¶
האתר משתמש ב-CSP:
מצאו נקודת קצה JSONP על accounts.google.com וכתבו payload שינצל אותה להרצת קוד JavaScript שרירותי.
תרגיל 5: מעבדות PortSwigger¶
מעבדה 1: עקיפת CSP עם AngularJS¶
- כתובת: CSP bypass with AngularJS
- רמה: Expert
- משימה: הריצו
alert(document.cookie)תוך עקיפת CSP שמרשהcdnjs.cloudflare.com - רמז: השתמשו ב-AngularJS sandbox escape
מעבדה 2: עקיפת CSP עם DOM XSS¶
- כתובת: CSP bypass via DOM XSS
- רמה: Practitioner
- משימה: גנבו CSRF token תוך עקיפת CSP
מעבדה 3: עקיפת CSP עם policy injection¶
- כתובת: CSP bypass with policy injection
- רמה: Practitioner
- משימה: הזריקו מדיניות CSP חדשה דרך פרמטר
תרגיל 6: בניית CSP מחוזק¶
כתבו מדיניות CSP עבור אתר עם הדרישות הבאות:
- סקריפטים רק מקומיים עם nonce
- סגנונות רק מקומיים
- תמונות מכל מקום HTTPS
- חיבורי API רק לדומיין
api.example.com - ללא iframes, plugins, או base חיצוני
- דיווח על הפרות לנקודת קצה
/csp-report
ודאו שהמדיניות עמידה בפני כל 10 טכניקות העקיפה שנלמדו.
תרגיל 7: ניתוח CSP של אתרים אמיתיים¶
השתמשו בכלי CSP Evaluator של Google כדי לנתח את מדיניות ה-CSP של האתרים הבאים:
github.comgoogle.comfacebook.com
עבור כל אתר:
- מה ה-CSP שמוגדר?
- אילו חולשות זוהו?
- האם ניתן לעקוף את המדיניות? כיצד?
- מה הייתם ממליצים לשפר?
תרגיל 8: אתגר מתקדם - שרשור עקיפות¶
הדף הבא משתמש ב-CSP מחמיר:
Content-Security-Policy: default-src 'none'; script-src 'nonce-{RANDOM}' 'strict-dynamic'; style-src 'self'; img-src 'self'; connect-src 'self'; base-uri 'self'; form-action 'self'
בדף קיים סקריפט מאושר שמבצע:
// script with valid nonce
let config = JSON.parse(document.getElementById('config').textContent);
if (config.analyticsUrl) {
let s = document.createElement('script');
s.src = config.analyticsUrl;
document.body.appendChild(s);
}
יש injection point בתוך אלמנט HTML בדף (לא בתוך סקריפט).
מצאו דרך להריץ קוד JavaScript שרירותי. רמז: חשבו על DOM clobbering בשילוב עם strict-dynamic.