לדלג לתוכן

סאבדומיין ו-Subdomain Takeover - תרגיל

הקדמה

בתרגיל זה תתרגלו מיפוי סאבדומיינים, זיהוי רשומות DNS תלויות, וביצוע Subdomain Takeover בסביבת מעבדה מבוקרת.


חלק א - מיפוי סאבדומיינים

משימה 1 - מיפוי באמצעות מקורות פסיביים

בחרו דומיין לתרגול (מומלץ: דומיין משלכם, או דומיינים עם תוכנית באג באונטי מוכרזת).

  1. השתמשו ב-crt.sh לחיפוש סאבדומיינים:
curl -s "https://crt.sh/?q=%25.TARGET.com&output=json" | \
    jq -r '.[].name_value' | sort -u > crt_results.txt
  1. השתמשו ב-subfinder:
subfinder -d TARGET.com -silent -o subfinder_results.txt
  1. שלבו את כל התוצאות:
cat crt_results.txt subfinder_results.txt | sort -u > all_subs.txt
echo "Total unique subdomains: $(wc -l < all_subs.txt)"

משימה 2 - בדיקת סאבדומיינים חיים

  1. השתמשו ב-httpx לזיהוי סאבדומיינים פעילים:
cat all_subs.txt | httpx -silent -status-code -title -o live_subs.txt
  1. סננו לפי קודי תגובה מעניינים:
# שרתים שמגיבים
grep "\[200\]" live_subs.txt

# שרתים עם 403 (יכולים להכיל תוכן נסתר)
grep "\[403\]" live_subs.txt

# שרתים עם 404 (פוטנציאל ל-takeover)
grep "\[404\]" live_subs.txt

שאלות

  • כמה סאבדומיינים מצאתם בסך הכל?
  • כמה מהם פעילים?
  • האם מצאתם סאבדומיינים עם שמות מעניינים (admin, dev, staging, test, api)?

חלק ב - זיהוי פוטנציאל ל-Subdomain Takeover

משימה 3 - בדיקת רשומות CNAME

  1. כתבו סקריפט שבודק רשומות CNAME לכל הסאבדומיינים:
#!/bin/bash
echo "=== Checking CNAME records ==="
while read sub; do
    cname=$(dig +short CNAME "$sub" 2>/dev/null | head -1 | sed 's/\.$//')
    if [ -n "$cname" ]; then
        echo "$sub -> $cname"
    fi
done < all_subs.txt
  1. מתוך הרשומות שמצאתם, זהו רשומות שמפנות לשירותים חיצוניים:
# חפשו CNAME שמפנה לשירותים ידועים:
# *.github.io
# *.herokuapp.com
# *.s3.amazonaws.com
# *.azurewebsites.net
# *.cloudfront.net
# *.shopify.com
# *.fastly.net
# *.pantheonsite.io
# *.wordpress.com
# *.zendesk.com

משימה 4 - שימוש בכלי סריקה אוטומטיים

  1. השתמשו ב-nuclei לזיהוי takeover:
cat all_subs.txt | nuclei -t takeovers/ -o takeover_results.txt
  1. בדקו את התוצאות - האם נמצאו סאבדומיינים פגיעים?

חלק ג - מעבדת Subdomain Takeover

משימה 5 - הקמת מעבדה מקומית

הקימו סביבת מעבדה שמדמה תרחיש של Subdomain Takeover:

  1. הגדירו רשומות DNS מקומיות:
# הוסיפו לקובץ /etc/hosts:
sudo sh -c 'echo "127.0.0.1 vulnerable.lab" >> /etc/hosts'
sudo sh -c 'echo "127.0.0.1 blog.vulnerable.lab" >> /etc/hosts'
sudo sh -c 'echo "127.0.0.1 shop.vulnerable.lab" >> /etc/hosts'
  1. צרו שרת ווב פשוט שמדמה GitHub Pages response:
# takeover_lab.py
from http.server import HTTPServer, BaseHTTPRequestHandler

class TakeoverLabHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        host = self.headers.get("Host", "")

        if host == "blog.vulnerable.lab":
            # מדמה GitHub Pages שלא קיים
            self.send_response(404)
            self.send_header("Content-Type", "text/html")
            self.end_headers()
            self.wfile.write(b"""
            <html><body>
            <h1>There isn't a GitHub Pages site here.</h1>
            <p>If you're trying to publish one, read the full documentation.</p>
            </body></html>
            """)
        elif host == "shop.vulnerable.lab":
            # מדמה Shopify שלא קיים
            self.send_response(404)
            self.send_header("Content-Type", "text/html")
            self.end_headers()
            self.wfile.write(b"""
            <html><body>
            <h1>Sorry, this shop is currently unavailable.</h1>
            </body></html>
            """)
        else:
            self.send_response(200)
            self.send_header("Content-Type", "text/html")
            self.end_headers()
            self.wfile.write(b"""
            <html><body>
            <h1>Welcome to vulnerable.lab</h1>
            <a href="http://blog.vulnerable.lab">Blog</a>
            <a href="http://shop.vulnerable.lab">Shop</a>
            </body></html>
            """)

if __name__ == "__main__":
    server = HTTPServer(("0.0.0.0", 80), TakeoverLabHandler)
    print("[*] Lab running on port 80")
    server.serve_forever()
  1. הריצו את המעבדה:
sudo python3 takeover_lab.py
  1. גלשו לכתובות ובדקו את התגובות:
  2. http://vulnerable.lab - אתר ראשי
  3. http://blog.vulnerable.lab - האם מזהים את דפוס ה-takeover?
  4. http://shop.vulnerable.lab - האם מזהים את דפוס ה-takeover?

משימה 6 - זיהוי עם nuclei

  1. צרו קובץ עם הסאבדומיינים של המעבדה:
echo "http://blog.vulnerable.lab" > lab_subs.txt
echo "http://shop.vulnerable.lab" >> lab_subs.txt
echo "http://vulnerable.lab" >> lab_subs.txt
  1. הריצו nuclei:
cat lab_subs.txt | nuclei -t takeovers/
  1. האם nuclei זיהה את הסאבדומיינים הפגיעים?

חלק ד - ניתוח השפעה

משימה 7 - הערכת סיכון

עבור כל סאבדומיין פגיע שמצאתם (או מהמעבדה), ענו על השאלות:

  1. האם הדומיין הראשי (target.com) מגדיר עוגיות עם domain=.target.com?
  2. האם יש מדיניות CORS שמאפשרת בקשות מ-*.target.com?
  3. האם ה-CSP של הדומיין הראשי כולל *.target.com?
  4. מה הנזק הפוטנציאלי מהשתלטות על הסאבדומיין?

כתבו הערכת סיכון קצרה לכל סאבדומיין פגיע.


חלק ה - כתיבת סקריפט מיפוי מלא

משימה 8 - סקריפט אוטומטי

כתבו סקריפט Python שמבצע את כל שלבי המיפוי:

  1. מיפוי סאבדומיינים מ-crt.sh
  2. בדיקת רשומות CNAME
  3. זיהוי רשומות תלויות
  4. בדיקה מול מסד can-i-take-over-xyz
# subdomain_audit.py - שלד לסקריפט
import subprocess
import json
import requests

TAKEOVER_SIGNATURES = {
    "github.io": "There isn't a GitHub Pages site here",
    "herokuapp.com": "No such app",
    "s3.amazonaws.com": "NoSuchBucket",
    "azurewebsites.net": "404 Web Site not found",
    "shopify.com": "Sorry, this shop is currently unavailable",
    "fastly.net": "Fastly error: unknown domain",
}

def enumerate_subdomains(domain):
    # השלימו: מיפוי מ-crt.sh
    pass

def check_cname(subdomain):
    # השלימו: בדיקת רשומת CNAME
    pass

def check_takeover(subdomain, cname):
    # השלימו: בדיקה מול TAKEOVER_SIGNATURES
    pass

def main():
    domain = input("Enter domain: ")
    subdomains = enumerate_subdomains(domain)
    for sub in subdomains:
        cname = check_cname(sub)
        if cname:
            check_takeover(sub, cname)

if __name__ == "__main__":
    main()

שאלות סיכום

  1. מה ההבדל בין מיפוי פסיבי לאקטיבי של סאבדומיינים?
  2. למה רשומת CNAME מסוכנת יותר מרשומת A בהקשר של Subdomain Takeover?
  3. אילו שלושה שירותים הם הפגיעים ביותר ל-takeover?
  4. כיצד Subdomain Takeover יכול לשמש לעקיפת מנגנוני CORS?
  5. מה ההגנה הטובה ביותר מפני Subdomain Takeover?