לדלג לתוכן

עקיפת CSP - תרגיל

תרגיל 1: זיהוי חולשות ב-CSP

נתונות המדיניות הבאות. עבור כל אחת, זהו את החולשה וכתבו payload לעקיפה.

א.

Content-Security-Policy: script-src 'self' https://cdnjs.cloudflare.com; default-src 'self'

ב.

Content-Security-Policy: script-src 'self' 'unsafe-eval'; default-src 'self'

ג.

Content-Security-Policy: script-src 'nonce-abc123'; default-src 'self'

ד.

Content-Security-Policy: script-src 'self' https://www.google.com; default-src 'self'

ה.

Content-Security-Policy: default-src 'self'; script-src 'self'

רמז: בדקו אילו הנחיות חסרות.


תרגיל 2: עקיפה עם AngularJS

האתר הבא משתמש ב-CSP שמרשה טעינת סקריפטים מ-CDN:

Content-Security-Policy: script-src 'self' https://cdnjs.cloudflare.com 'unsafe-eval'

בדף יש injection point בתוך תגית <div>:

<div class="search-results">
  YOUR_INPUT_HERE
</div>

כתבו payload שינצל AngularJS כדי להריץ alert(document.cookie).


תרגיל 3: עקיפה עם base-uri

האתר משתמש ב-CSP הבא:

Content-Security-Policy: script-src 'nonce-random123' 'strict-dynamic'; default-src 'self'

בדף יש סקריפט שטוען קובץ 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:

Content-Security-Policy: script-src 'self' https://accounts.google.com; object-src 'none'

מצאו נקודת קצה 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


תרגיל 6: בניית CSP מחוזק

כתבו מדיניות CSP עבור אתר עם הדרישות הבאות:

  • סקריפטים רק מקומיים עם nonce
  • סגנונות רק מקומיים
  • תמונות מכל מקום HTTPS
  • חיבורי API רק לדומיין api.example.com
  • ללא iframes, plugins, או base חיצוני
  • דיווח על הפרות לנקודת קצה /csp-report

ודאו שהמדיניות עמידה בפני כל 10 טכניקות העקיפה שנלמדו.


תרגיל 7: ניתוח CSP של אתרים אמיתיים

השתמשו בכלי CSP Evaluator של Google כדי לנתח את מדיניות ה-CSP של האתרים הבאים:

  1. github.com
  2. google.com
  3. facebook.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.