סאבדומיין ו-Subdomain Takeover - תרגיל¶
הקדמה¶
בתרגיל זה תתרגלו מיפוי סאבדומיינים, זיהוי רשומות DNS תלויות, וביצוע Subdomain Takeover בסביבת מעבדה מבוקרת.
חלק א - מיפוי סאבדומיינים¶
משימה 1 - מיפוי באמצעות מקורות פסיביים¶
בחרו דומיין לתרגול (מומלץ: דומיין משלכם, או דומיינים עם תוכנית באג באונטי מוכרזת).
- השתמשו ב-crt.sh לחיפוש סאבדומיינים:
curl -s "https://crt.sh/?q=%25.TARGET.com&output=json" | \
jq -r '.[].name_value' | sort -u > crt_results.txt
- השתמשו ב-subfinder:
- שלבו את כל התוצאות:
cat crt_results.txt subfinder_results.txt | sort -u > all_subs.txt
echo "Total unique subdomains: $(wc -l < all_subs.txt)"
משימה 2 - בדיקת סאבדומיינים חיים¶
- השתמשו ב-httpx לזיהוי סאבדומיינים פעילים:
- סננו לפי קודי תגובה מעניינים:
# שרתים שמגיבים
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¶
- כתבו סקריפט שבודק רשומות 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
- מתוך הרשומות שמצאתם, זהו רשומות שמפנות לשירותים חיצוניים:
# חפשו CNAME שמפנה לשירותים ידועים:
# *.github.io
# *.herokuapp.com
# *.s3.amazonaws.com
# *.azurewebsites.net
# *.cloudfront.net
# *.shopify.com
# *.fastly.net
# *.pantheonsite.io
# *.wordpress.com
# *.zendesk.com
משימה 4 - שימוש בכלי סריקה אוטומטיים¶
- השתמשו ב-nuclei לזיהוי takeover:
- בדקו את התוצאות - האם נמצאו סאבדומיינים פגיעים?
חלק ג - מעבדת Subdomain Takeover¶
משימה 5 - הקמת מעבדה מקומית¶
הקימו סביבת מעבדה שמדמה תרחיש של Subdomain Takeover:
- הגדירו רשומות 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'
- צרו שרת ווב פשוט שמדמה 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()
- הריצו את המעבדה:
- גלשו לכתובות ובדקו את התגובות:
http://vulnerable.lab- אתר ראשיhttp://blog.vulnerable.lab- האם מזהים את דפוס ה-takeover?http://shop.vulnerable.lab- האם מזהים את דפוס ה-takeover?
משימה 6 - זיהוי עם nuclei¶
- צרו קובץ עם הסאבדומיינים של המעבדה:
echo "http://blog.vulnerable.lab" > lab_subs.txt
echo "http://shop.vulnerable.lab" >> lab_subs.txt
echo "http://vulnerable.lab" >> lab_subs.txt
- הריצו nuclei:
- האם nuclei זיהה את הסאבדומיינים הפגיעים?
חלק ד - ניתוח השפעה¶
משימה 7 - הערכת סיכון¶
עבור כל סאבדומיין פגיע שמצאתם (או מהמעבדה), ענו על השאלות:
- האם הדומיין הראשי (
target.com) מגדיר עוגיות עםdomain=.target.com? - האם יש מדיניות CORS שמאפשרת בקשות מ-
*.target.com? - האם ה-CSP של הדומיין הראשי כולל
*.target.com? - מה הנזק הפוטנציאלי מהשתלטות על הסאבדומיין?
כתבו הערכת סיכון קצרה לכל סאבדומיין פגיע.
חלק ה - כתיבת סקריפט מיפוי מלא¶
משימה 8 - סקריפט אוטומטי¶
כתבו סקריפט Python שמבצע את כל שלבי המיפוי:
- מיפוי סאבדומיינים מ-crt.sh
- בדיקת רשומות CNAME
- זיהוי רשומות תלויות
- בדיקה מול מסד 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()
שאלות סיכום¶
- מה ההבדל בין מיפוי פסיבי לאקטיבי של סאבדומיינים?
- למה רשומת CNAME מסוכנת יותר מרשומת A בהקשר של Subdomain Takeover?
- אילו שלושה שירותים הם הפגיעים ביותר ל-takeover?
- כיצד Subdomain Takeover יכול לשמש לעקיפת מנגנוני CORS?
- מה ההגנה הטובה ביותר מפני Subdomain Takeover?