سجلات DNS: كنز المعلومات
أنواع سجلات DNS المهمة للـ Pentester (A و MX و NS و TXT و CNAME)، وإزاي تستعلم عنها بـ dig و nslookup، وتنظّم النتايج بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
في الكورس اللي فات عرفنا إن الـ DNS بيحوّل اسم الـ domain لـ IP. النهارده هنشوف إن الـ DNS فيه معلومات أكتر من كده بكتير، وكلها عامة.
أهم أنواع السجلات: A، وده الـ IP بتاع الاسم. MX، وده الـ mail server. NS، وده الـ Name Server. TXT، نص حر، وساعات بيكشف الخدمات اللي الشركة بتستخدمها. و CNAME، يعني الاسم ده هو هو اسم تاني.
الأدوات: dig، وتكتب بعده الـ domain ونوع السجل. أو nslookup، وده موجود كمان على Windows. وبـ dig تقدر تحدد DNS server معيّن بعلامة at.
إيه اللي يلفت نظرك؟ subdomain اسمه vpn أو dev أو admin، ده هدف مهم. سجل TXT فيه SPF بيقولّك إنهم بيستخدموا Google للإيميل. و CNAME لخدمة خارجية، زي Shopify، معناه إن جزء من الـ Attack Surface عند طرف تالت. هنا عندنا نتيجة استعلامات DNS محفوظة في list. نجمّعها حسب نوع السجل في dictionary، ونطبع كل نوع لوحده. نشغّل… كده بقى قدامك كل الـ A records، والـ mail، والـ NS، والـ TXT، والـ CNAME مترتّبين. ولاحظ الـ vpn، ليه IP مختلف.
# What "dig example-corp.com ANY" might return (saved, no internet here)
records = [
("A", "example-corp.com", "203.0.113.10"),
("A", "www.example-corp.com", "203.0.113.10"),
("A", "vpn.example-corp.com", "203.0.113.25"),
("MX", "example-corp.com", "10 mail.example-corp.com"),
("NS", "example-corp.com", "ns1.example-corp.com"),
("TXT", "example-corp.com", "v=spf1 include:_spf.google.com ~all"),
("CNAME", "shop.example-corp.com", "example-corp.myshopify.com"),
]
by_type = {}
for rtype, name, value in records:
by_type.setdefault(rtype, []).append((name, value))
for rtype, items in by_type.items():
print(rtype)
for name, value in items:
print(f" {name:24} -> {value}")المخرجات
A example-corp.com -> 203.0.113.10 www.example-corp.com -> 203.0.113.10 vpn.example-corp.com -> 203.0.113.25 MX example-corp.com -> 10 mail.example-corp.com NS example-corp.com -> ns1.example-corp.com TXT example-corp.com -> v=spf1 include:_spf.google.com ~all CNAME shop.example-corp.com -> example-corp.myshopify.com
دورك: طلّع كل الـ IPs من سجلات A بس، من غير تكرار، واطبعهم مترتّبين. دول اللي هنعمل عليهم Scan بعدين.
اعمل set من قيم سجلات A، واطبعها بـ sorted.
الحل: نشغّل… اتنين IPs بس، رغم إن عندنا تلات أسماء.
# What "dig example-corp.com ANY" might return (saved, no internet here)
records = [
("A", "example-corp.com", "203.0.113.10"),
("A", "www.example-corp.com", "203.0.113.10"),
("A", "vpn.example-corp.com", "203.0.113.25"),
("MX", "example-corp.com", "10 mail.example-corp.com"),
("NS", "example-corp.com", "ns1.example-corp.com"),
("TXT", "example-corp.com", "v=spf1 include:_spf.google.com ~all"),
("CNAME", "shop.example-corp.com", "example-corp.myshopify.com"),
]
by_type = {}
for rtype, name, value in records:
by_type.setdefault(rtype, []).append((name, value))
for rtype, items in by_type.items():
print(rtype)
for name, value in items:
print(f" {name:24} -> {value}")
ips = sorted({value for rtype, name, value in records if rtype == "A"})
print("unique IPs:", ips)المخرجات
A example-corp.com -> 203.0.113.10 www.example-corp.com -> 203.0.113.10 vpn.example-corp.com -> 203.0.113.25 MX example-corp.com -> 10 mail.example-corp.com NS example-corp.com -> ns1.example-corp.com TXT example-corp.com -> v=spf1 include:_spf.google.com ~all CNAME shop.example-corp.com -> example-corp.myshopify.com unique IPs: ['203.0.113.10', '203.0.113.25']
الدرس الجاي: إزاي تلاقي الـ 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