نظرة عامة
ما هو DNS؟
Domain Name System — يحول أسماء الدومينات لـ IP addresses. ما عنده قاعدة بيانات مركزية — موزع على آلاف السيرفرات حول العالم مثل مكتبة بها كتب هاتف كثيرة.
كيف يشتغل
أنت تكتب: google.com
↓
Resolver يسأل DNS Server
↓
DNS يجاوب: 142.250.185.46
↓
جهازك يتصل بالـ IP ✅
ليش مهم في Pentest؟
🗺️ Zone Transfer = خريطة كاملة للشبكة
🎯 NS Record = غالباً Domain Controller
📧 MX Record = mail server = phishing
🔍 TXT Record = خدمات + IPs داخلية
⚠️ DNS غير مشفر افتراضياً — كل استعلام يمشي clear-text على الشبكة!
🔌 /etc/resolv.conf — مهم في Pentest
cat /etc/resolv.conf
nameserver 8.8.8.8 ← Google DNS
nameserver 1.1.1.1 ← Cloudflare DNS
💡 لو وصلت لجهاز مخترق — cat /etc/resolv.conf يكشف DNS server الداخلي = غالباً Domain Controller! 🎯
أنواع DNS Servers
📋 الأنواع الستة
| النوع | الوظيفة | أهمية في Pentest |
|---|---|---|
| Root Server | مسؤول عن الـ TLDs (.com, .se, .htb). 13 سيرفر فقط في العالم تديرهم ICANN | آخر من يُسأل |
| Authoritative | المصدر الرسمي لـ zone معين. جوابه = حقيقي 100% | هدف الـ Zone Transfer! |
| Non-authoritative | يجمع معلومات من سيرفرات ثانية — ممكن تكون قديمة (outdated) | معلومات ممكن تكون غلط |
| Caching | يحفظ الإجابات مؤقتاً حسب الـ TTL | DNS Cache Poisoning |
| Forwarding | يحول السؤال لسيرفر ثاني فقط | محدود |
| Resolver | على جهازك أو الـ router — أول من يستقبل سؤالك | /etc/resolv.conf = DC! |
🔄 مسار الـ DNS Query الكامل
جهازك
google.com؟
→
Resolver
/etc/resolv.conf
→
Cache
موجود؟
→
Root Server
اسأل .com
→
Authoritative
142.250.x.x
⏱️ TTL — Time To Live
مدة صلاحية المعلومة في الـ cache. بعد انتهاؤها يُحذف ويُطلب من جديد.
TTL طويل (86400 = يوم)
المعلومة تبقى في الـ cache يوم كامل
DNS Cache Poisoning تأثيره أطول!
DNS Cache Poisoning تأثيره أطول!
TTL قصير (60 ثانية)
الشركة تغير IPs كثيراً
= Load Balancer أو Cloud Infrastructure
= Load Balancer أو Cloud Infrastructure
DNS Records
🗺️ السيناريو — تهاجم inlanefreight.com
كل record = سؤال مختلف عن البنية التحتية للشركة:
# خريطة كاملة من DNS records:
dig A inlanefreight.com → IP الموقع الرئيسي
dig MX inlanefreight.com → mail server = phishing target
dig NS inlanefreight.com → DNS servers = غالباً DC!
dig TXT inlanefreight.com → خدمات + IPs داخلية
dig axfr inlanefreight.com → كل شيء دفعة وحدة 💥
A
IPv4 Address
يحول domain → IPv4
dig A google.com
→ 142.250.185.46
🎯 IP داخلي (10.x.x.x) = جهاز على الشبكة الداخلية
AAAA
IPv6 Address
نفس A بس لـ IPv6 (128-bit)
dig AAAA google.com
→ 2607:f8b0:4004::71
🎯 نادر الاستخدام في pentest
MX
Mail Exchange
اسم الـ mail server للدومين
dig MX inlanefreight.com
→ mail1.inlanefreight.com
🎯 Phishing + Username Enumeration من الإيميلات
NS
Name Server
أسماء الـ DNS servers للدومين
dig NS inlanefreight.com
→ ns1.inlanefreight.com
→ ns2.inlanefreight.com
🎯 غالباً = Domain Controller! + هدف Zone Transfer
TXT
Text Record
معلومات متنوعة: SPF, DMARC, verification
"v=spf1 ip4:10.129.124.8"
"atlassian-domain-verification=..."
"MS=ms97310371"
🎯 يكشف: خدمات الشركة (Atlassian, Microsoft) + IPs داخلية!
CNAME
Canonical Name (Alias)
اسم بديل لدومين ثاني
ftp.inlanefreight.com
→ CNAME → server1.inlanefreight.com
🎯 خدمات متعددة على نفس الجهاز = اخترق واحد = اخترق الكل
PTR
Pointer (Reverse Lookup)
عكس A — يحول IP → domain
dig PTR 10.129.34.16
→ dc1.internal.inlanefreight.htb
🎯 من IPs تعرف وظيفة الجهاز (dc1=DC, vpn=VPN...)
SOA
Start of Authority
مين المسؤول عن الـ DNS zone
dig soa inlanefreight.com
→ ns-161.awsdns-20.com.
awsdns-hostmaster@amazon.com
🎯 إيميل المسؤول + cloud provider (AWS/Azure/GCP)
الإعدادات — Bind9
ملفات الإعداد
أشهر DNS server على Linux هو Bind9. ملفاته الرئيسية:
| الملف | الوظيفة |
|---|---|
| named.conf.local | تعريف الـ zones المحلية |
| named.conf.options | الإعدادات العامة |
| named.conf.log | إعدادات الـ logging |
| /etc/bind/db.domain.com | Zone file — كل الـ records |
Zone File مثال
cat /etc/bind/db.domain.com
$ORIGIN domain.com
$TTL 86400
@ IN SOA dns1.domain.com. hostmaster.domain.com. (
2001062501 ; serial
21600 ; refresh 6h
3600 ; retry 1h
604800 ; expire 1 week
86400 ) ; min TTL
IN NS ns1.domain.com.
IN NS ns2.domain.com.
IN MX 10 mx.domain.com.
IN A 10.129.14.5
server1 IN A 10.129.14.5
server2 IN A 10.129.14.7
ftp IN CNAME server1
www IN CNAME server2
💡 Zone file = دفتر هاتف السيرفر — كل الأسماء والـ IPs
Dangerous Settings
⚠️ الإعدادات الخطيرة
| الإعداد | الخطر |
|---|---|
| allow-query { any; } | أي شخص يسأل السيرفر |
| allow-recursion { any; } | أي شخص يسأل recursive queries = DNS Amplification Attack |
| allow-transfer { any; } | أي شخص يطلب Zone Transfer كامل 💀 |
| zone-statistics yes | يكشف إحصائيات الـ zone |
💀 allow-transfer = any
الإعداد الأخطر — يسمح لأي شخص بـ Zone Transfer:
dig axfr inlanefreight.htb @10.129.14.128
app.inlanefreight.htb. → 10.129.18.15
internal.inlanefreight.htb. → 10.129.1.6
mail1.inlanefreight.htb. → 10.129.18.201
ns.inlanefreight.htb. → 10.129.34.136
Zone داخلية:
dig axfr internal.inlanefreight.htb @10.129.14.128
dc1.internal → 10.129.34.16 ← Domain Controller!
dc2.internal → 10.129.34.11 ← Domain Controller!
mail1.internal → 10.129.18.200
vpn.internal → 10.129.1.6
wsus.internal → 10.129.18.2 ← Windows Update Server
ws1.internal → 10.129.1.34 ← Workstation
ws2.internal → 10.129.1.35
💥 خريطة كاملة للشبكة الداخلية دفعة وحدة! dc1, dc2 = أهداف أولى
الأدوات
اختر الأداة:
dig
Zone Transfer
dnsenum
Brute Force
🔍 dig — الأداة الأساسية
استعلامات مهمة:
# NS records — إيجاد الـ DNS servers (= DC؟)
dig ns inlanefreight.htb @10.129.14.128
# ANY — كل الـ records دفعة
dig any inlanefreight.htb @10.129.14.128
# إصدار الـ DNS server
dig CH TXT version.bind 10.129.14.128
→ "9.10.6-P1-Debian"
# SOA — مين المسؤول
dig soa inlanefreight.htb @10.129.14.128
# PTR — من IP لاسم
dig PTR 10.129.34.16
→ dc1.internal.inlanefreight.htb
💡 @ في الأمر = حدد السيرفر اللي تسأله مباشرة
💥 Zone Transfer — AXFR
# Zone Transfer على الدومين الخارجي:
dig axfr inlanefreight.htb @10.129.14.128
# Zone Transfer على الدومين الداخلي:
dig axfr internal.inlanefreight.htb @10.129.14.128
# لو نجح — تشوف كل الأجهزة:
dc1.internal → 10.129.34.16 ← DC!
dc2.internal → 10.129.34.11 ← DC!
vpn.internal → 10.129.1.6
wsus.internal → 10.129.18.2
💀 Zone Transfer ناجح = خريطة كاملة للشبكة الداخلية!
🔄 dnsenum — كل شيء تلقائي
dnsenum --dnsserver 10.129.14.128 \
--enum -p 0 -s 0 \
-o subdomains.txt \
-f /opt/useful/seclists/Discovery/DNS/subdomains-top1million-110000.txt \
inlanefreight.htb
# تلقائياً:
✓ NS records
✓ MX records
✓ Zone Transfer محاولة
✓ Subdomain Brute Force
ns.inlanefreight.htb. → 10.129.34.136
mail1.inlanefreight.htb. → 10.129.18.201
app.inlanefreight.htb. → 10.129.18.15
✅ dnsenum يجمع كل شيء دفعة وحدة — ابدأ بها!
⚡ Subdomain Brute Force
لو Zone Transfer فشل — جرب آلاف الأسماء واحدة وحدة:
# Bash Loop:
for sub in $(cat /opt/useful/seclists/Discovery/DNS/subdomains-top1million-110000.txt); do
dig $sub.inlanefreight.htb @10.129.14.128 \
| grep -v ';\|SOA' \
| sed -r '/^\s*$/d' \
| grep $sub | tee -a subdomains.txt
done
ns.inlanefreight.htb. IN A 10.129.34.136
mail1.inlanefreight.htb. IN A 10.129.18.201
app.inlanefreight.htb. IN A 10.129.18.15
💡 SecLists = قوائم جاهزة للـ pentest. تثبيت:
sudo apt install seclistsMethodology
⛓️ خطوات الـ DNS Footprinting
1
NS Records — إيجاد الـ DNS Servers
أول خطوة — الـ NS servers هي هدفك الأساسي
dig ns inlanefreight.htb @10.129.14.128
في شبكة Windows: NS server = Domain Controller غالباً 🎯
2
Zone Transfer — الخريطة الكاملة
جرب AXFR — لو نجح انتهى الأمر!
dig axfr inlanefreight.htb @10.129.14.128
dig axfr internal.inlanefreight.htb @10.129.14.128
3
ANY Query — كل الـ Records
اجمع كل المعلومات المتاحة
dig any inlanefreight.htb @10.129.14.128
4
لو Zone Transfer فشل — Brute Force
استخدم SecLists لإيجاد subdomains مخفية
dnsenum --dnsserver 10.129.14.128 --enum \
-f /opt/useful/seclists/Discovery/DNS/subdomains-top1million-110000.txt \
inlanefreight.htb
5
PTR Lookup على الـ IPs
من IPs عرّف وظيفة كل جهاز
dig PTR 10.129.34.16
→ dc1.internal.inlanefreight.htb
dc1/dc2 = Domain Controllers = أهداف أولى 💥
🗺️ ما تكشفه DNS كاملاً
# من DNS records فقط تعرف:
NS → ns1.inlanefreight.com = 10.129.34.136 ← DC!
MX → mail1.inlanefreight.com ← Mail = Phishing
TXT → "ip4:10.129.124.8" ← IP داخلي!
TXT → "atlassian-domain-verification=..." ← يستخدمون Jira
TXT → "MS=ms97310371" ← Microsoft 365
AXFR→ dc1, dc2, vpn, wsus, ws1, ws2 ← كل البنية!
Explained — Q&A
🌐 الأساسيات
ليش DNS موزع على آلاف السيرفرات؟
سببين: أولاً السرعة — تتصل بالأقرب لك. ثانياً الموثوقية — لو سيرفر واحد وقع الباقين يكملون. لو كان سيرفر واحد فقط، أي هجوم عليه = الإنترنت كله يتوقف!
ليش /etc/resolv.conf مهم في pentest؟
لو وصلت لجهاز مخترق وشفت resolv.conf — الـ nameserver فيه هو DNS server الشبكة الداخلية. في شبكات Windows هاد غالباً = Domain Controller. يعطيك IP الـ DC مباشرة!
📋 DNS Records
ليش NS record يشير غالباً لـ Domain Controller؟
لأن الـ Domain Controller يشغّل خدمة DNS داخلياً. في شبكات Windows، DC يحل أسماء الأجهزة الداخلية. فالـ NS server هو نفسه الـ DC في معظم الحالات.
إيش تستفيد من TXT record في الـ pentest؟
يكشف خدمات الشركة (Atlassian = Jira، MS = Microsoft 365، mailgun = email service) وأهم شيء: IPs داخلية في SPF records. "ip4:10.129.124.8" = IP جهاز داخلي مكشوف!
💥 Zone Transfer
ما هو Zone Transfer وليش خطير؟
Zone Transfer = مزامنة DNS records بين Primary وSecondary servers. لو allow-transfer = any، أي شخص يطلب نسخة كاملة من كل الـ records. يعني: dc1, dc2, vpn, mail, wsus, ws1, ws2 كل البنية التحتية دفعة وحدة!
ما معنى @ في أمر dig؟
يحدد أي DNS server تسأل مباشرة. بدونه dig يسأل الـ DNS الافتراضي (8.8.8.8) اللي ما يعرف الدومينات الداخلية. مع @ تسأل السيرفر الداخلي اللي يعرف كل شيء.
لو Zone Transfer فشل — إيش البديل؟
Subdomain Brute Force — تجرب 110,000 اسم من SecLists واحداً وحدة. أبطأ بكثير لكن يكشف subdomains مخفية مثل admin.company.com أو dev.company.com.