احسان امجدی
کارشناس امنیت اطلاعات و ارتباطات

کاملترین آموزش حمله DNS Enumeration | انواع | تکنیک ها | ابزارها

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

آموزش DNS Enumeration قسمت 1 : آموزش ابزار DNSEnum

در مورد DNS Enumerating در ویندوز بسیار صحبت کردیم. در این آموزش قصد داریم تا بصورت عملی نحوه کار با ابزار DNSenum را در لینوکس کالی بشما آموزش دهیم. مطالب گفته شده جزو مطالب پایه ای در دوره PWK یا تست نفوذ با کالی میباشند. پس بی مقدمه به سراغ آموزش میرویم:

وب سایت توسینسو

DNS یا بعبارتی (Domain Name System (Service// Server، یک سرویس تحت شبکه است که نام های شبکه (Domain name) را به آدرس های IP و بلعکس تبدیل میکند. به علت آن که نام های شبکه متشکل از حروف الفبا هستند، راحت تر بخاطر سپرده میشوند؛ اما این در حالی است که اینترانت بر اساس IP کار میکند. هر زمانی که شما از نام های دومینی استفاده میکنید، سرویس DNS باید این نام را به آدرس IP متناظر آن تبدیل کند. برای مثال نام دومینی www.tosinso.com به آدرس 198.105.232.4 تبدیل میشود.

وب سایت توسینسو

یکی از مهمترین مراحل در یک حمله، جمع آوری اطلاعات است. برای آن که بتوان یک حمله را ترتیب داد، نیاز است تا اطلاعات پایه و اساسی را در مورد هدف جمع آوری کنیم. بنابراین هرچه اطلاعات بیشتری در مورد هدف جمع شود، احتمال موفقیت آمیز بودن حمله بالاتر میرود.Enumeration فرایندی است که بما این اجازه را میدهد تا بتوانیم از یک شبکه اطلاعات لازم را جمع آوری کنیم. در اینجا بطور مختصر قصد داریم تا تکنیک های DNS Enumeration و SNMP Enumeration را برای شما در لینوکس کالی توضیح دهیم.

DNS Enumeration فرآیند مکان یابی تمام سرورهای DNS و داده های موجود در آن ها در مورد یک سازمان است. DNS Enumeration بما این امکان را میدهد تا اطلاعات حساس درمورد یک سازمان مانند یوزرنیم ها، نام سیستم ها، آدرس های IP و نظایر آن را جمع آوری نماییم. برای آن که بتوانیم این کار را انجام دهیم، از ابزار DNSenum استفاده میکنیم.در مورد SNMP Enumeration نیز از ابزاری بنام SnmpEnum استفاده خواهیم نمود. این ابزار یکی از قویترین ابزارها در زمینه SNMP Enumeration است که به کاربران این اجازه را میدهد تا ترافیک SNMP را بر روی یک شبکه آنالیز کنند.برای اجرای DNSenum به مسیر زیر رفته و آن را اجرا نمایید:

Application> Kali Linux> Information Gathering> DNS Analysis> dnsenum
وب سایت توسینسو

و در نهایت فرمان زیر را وارد کنید:

root@kali:~# dnsenum – – enum test.com

اجرای این فرمان بشما آدرس هاست، آدرس Name Server ها، میل سرورها (MX) و اطلاعات Zone Transfer را نشان خواهد داد.

وب سایت توسینسو
وب سایت توسینسو

اگر میخواهید اسکن قدرتمند تری در مورد دومین های زیرمجموعه هم داشته باشید، از عبارت زیر باید استفاده کنید:

root@kali:~# dnsenum – – enum –f –r test.com

گزینه های زیادی وجود دارند که ما بوسیله آن ها میتوانیم از DNSenum استفاده کنیم؛ آن ها عبارتند از:

  • [threads [number- بشما این امکان را میدهد تا پردازش های زیادی را آن واحد انجام دهید.
  • r- بشما این امکان را میدهد تا جستجوهای بازگشتی را فعال کنید.
  • d- بشما این امکان را میدهد تا در حد چند ثانیه بین درخواست های Whois تاخیر بیاندازید.
  • o- این امکان را میدهد تا مکان خروجی را مشخص کنیم.
  • w- این امکان را میدهد تا جستجویهای Whois را فعال کنیم.

خوب دوستان در این آموزش کوتاه توانستیم با ابزار DNSenum که یکی از ابزار قدرتمند Enumerate کردن سرورها و رکوردهای DNS است، آشنا شویم. با آموزش های بعد در این زمینه با ما همراه باشید.

  • نکته: این آموزش صرفا در جهت اهداف علمی و آموزشی مطرح شده است.

آموزش DNS Enumeration قسمت 2 : دسترسی به رکوردهای DNS

در مورد جمع آوری اطلاعات به کرات و با استفاده از ابزارهای مختلف در جلسات پیش صحبت شد. هنگامی که شما اطلاعات لازم و کافی را درباره هدف با استفاده از ابزارهای متن باز (open source) و دیگر تکنیک های جمع آوری پسیو اطلاعات بدست آوردید، در گام بعد میتوانید اطلاعات تکمیلی و بیشتری را از سرویس های خاص و دیگری که در شبکه هدف وجود دارند بدست آورید. در این سری از نکات قصد داریم تا چندین آپشن از جمع آوری اکتیو اطلاعات را خدمت شما بیان کنیم. توجه داشته باشید که سریوس هایی که در این سری آموزشات خدمت شما معرفی میشوند جزو سرویس های مقدماتی و پایه در جمع آوری اکتیو اطلاعات هستند.

وب سایت توسینسو

DNS Enumeration چیست؟

سرویس DNS معمولا منبعی پرسود در جمع آوری اکتیو اطلاعات است. DNS اطلاعات مختلف و متنوعی را درباره سرورهای عمومی شبکه (و گهگاهی هم سرورهای خاص) مانند آدرس های IP، نام سرورها و نوع عملکرد آن ها را در اختیار ما میگذارد.

آموزش DNS Enumeration قسمت 3 : آموزش کار کردن با DNS در کالی

سرور DNS معمولا اطلاعات DNS و سرور Mail موجود در دامینی که ثبت شده است را براحتی در فاش میکند. البته نمیتوان این موضوع را جز باگ های DNS بشما آورد چرا که علاوه بر این که این افشای اطلاعات باگ نیست، بلکه در شبکه نیز جز موارد لازم بحساب میآید. برای مثال درخواست عمومی برای دسترسی به آدرس سرورهای mail و DNS، یکی از پایه ای ترین موارد لازم در دنیای اینترنت است. برای مثال دامین megacorpone.com را مورد آزمایش قرار میدهیم. میخواهیم از فرمان host به همراه سوئیچ -t استفاده کنیم تا از طریق آن سرورهای Mail و DNS برای دامین megacorpone.com پیدا نماییم.

root@kali:~# host –t ns megacorpone.com
megacorpone.com name server ns2.megacorpone.com.
megacorpone.com name server ns1.megacorpone.com.
megacorpone.com name server ns3.megacorpone.com.
root@kali:~# host –t mx megacorpone.com
megacorpone.com mail is handled by 60 mail.megacorpone.com.
megacorpone.com mail is handled by 50 mail2.megacorpone.com.

بصورت پیش فرض هر دامینی که ساختاربندی می‌شود، حداقل باید برای آن دامین باید سرورهای DNS و Mail را نیز به عنوان سرورهای عمومی آن شبکه معرفی کرد.

آموزش DNS Enumeration قسمت 4 : انجام جستجوهای اتوماتیک

با انجام مثال قبل توانستیم اطلاعات اولیه را از دامین megacorpone.com بدست آوریم. میتوانیم با استفاده از کوئری های دیگری از DNS، اطلاعات بیشتری از نام هاست ها و آدرس های IP ای که متعلق به دامین megacorpone.com هستند، بدست آوریم. برای مثال میتوانیم فرض کنیم که دامین megacorpone.com یک وب سرور با نام احتمالی www دارد. میتوانیم این فرضیه را با استفاده مجدد از فرمان host تست کنیم:

root@kali:~# host www.megacorpone.com
www.,egacorpone.com has address 50.7.67.162

حالا میخواهیم بررسی کنیم که دامین megacorpone.com آیا سروری با نام idontexist دارد؟ به خروجی کوئری های زده شده، توجه کنید.

root@kali:~# host idontexist.megacorpone.com
Host idontexist.megacorpone.com not found: 3(NXDOMAIN)
وب سایت توسینسو

آموزش DNS Enumeration قسمت 5 : جستجوی مستقیم با Brute force

با استفاده از مفهوم بیان شده در مرحله قبل میتوانیم این گام را نیز اجرا کنیم. در واقع میتوانیم با استفاده از فرمان "host" و یک اسکریپت Bash، فرآیند درخواست مستقیم جستجوی (lookup) نام هاست های عمومی شبکه را خودکار کنیم. ایده ای که پشت سر این روش وجود دارد، حدس زدن نام سرورهای (host name) فعال از طریق تلاش در تبدیل این نام های حدس زده شده به IP متناظر آن ها است.

اگر نامی (host name) که حدس زده بودیم در فرآیند lookup، موجودیت آن به اثبات رسید، از طریق آن میتوان فعال بودن و گهگاهی نقش آن سرور را نیز تعیین نمود. میتوانیم لیستی کوتاه و یا بلند از نام های (host name) محتمل را تهیه کرده و با ایجاد یک حلقه بی نهایت (loop) از فرمان "host"، صحت وجود هرکدام از آن ها را امتحان نماییم.

root@kali:~# echo www >> list.txt
root@kali:~# echo ftp >> list.txt
root@kali:~# echo mail >> list.txt
root@kali:~# echo owa >> list.txt
root@kali:~# echo proxy >> list.txt
root@kali:~# echo router >> list.txt
root@kali:~# for ip in $(cat list.txt); do host $ip.megacorpone.com;done
www.megacorpone.com hass address 50.7.67.162
Host ftp.megacorpone.com not found: 3(NXDOMAIN)
mail.megacorpone.com has address 50.7.67.155
Host owa.megacorpone.com not found: 3(NXDOMAIN)
Host proxy.megacorpone.com not found: 3(NXDOMAIN)
Router.megacorpone.com has address 50.7.67.190
root@kali:~#

در این مثال ساده، متوجه شدیم که موجودیت نام های هاست www، router و mail از طریق این حمله Brute-Force کشف شده اند. در طرف دیگر، نام های هاست owa، ftp و proxy، پیدا نشدند.

آموزش DNS Enumeration قسمت 6 : جستجوی معکوس با Brute force

جستجوی مستقیم ما با استفاده از روش brute-force، مجموعه ای از IP های پراکنده را بما نشان داد. اگر مسئول پیکربندی DNS در دامین megacorpone.com رکوردهای PTR را نیز برای این دامین پیکربندی میکرد، در جستجوی پیش ممکن بود نام های دامینی بیشتری را با جستجوی رنج IP های پیدا شده در یک لوپ بدست آوریم.

root@kali:~# for ip in $(seq  155  190);do host 50.7.67.$ip;donw  | grep –v "not found" ; done
155.67.7.50.in-addr.arpa domain name pointer mail.megacorpone.com.
162.67.7.50.in-addr.arpa domain name pointer www.megacorpone.com.
163.67.7.50.in-addr.arpa domain name pointer mail2.megacorpone.com.
164.67.7.50.in-addr.arpa domain name pointer www2.megacorpone.com.
165.67.7.50.in-addr.arpa domain name pointer beta.megacorpone.com.
….

آموزش DNS Enumeration قسمت 7 : آموزش انجام Zone Transfer

فرآیند Zone transfer بسیار شبیه عمل همانند سازی (replicate) مابین سرورهای DNS مرتبط بهم است. این فرآیند شامل کپی شدن فایل های زون از یک سرور DNS اصلی (Master) به یک سرور DNS فرمانبردار (slave) است. فایل زون شامل لیستی از تمام نام های DNS است که در آن زون ایجاد و ساختاربندی شده اند.

فرآیند انتقال زون (zone transfer) معمولا باید در مواجهه با سرورهای slave غیر مجاز و شناخته نشده با محدودیت روبرو شوند اما متاسفانه بسیاری از مدیران شبکه سرورهای DNS را بطور صحیح پیکربندی نمیکنند. درنتیجه هرکسی که با درخواست انتقال یک کپی از فایل زون، میتواند یک نسخه آن را دریافت کند.

وب سایت توسینسو

یک فرآیند انتقال زون موفق مستقیما به معنی وجود رخنه در یک شبکه نیست. عبارت دستوری "host" برای انجام فرآیند انتقال زون در زیر بیان شده است:

Host –l <domain name>  <dns server address>

در آخرین فرمان "host" که وارد کردیم، متوجه شدیم که دو سرور DNS در اختیار دامین megacorpone.com هستند: ns1 و ns2. میخواهیم بر روی هرکدام از آن ها فرآیند انتقال زون را تست کنیم:

root@kali:~# host –l megacorpone.com ns1.megacorpone.com
; transfer failed
Using domain server:
Name: ns1.megacorpone.com
Address: 50.7.67.186#53
Aliases: 
Host megacorpone.com not found: 5(REFUSED)
; Transfer failed.
root@kali:~# host –l megacorpone.com ns2.megacorpone.com
Using domain server:
Name: ns2.megacorpone.com
Address: 50.7.67.154#53
Aliases:

Megacorpone.com name server ns1.megacorpone.com.
Megacorpone.com name server ns2.megacorpone.com.
Megacorpone.com name server ns3.megacorpone.com.
Admin.megacorpone.com has address 50.7.67.187
Beta.megacorpone.com has address 50.7.67.165
Fs1.megacorpone.com has address 50.7.67.166
interanet.megacorpone.com has address 50.7.67.188
mail.megacorpone.com has address 50.7.67.155
mail2.megacorpone.com has address 50.7.67.163
ns1.megacorpone.com has address 50.7.67.186
ns2.megacorpone.com has address 50.7.67.154
ns3.megacorpone.com has address 50.7.67.170
router.megacorpone.com has address 50.7.67.190
router.megacorpone.com has address 10.7.0.1
siem.megacorpone.com has address 50.7.67.180
snmp.megacorpone.com has address 50.7.67.181
syslog.megacorpone.com has address 50.7.67.178
test.megacorpone.com has address 50.7.67.182
vpn.megacorpone.com has address 50.7.67.189
www.megacorpone.com has address 50.7.67.162
www2.megacorpone.com has address 50.7.67.164
root@kali:~#

در این مثال، ns1 در مقابل درخواست انتقال زون، جواب رد داد در حالی ns2 آن را قبول کرد. در نتیجه یک دامپ کامل از فایل زون برای دامین megacorpone.com را شاهد هستیم که در قالب لیستی از IP ها و نام های DNS ای برای دامین megacorpone.com بما ارائه شده است.

در مثال بالا دامین megacorpone.com فقط دو سرور DNS دارد که باید هرکدام چک شوند اما برخی از شرکت های بزرگ ممکن است تعداد بیشتری سرور DNS داشته باشند و یا ممکن است بخواهند تا درخواست های انتقال زون را علیه یک دامین خاص اجرا کنند. در اینجا اسکریپت نویسی Bash به بازی میآید. برای انجام انتقال زون توسط فرمان "host" به دو پارامتر نیاز داریم: نام دامین تحلیل شده و آدرس name server. برای دریافت name server های یک دامین در فرمت صحیح باید دستور زیر را دنبال کنیم:

root@kali:~# host –t ns megacorpone.com | cut –d " " –f 4
ns2.megacorpone.com.
ns1.megacorpone.com.

برای آن که بتوانیم این کار را در دفعات بعدی نیز انجام دهیم، اسکریپت ساده ای از Bash را مینویسیم تا فرآیند تلاش برای انتقال زون برای روی هر سرور DNS ای که پیدا میکنیم، خودکار صورت پذیرد.

# /bin/bash
# Simple Zone Transfer Bash Script
# $1 is the first argument given after the bash script
# Check if argument was given, if not, print usage
If [ -z "$1" ]; then
Echo "[*] Simple Zone transfer script"
Echo "[*] Usage   : $0 <domain name>  "
Exit 0
Fi


# if argument was given, identify the DNS servers for the domain
For server in $(host –t ns $1 | cut –d " " –f4);do
# for each of these servers, attempt a zone transfer
Host –l $1 $server |grep "has address"
Done

اجرای این اسکریپت بر روی دامین megacorpone.com باید بصورت خودکار هر دو name server را شناسایی کرده و تلاش کند تا بر روی هر کدام از آن ها عمل انتقال زون را انجام دهد.

root@kali:~# chmod 755 dns-axfr.sh
root@kali:~# ./dns-axfr.sh megacorpone.com
admin.megacorpone.com has address 50.7.67.187
beta.megacorpone.com has address 50.7.67.165
Fs1.megacorpone.com has address 50.7.67.166
interanet.megacorpone.com has address 50.7.67.188
mail.megacorpone.com has address 50.7.67.155
mail2.megacorpone.com has address 50.7.67.163
ns1.megacorpone.com has address 50.7.67.186
ns2.megacorpone.com has address 50.7.67.154
ns3.megacorpone.com has address 50.7.67.170
router.megacorpone.com has address 50.7.67.190
router.megacorpone.com has address 10.7.0.1
siem.megacorpone.com has address 50.7.67.180
snmp.megacorpone.com has address 50.7.67.181
syslog.megacorpone.com has address 50.7.67.178
test.megacorpone.com has address 50.7.67.182
vpn.megacorpone.com has address 50.7.67.189
www.megacorpone.com has address 50.7.67.162
www2.megacorpone.com has address 50.7.67.164
root@kali:~#

آموزش DNS Enumeration قسمت 8 : آموزش ابزار DNSRecon

ابزار DNSRecon یک اسکریپت مدرن و پیشرفته در بازیابی رکوردها و اطلاعات DNS میباشد که بزبان Python نوشته شده است. اجرای اسکریپت dnsrecon بر روی دامین تستی megacorpone.com، خروجی زیر را در بر خواهد داشت:

root@kali:~# dnsrecon –d megacorpone.com –t axfr
[*] testing NS Servers for Zone transfer
[*] Checking fore Zone Transfer for megacorpone.com name servers
[*] Resolving SOA Record [*]		SOA ns1.megacorpone.com 50.7.67.186
[*] Resolving NS Records
[*] NS Servers found:
[*]	NS ns2.megacorpone.com 5.7.67.154
[*]	NS ns1.megacorpone.com 5.7.67.186
[*]	NS ns3.megacorpone.com 5.7.67.170
[*] Removing any duplicate NS server IP Addresses…
[*]
[*] trying NS server 50.7.67.154
[*] 50.7.67.154 Has port 53 TCP open
[*] Zone Transfer was successful!!
[*]		MX@.megacorpone.com  fb.mail.gandi.net 	217.70.184.163
[*]		MX@.megacorpone.com  fb.mail.gandi.net 	217.70.184.162
[*]		MX@.megacorpone.com  spool.mail.gandi.net 	217.70.184.6
[*]		MX@.megacorpone.com  spool.mail.gandi.net 	2001:4b98:c:521::6
[*]		A admin.megacorpone.com	50.7.67.187
[*]		A fs1.megacorpone.com 	50.7.67.166
[*]		A www2.megacorpone.com 	50.7.67.174
[*]		A test.megacorpone.com	50.7.67.182
[*]		A ns1.megacorpone.com	50.7.67.186
[*]		A ns2.megacorpone.com	50.7.67.154
[*]		A ns3.megacorpone.com	50.7.67.170
[*]		A www.megacorpone.com	50.7.67.162
[*]		A siem.megacorpone.com	50.7.67.180
[*]		A mail2.megacorpone.com	50.7.67.163
[*]		A router.megacorpone.com	50.7.67.190
[*]		A mail.megacorpone.com	50.7.67.155
[*]		A vpn.megacorpone.com	50.7.67.189
[*]		A snmp.megacorpone.com	50.7.67.181
[*]		A syslog.megacorpone.com	50.7.67.178
[*]		A beta.megacorpone.com	50.7.67.165
[*]		A interanet.megacorpone.com	50.7.67.188

آموزش DNS Enumeration قسمت 9 : آموزش ابزار  DNSEnum

این ابزار یکی دیگر از ابزارهای محبوب در زمینه بازیابی و بدست آوردن اطلاعات از DNS یا همان DNS Enumeration است. اجرای این اسکریپت را بر روی دامین zonetransfer.me، که صرفا اجازه انتقال زون (zone transfer) بما میدهد، تست خواهیم کرد که در نهایت خروجی زیر بما برگشت داده میشود:

root@kali:~# dnsenum zonetransfer.me
dnsenum.pl VERSION:1.2.2
------	zonetransfer.me      ------

Host’s addresses:

Zonetransfer.me						7200		IN	A	
217.147.180.162

Name Servers:

Ns12.zoneedit.com		3653	IN	A	209.62.64.46
Ns16.zoneedit.com		6975	IN	A	69.64.68.41

Mail (MX) Servers:

ASPMX5.GOOGLEMAIL.COM		293	IN	A	173.194.69.26
ASPMX.L.GOOGLE.COM			293	IN	A	173.194.74.26
ALT1.ASPMX.L.GOOGLE.COM		293	IN	A	173.194.66.26
ALT2.ASPMX.L.GOOGLE.COM		293	IN	A	173.194.65.26
ASPMX2.GOOGLEMAIL.COM		293	IN	A	173.194.78.26
ASPMX3.GOOGLEMAIL.COM		293	IN	A	173.194.65.26
ASPMX4.GOOGLEMAIL.COM		293	IN	A	173.194.70.26


Trying Zone Transfer for zonetransfer.me on ns12.zoneedit.com…

Zonetransfer.me				7200	IN	SOA
Zonetransfer.me				7200	IN	NS
Zonetransfer.me				7200	IN	NS
Zonetransfer.me				7200	IN	MX
Zonetransfer.me				7200	IN	MX
Zonetransfer.me				7200	IN	MX
Zonetransfer.me				7200	IN	MX
Zonetransfer.me				7200	IN	MX
Zonetransfer.me				7200	IN	MX
…
Office.zontransfer.me			7200	IN	A	4.23.39.254
Owa.zonetransfer.me				7200	IN	A	207.46.197.32
Info.zonetransfer.me			7200	IN	TXT
Asfdbbox.zonetransfer.me			7200	IN	A	127.0.0.1
Conberra_office.zonetransfer.me			7200	IN	A	202.14.81.230
Asfdbvolume.zonetransfer.me		7800	IN	AFSDB	
Email.zonetransfer.me			2222	IN	NAPTR
Dzc.zonetransfer.me				7200	IN	TXT	
Robinwood.zonetransfer.me			302	IN	TXT
Vpn.zonetransfer.me				4000	IN	A	174.36.59.154
_sip._tcp.zonetransfer.me			14000	IN	SRV
Dc_office.zonetransfer.me			7200	IN	A	143.228.181.132

Ns16.zoneedit.com Bind Version: 8.4.x

Brute force file not specified, bye.
root@kali:~#

احسان امجدی
احسان امجدی

کارشناس امنیت اطلاعات و ارتباطات

احسان امجدی ، مشاور امنیت اطلاعات و ارتباطات و تست نفوذ سنجی ، هکر کلاه سفید ، مدرس دوره های تخصصی امنیت اطلاعات و شبکه ، تخصص در حوزه های سرویس های مایکروسافت ، Routing و Switching ، مجازی سازی ، امنیت اطلاعات و تست نفوذ ، کشف جرائم رایانه ای و سیستم عامل لینوکس ، متخصص در حوزه SOC و ...

09 تیر 1394 این مطلب را ارسال کرده

نظرات