اكتشاف الـ Subdomains
ليه الـ subdomains أهم حاجة في الـ Recon، والطرق السلبية والنشطة لاكتشافها، وأدوات زي subfinder و amass و Zone Transfer، وتعمل Brute Force بسيط بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
الموقع الرئيسي للشركة غالباً محمي كويس. بس الشركة نفسها ممكن يكون عندها عشرات الـ subdomains: dev، و test، و admin… وده المكان اللي بتلاقي فيه الثَغَرات.
ليه الـ subdomains مهمة؟ نسخ dev و test غالباً حمايتها أضعف. لوحات تحكم زي admin و jenkins ساعات بتبقى مكشوفة. و servers قديمة محدش فاكرها، ولسه شغّالة.
فيه طرق سلبية: مواقع تجمّع بيانات DNS، زي DNSDumpster. و Certificate Transparency، وده الدرس الجاي. وأدوات بتجمّع من مصادر كتير مرة واحدة، زي subfinder و amass.
وفيه طرق نشطة: Brute Force، يعني تجرّب أسماء من wordlist، وتشوف أنهي اسم ليه IP. و Zone Transfer، ودي لو الـ DNS server متظبط غلط، بيديك كل الأسماء مرة واحدة. الأداة الأشهر للـ brute force هي gobuster في الـ dns mode. نعمل brute force بسيط. عندنا DNS وهمي للتجربة، و wordlist فيها تمانية أسماء. لكل كلمة نركّب الاسم الكامل، ونسأل الـ DNS: ليه IP؟ لو أيوه، نحفظه. نشغّل… لقينا أربع أسماء موجودة من تمانية، ومنهم dev و vpn. بس فيه حاجة فاتتنا: jenkins، علشان مش في الـ wordlist أصلاً.
# A fake DNS for the lab: name -> IP (the real one would be socket.gethostbyname)
DNS = {
"www.example-corp.com": "203.0.113.10",
"mail.example-corp.com": "203.0.113.11",
"dev.example-corp.com": "203.0.113.40",
"vpn.example-corp.com": "203.0.113.25",
"jenkins.example-corp.com": "203.0.113.41",
}
def resolve(name):
return DNS.get(name)
domain = "example-corp.com"
wordlist = ["www", "mail", "ftp", "dev", "test", "admin", "vpn", "api"]
found = {}
for word in wordlist:
name = f"{word}.{domain}"
ip = resolve(name)
if ip:
found[name] = ip
for name, ip in found.items():
print(f"[+] {name:26} {ip}")
print(f"{len(found)} of {len(wordlist)} names exist")المخرجات
[+] www.example-corp.com 203.0.113.10 [+] mail.example-corp.com 203.0.113.11 [+] dev.example-corp.com 203.0.113.40 [+] vpn.example-corp.com 203.0.113.25 4 of 8 names exist
ودي الفكرة المهمة: الـ brute force بيلاقي اللي في الـ wordlist بس. دورك: ضيف jenkins و staging للـ wordlist، وشغّل تاني.
ضيف "jenkins" و "staging" لآخر الـ wordlist.
الحل: نشغّل… ظهر jenkins، وده Jenkins server ممكن يبقى مكشوف. علشان كده اختيار الـ wordlist مهم جداً.
# A fake DNS for the lab: name -> IP (the real one would be socket.gethostbyname)
DNS = {
"www.example-corp.com": "203.0.113.10",
"mail.example-corp.com": "203.0.113.11",
"dev.example-corp.com": "203.0.113.40",
"vpn.example-corp.com": "203.0.113.25",
"jenkins.example-corp.com": "203.0.113.41",
}
def resolve(name):
return DNS.get(name)
domain = "example-corp.com"
wordlist = ["www", "mail", "ftp", "dev", "test", "admin", "vpn", "api", "jenkins", "staging"]
found = {}
for word in wordlist:
name = f"{word}.{domain}"
ip = resolve(name)
if ip:
found[name] = ip
for name, ip in found.items():
print(f"[+] {name:26} {ip}")
print(f"{len(found)} of {len(wordlist)} names exist")المخرجات
[+] www.example-corp.com 203.0.113.10 [+] mail.example-corp.com 203.0.113.11 [+] dev.example-corp.com 203.0.113.40 [+] vpn.example-corp.com 203.0.113.25 [+] jenkins.example-corp.com 203.0.113.41 5 of 10 names exist
الدرس الجاي: Certificate Transparency، وإزاي شهادات الـ SSL بتفضح الـ subdomains. يلا بينا.
03 / دروس المسار (22)
- 01يعني إيه جمع معلومات (Recon)؟
- 02سلبي ولا نشط؟ والنطاق القانوني
- 03WHOIS: مين صاحب الـ Domain؟
- 04سجلات DNS: كنز المعلومات
- 05اكتشاف الـ Subdomainsانت هنا
- 06Certificate Transparency: الشهادات بتتكلم
- 07Google Dorking
- 08OSINT: الموظفين والإيميلات
- 09الـ Metadata: أسرار جُوّه الملفات
- 10اكتشاف الأجهزة الشغّالة (Host Discovery)
- 11الـ Port Scanning بيشتغل إزاي؟
- 12Nmap: البداية
- 13أنواع الـ Scan والسرعة في Nmap
- 14كشف الخدمات والإصدارات ونظام التشغيل
- 15NSE Scripts وحفظ النتايج
- 16تعداد الويب: الـ Headers والتكنولوجيا
- 17الـ Directory Brute Force
- 18تعداد SMB
- 19تعداد خدمات تانية: FTP و DNS و SNMP وغيرهم
- 20تنظيم نتايج الـ Recon
- 21أتمتة الـ Recon بـ Python
- 22مراجعة شاملة وخطة Recon