
در این مقاله آموزشی شما یاد خواهید گرفت که چگونه میزبانهای هدف را در شبکه به کمک کالی لینوکس شناسایی کنید.
شناسایی میزبانهای زنده (Identifying Live Hosts)
روشهای متعددی برای تعیین این که آیا یک میزبان در شبکه فعال است وجود دارد.
PING
شما میتوانید از Ping برای بررسی سریع اتصال شبکه استفاده کنید. پس Ping چگونه در پسزمینه کار میکند؟
زمانی که دستور ping را اجرا میکنید، میزبان Kali شما یک درخواست ICMP echo به مقصد ارسال میکند و سپس هدف با یک بسته ICMP echo reply پاسخ میدهد. بنابراین، میتوانید بگویید که هدف زنده است. دستور ping برای مدیران سیستم مفید است و در ادامه خواهید دید که چرا باید از Nmap برای اسکن میزبانهای زنده استفاده کنید. در نهایت، باید آگاه باشید که برخی از مدیران سیستم ممکن است ICMP echo را در سطح فایروال مسدود کنند تا از بررسی اتصال برخی از سرورها توسط هکرها جلوگیری کنند.
ARP
Address Resolution Protocol یک ابزار عالی است که آدرسهای IP را به آدرسهای فیزیکی MAC در یک شبکه محلی نگه داری میکند. حال میتوانیم از محتوای جدول ARP برای فهرست کردن تمام میزبانها در همان شبکه استفاده کنیم، با استفاده از دستور arp-scan در Kali:
root@kali:~# arp-scan 10.0.0.1/24 Interface: eth0, type: EN10MB, MAC: 00:0c:29:40:e7:a6, IPv4: 10.0.0.20 WARNING: host part of 10.0.0.1/24 is non-zero Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/ arp-scan) 10.0.0.1 b4:fb:e4:2f:04:3d Ubiquiti Networks Inc. 10.0.0.2 fc:ec:da:d4:d5:99 Ubiquiti Networks Inc. 10.0.0.5 b4:fb:e4:1b:c4:d2 Ubiquiti Networks Inc. 10.0.0.10 70:5a:0f:f6:fc:3a Hewlett Packard 10.0.0.50 00:11:32:94:25:4c Synology Incorporated 10.0.0.75 fc:ec:da:d8:24:07 Ubiquiti Networks Inc. 10.0.0.102 d0:2b:20:95:3b:96 Apple, Inc.
Nmap
حالا وقت آن رسیده که ابزار مورد علاقهام را که برای شناسایی میزبانهای زنده استفاده میکنم، به شما نشان دهم: Nmap. شما باید از گزینههای دستور زیر برای انجام کار استفاده کنید:
$nmap -sn [IP Address / Range]
برای کمک به یادآوری این دستور، گزینه -s را به عنوان “Sam” و N را به عنوان “Nanny” در نظر بگیرید. معنی واقعی این گزینهها به شرح زیر است:
■ n برای No است.
■ s برای Scan است.
به همین دلیل است که نام این گزینه No Port Scan است. برخی افراد آن را Ping Scan مینامند، اما آن را با ابزار ICMP Ping که قبلاً در این فصل درباره آن صحبت کردیم اشتباه نگیرید. حالا که این را گفتیم، بیایید ببینیم چرا این گزینه جادویی است. برای شناسایی میزبانهای زنده، Nmap سعی خواهد کرد اقدامات زیر را انجام دهد:
- یک درخواست ICMP echo ارسال میکند و Nmap اگر ICMP مسدود شده باشد تسلیم نمیشود.
- همچنین یک درخواست ICMP timestamp ارسال میکند.
- یک بسته ACK به پورت 80 ارسال میکند و یک بسته SYN به پورت 443 ارسال میکند.
- در نهایت، یک درخواست ARP ارسال میکند.
چقدر قدرتمند است، درست است؟ مهم است که درک کنید برای اجرای تمام این قابلیتها باید به عنوان root (یا عضو گروه sudo) روی سیستم Kali خود وارد شوید، در غیر این صورت گزینههای شما محدود خواهد بود و نمیتوانید تمام این عملکردها را اجرا کنید. حالا بیایید Sam و Nanny را به عمل بیندازیم:
root@kali:~# nmap -sn 10.0.0.1/24 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:25 EDT Nmap scan report for USGPRO (10.0.0.1) Host is up (0.00036s latency). MAC Address: B4:FB:E4:2F:04:3D (Ubiquiti Networks) Nmap scan report for unifi (10.0.0.2) Host is up (0.00027s latency). MAC Address: FC:EC:DA:D4:D5:99 (Ubiquiti Networks) Nmap scan report for 10.0.0.5 Host is up (0.0024s latency). MAC Address: B4:FB:E4:1B:C4:D2 (Ubiquiti Networks) Nmap scan report for 10.0.0.10 Host is up (0.0081s latency). MAC Address: 70:5A:0F:F6:FC:3A (Hewlett Packard) Nmap scan report for 10.0.0.50 Host is up (0.00066s latency). MAC Address: 00:11:32:94:25:4C (Synology Incorporated)
اسکن پورت و شناسایی سرویسها (Port Scanning and Services Enumeration) در کالی لینوکس
یکی از وظایفی که هنگام اسکن شبکه از شما خواسته میشود، جستجو برای پورتهای باز در هر میزبان است. چرا؟ فرض کنید میخواهید همه سرورهای وب موجود در شبکه محلی (LAN) را بشناسید؛ اسکن پورت این امکان را به شما میدهد که این اطلاعات را به راحتی بدست آورید. حالا بیایید ببینیم چگونه Nmap این وظیفه را مانند یک حرفهای انجام میدهد.
اسکن پورت TCP SYN
گزینههای زیادی در Nmap برای انجام اسکن پورت وجود دارد، اما آن چیزی که من همیشه برای TCP استفاده میکنم، اسکن SYN است. در واقع، Nmap به طور پیشفرض این نوع اسکن پورت را انجام میدهد:
$nmap -sS [IP address / Range]
برای به خاطر سپردن آن، میتوانید گزینه -sS را به سام و سامانتا ربط دهید. همیشه وقتی میخواهید اسکن پورت انجام دهید، به سام و سامانتا فکر کنید. اگر اسم شما سام باشد، خوششانس هستید، اما گزینه sS به معنای اسکن SYN است، و برخی افراد آن را اسکن مخفی (stealth scan) مینامند؛ من اصطلاحات سام – سامانتا را برای کمک به به خاطر سپردن آن اختراع کردم. اجازه دهید توضیح دهم که اسکن SYN در Nmap چگونه کار میکند. اسکنر، زمانی که با گزینه sS ارائه میشود، یک درخواست SYN به سرور ارسال میکند، و اگر یک SYN/ACK در پاسخ دریافت کند، نشان میدهد که پورت باز است. و اگر اسکنر هیچ SYN/ACK دریافت نکند، پورت بسته یا فیلتر شده است. برای ثبت در تاریخچه، فیلتر شده به این معنی است که یک فایروال از آن محافظت میکند.
root@kali:~# nmap -sS 10.0.0.1 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:27 EDT Nmap scan report for USGPRO (10.0.0.1) Host is up (0.00051s latency). Not shown: 996 closed ports PORT STATE SERVICE 22/tcp open ssh 53/tcp open domain 80/tcp open http 443/tcp open https MAC Address: B4:FB:E4:2F:04:3D (Ubiquiti Networks) Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
UDP
حالا، اسکن پورت UDP چطور است؟ برای استفاده از اسکن پورت UDP در Nmap، باید گزینه sU را اضافه کنید:
$nmap -sU [IP Address / Range]
مهم است که بدانید UDP به دلیل طبیعت بدون اتصال خود، کند است. همیشه میتوانیم از گزینه تایمینگ T5 برای تنظیم آن و سریعتر کردن فرآیند استفاده کنیم. فایروالها میتوانند به راحتی T5 را در یک آدرس اینترنتی مسدود کنند. گزینه T2 دوست شماست زمانی که آدرسهای IP اینترنتی را اسکن میکنید، تا بتوانید از رادار (فایروالها و غیره) عبور کنید:
$nmap -sU -T5 [IP Address / Range]
بنابراین، برای اینکه اسکنر UDP تشخیص دهد که آیا پورت باز یا بسته است، یک بسته UDP ارسال میکند و منتظر پاسخ از مقصد میماند. اگر Nmap پاسخی دریافت کند یا نه، احتمالاً پورت باز است. از طرف دیگر، اگر اسکنر یک خطای ICMP دریافت کند، به این معنی است که پورت یا بسته است یا فیلتر شده است.
root@kali:~# nmap -sU -T5 10.0.0.1 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:28 EDT Warning: 10.0.0.1 giving up on port because retransmission cap hit (2). Nmap scan report for USGPRO (10.0.0.1) Host is up (0.0014s latency). Not shown: 875 open|filtered ports, 123 closed ports PORT STATE SERVICE 53/udp open domain 123/udp open ntp MAC Address: B4:FB:E4:2F:04:3D (Ubiquiti Networks) Nmap done: 1 IP address (1 host up) scanned in 119.25 seconds
اصول استفاده از اسکنهای Nmap
بیایید چند نکته پایهای در مورد Nmap را بررسی کنیم. اگر شما Nmap را بدون هیچ گزینهای اجرا کنید، ابزار به طور پیشفرض سه عملکرد مهم را انجام خواهد داد:
- سرعت را روی T3 تنظیم میکند.
- 1000 پورت اصلی TCP را اسکن میکند.
- فرض بر این است که شما به عنوان root در سیستم Kali خود هستید، بنابراین به طور پیشفرض اسکن SYN TCP را تنظیم میکند.
به عبارت دیگر، تمام این موارد در پشت صحنه اتفاق میافتد، یعنی نیازی نیست که شما سرعت T3 را مشخص کنید، چون به طور پیشفرض تنظیم شده است. همینطور برای شمارههای پورت (نیازی نیست که –top-ports 1000 را اضافه کنید) یا اسکن SYN TCP (نیازی نیست که گزینه -sS را اضافه کنید). در مثالهای قبلی، ما گزینه sS را برای اسکن SYN مشخص کردیم، اما اینجا نیازی به انجام این کار نیست، چون Nmap به طور پیشفرض آن را تنظیم میکند، درست است؟
برای بخش تنظیمات، همیشه به یاد داشته باشید که سرعت را به درستی انتخاب کنید. به عنوان مثال، از سرعتی مانند T5 در یک آدرس IP تولیدی استفاده نکنید؛ در عوض، با گزینه پیشفرض (T3) بمانید. همچنین، مطمئن شوید که تعداد پورتها را به تناسب نیاز خود انتخاب کنید، یا 100 پورت اصلی یا گزینه پیشفرض 1000 پورت. حالا بیایید یک مثال عملی را بررسی کنیم؛ فرض کنید میخواهید فقط 100 پورت اصلی را با استفاده از اسکن TCP بررسی کنید:
#A quicker TCP scan $nmap –-top-ports 100 -T5 [IP Address / Range]
اگر هدف شما یک پورت خاص است، سپس از گزینه -p استفاده کنید، که به دنبال آن شماره پورت، بازه یا فهرست پورتها میآید:
#To scan for the HTTP port 80 on the network $nmap -p 80 [IP Address / Range]
در نهایت، اگر میخواهید تمام پورتها را اسکن کنید، از گزینه -p- استفاده کنید (همچنین میتوانید از -p 1-65535 استفاده کنید) تا هر پورت منفرد را اسکن کنید (اسکن تمام شمارههای پورت باعث میشود که هر برنامه مخفی شناسایی شود). من هرگز از این گزینه برای UDP استفاده نمیکنم (چون خیلی کند است)، اما برای اسکن TCP زیاد از آن استفاده میکنم (در دستور زیر، ما گزینه -sS را مشخص نکردیم، چون به طور پیشفرض تنظیم شده است):
root@kali:~# nmap -p- -T5 10.0.0.1 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:35 EDT Nmap scan report for USGPRO (10.0.0.1) Host is up (0.00097s latency). Not shown: 65531 closed ports PORT STATE SERVICE 22/tcp open ssh 53/tcp open domain 80/tcp open http 443/tcp open https MAC Address: B4:FB:E4:2F:04:3D (Ubiquiti Networks) Nmap done: 1 IP address (1 host up) scanned in 9.91 seconds
شناسایی سرویسها (Services Enumeration)
حالا وقت آن رسیده که ببینیم چگونه یک اسکن نسخه سرویس را با استفاده از بهترین اسکنر انجام دهیم: Nmap. گزینه انجام اسکن نسخه در Nmap -sV است. به طور کلی، یک روش خوب برای به خاطر سپردن گزینههای دستور در Nmap این است که برای هر حرف معنایی در نظر بگیرید. به عنوان مثال، s برای scan است و V برای version. ساده است، درست است؟ به همین دلیل است که به آن version scan گفته میشود. توجه داشته باشید که version scan بیشتر از یک اسکن پورت معمولی زمان میبرد، چون سعی میکند نوع سرویس را شناسایی کند.
در مثال زیر، ما همان میزبان قبلی را اسکن خواهیم کرد، اما این بار گزینه -sV را اضافه میکنیم (ستون نسخه را بررسی کنید):
root@kali:~# nmap -p- -T5 -sV 10.0.0.1 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:36 EDT Nmap scan report for USGPRO (10.0.0.1) Host is up (0.00097s latency). Not shown: 65531 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Debian 4~bpo70+1 (protocol 2.0) 53/tcp open domain dnsmasq 2.78-23-g9e09429 80/tcp open http lighttpd 443/tcp open ssl/http Ubiquiti Edge router httpd MAC Address: B4:FB:E4:2F:04:3D (Ubiquiti Networks) Service Info: OS: Linux; Device: router; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 25.88 seconds
در اینجا یک نکته خوب برای سریعتر کردن اسکن نسخه آورده شده است. آمادهاید؟ از آنجا که ما قبلاً برای پورتهای باز اسکن انجام دادهایم، دیگر نیازی نیست که دوباره تمام پورتها را با استفاده از -p- اسکن کنیم. در عوض، میتوانیم فقط شماره پورتهایی که در اسکن پورت قبلی شناسایی کردهایم را مشخص کنیم (زمان سرعت را با اسکن نسخه قبلی مقایسه کنید؛ نصف زمان خواهد بود!):
root@kali:~# nmap -p 22,53,80,443 -T5 -sV 10.0.0.1 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:39 EDT Nmap scan report for USGPRO (10.0.0.1) Host is up (0.00092s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Debian 4~bpo70+1 (protocol 2.0) 53/tcp open domain dnsmasq 2.78-23-g9e09429 80/tcp open http lighttpd 443/tcp open ssl/http Ubiquiti Edge router httpd MAC Address: B4:FB:E4:2F:04:3D (Ubiquiti Networks) Service Info: OS: Linux; Device: router; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 13.63 seconds
در نهایت، شما میتوانید شدت اسکن نسخه را تغییر دهید. به عبارت دیگر، چقدر میخواهید Nmap عمق اسکن نسخه هر سرویس را افزایش دهد؟ هرچه شدت بیشتر باشد، زمان بیشتری برای اسکن میزبان هدف نیاز خواهد بود. جدول 3.4 گزینههای شدت اسکن نسخه را خلاصه میکند:
Table 3.4: Nmap Version Intensity NMAP OPTION DESCRIPTION
———————————————-
–version-intensity [0-9] 9 is the highest intensity, and the default is 7. –version-light Is equivalent to –version-intensity 2. –version-all Is equivalent to –version-intensity 9.
نکته: شما همیشه میتوانید از دستور nmap -h برای فهرست کردن تمام گزینهها در داخل Nmap استفاده کنید، در صورتی که یکی از آنها را فراموش کرده باشید. برای اینکه تمام این گزینهها را از بر کنید، سالها تمرین نیاز است.
در مثال زیر، ما از گزینه –version-light برای سریعتر کردن اسکن استفاده خواهیم کرد. توجه داشته باشید که توانستیم زمان اسکن را یک ثانیه سریعتر از قبل کنیم بدون اینکه اطلاعات ستون نسخه را فدای سرعت کنیم (شاید یک ثانیه برای یک میزبان خیلی مهم نباشد، اما برای یک بازه شبکه، تفاوت زیادی خواهد داشت):
root@kali:~# nmap -p 22,53,80,443 -T5 -sV --version-light 10.0.0.1 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:41 EDT Nmap scan report for USGPRO (10.0.0.1) Host is up (0.00099s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Debian 4~bpo70+1 (protocol 2.0) 53/tcp open domain dnsmasq 2.78-23-g9e09429 80/tcp open http lighttpd 443/tcp open ssl/http Ubiquiti Edge router httpd MAC Address: B4:FB:E4:2F:04:3D (Ubiquiti Networks) Service Info: OS: Linux; Device: router; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 12.60 seconds
تشخیص سیستمعامل Operating System Fingerprinting
سناریوی زیر را تصور کنید: مدیر یا مشتری شما به شما مراجعه میکند و میگوید: “ما میخواهیم بدانیم که آیا کسی در شبکه ما از Windows XP استفاده میکند.” شما لبخند میزنید و میگویید: “البته، من میدانم چطور مثل یک حرفهای این کار را انجام دهم.” در این بخش، شما خواهید آموخت که چگونه سیستمعامل یک میزبان را در یک LAN با استفاده از Nmap شناسایی کنید.
برای انجام این کار، باید گزینه -O را اضافه کنید تا سیستمعامل میزبان هدف را شناسایی کنید. Nmap سعی خواهد کرد سیستمعامل هدف را با بررسی بستههایی که از میزبان دریافت میکند، شناسایی کند. سپس، Nmap تلاش خواهد کرد که اثر انگشت را با یک لیست ذخیرهشده مطابقت دهد. توجه داشته باشید که در مثال زیر، ما اسکن نسخه را اضافه کردهایم تا به شناسایی سیستمعامل کمک کنیم:
root@kali:~# nmap -sV -O -T4 10.0.0.187 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:45 EDT Nmap scan report for Win7Lab.ksec.local (10.0.0.187) Host is up (0.00035s latency). Not shown: 990 closed ports PORT STATE SERVICE VERSION 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP) 5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) 49152/tcp open msrpc Microsoft Windows RPC 49153/tcp open msrpc Microsoft Windows RPC 49154/tcp open msrpc Microsoft Windows RPC 49155/tcp open msrpc Microsoft Windows RPC 49156/tcp open msrpc Microsoft Windows RPC 49157/tcp open msrpc Microsoft Windows RPC MAC Address: 00:0C:29:1C:0E:EE (VMware) Device type: general purpose Running: Microsoft Windows 7|2008|8.1 OS CPE: cpe:/o:microsoft:windows_7::- cpe:/o:microsoft:windows_7::sp1 cpe:/o:microsoft:windows_server_2008::sp1 cpe:/o:microsoft:windows_server_2008:r2 cpe:/o:microsoft:windows_8 cpe:/o:microsoft:windows_8.1 OS details: Microsoft Windows 7 SP0 - SP1, Windows Server 2008 SP1, Windows Server 2008 R2, Windows 8, or Windows 8.1 Update 1 Network Distance: 1 hop Service Info: Host: WIN7LAB; OS: Windows; CPE: cpe:/o:microsoft:windows OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 66.00 seconds
موتور اسکریپتنویسی Nmap (Scripting Engine)
موتور اسکریپتنویسی Nmap (NSE) مجموعهای از قابلیتهای اضافی (مانند brute force، شناسایی DNS، شناسایی HTTP و غیره) را در بر دارد که باعث میشود Nmap مثل یک حرفهای عمل کند. تیم Nmap تمام این قابلیتها را به گروههای مختلف دستهبندی کرده است که در اینجا نشان داده شدهاند:
■ Auth
■ Broadcast
■ Default
■ Discovery
■ DOS
■ Exploit
■ External
■ Fuzzer
■ Intrusive
■ Malware
■ Safe
■ Version
■ Vuln
برای به دست آوردن فهرستی از تمام این اسکریپتهای NSE، کافیست محتوای دایرکتوری /usr/share/nmap/scripts را لیست کنید:
root@kali:~# ls /usr/share/nmap/scripts/ acarsd-info.nse http-hp-ilo-info.nse nping-brute.nse address-info.nse http-huawei-hg5xx-vuln.nse [...]
یک مثال رایج، شناسایی HTTP است که برای این منظور یک اسکریپت NSE وجود دارد. برای انجام این کار، ابتدا باید شماره پورت هدف را مشخص کنیم، و همچنین اسکن نسخه را اضافه خواهیم کرد (که اختیاری است، اما من آن را توصیه میکنم) تا اطلاعات دقیقتری به دست آوریم:
$nmap -p [port number] -sV –script [NSE script name] [IP address / range] root@kali:~# nmap -sV -p 80 --script http-enum 10.0.0.1 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:51 EDT Nmap scan report for USGPRO (10.0.0.1) Host is up (0.00082s latency). PORT STATE SERVICE VERSION 80/tcp open http lighttpd |_http-server-header: Server |_https-redirect: ERROR: Script execution failed (use -d to debug) MAC Address: B4:FB:E4:2F:04:3D (Ubiquiti Networks) Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 7.32 seconds
اسکن دستهبندی NSE
وقتی از اسکن دستهبندی استفاده میکنید، نیازی به مشخص کردن شماره پورت نیست، زیرا یک دستهبندی به چندین پورت مختلف (تمام پورتهای باز TCP) هدفگذاری میکند. رایجترین اسکن استفاده شده در تست نفوذ، اسکن اسکریپت پیشفرض -sC است. قبل از اینکه با یک مثال ادامه دهیم، باید بدانید چرا این اسکن محبوب است. اسکن اسکریپت پیشفرض دارای تعداد کمتری مثبت کاذب است (مثبت کاذب یعنی یک آسیبپذیری نادرست) و نسبت به سایر دستهها کمتر مزاحم سیستم هدف میشود (برخی از دستهها میتوانند باعث از کار افتادن میزبان هدف شما شوند، مانند دسته DOS).
root@kali:~# nmap -sV -sC 10.0.0.1 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:52 EDT Nmap scan report for USGPRO (10.0.0.1) Host is up (0.00059s latency). Not shown: 996 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Debian 4~bpo70+1 (protocol 2.0) | ssh-hostkey: | 1024 40:a1:21:7f:53:fe:71:41:bb:54:5d:83:1d:44:dd:65 (DSA) | 2048 fa:08:a3:16:7c:3a:48:e3:7e:d6:ea:2c:6a:5d:15:93 (RSA) | 256 36:d5:77:3f:f8:6f:a0:36:07:30:7a:43:1f:4d:ac:b5 (ECDSA) |_ 256 88:5a:3c:60:df:0a:dd:b2:2b:4e:a8:af:19:d7:f5:9e (ED25519) 53/tcp open domain dnsmasq 2.78-23-g9e09429 | dns-nsid: |_ bind.version: dnsmasq-2.78-23-g9e09429 80/tcp open http lighttpd |_http-server-header: Server |_http-title: Did not follow redirect to https://usgpro/ |_https-redirect: ERROR: Script execution failed (use -d to debug) 443/tcp open ssl/http Ubiquiti Edge router httpd | http-cookie-flags: | /: | PHPSESSID: |_ httponly flag not set |_http-server-header: Server |_http-title: UniFi Security Gateway | ssl-cert: Subject: commonName=UbiquitiRouterUI/ organizationName=Ubiquiti Inc./stateOrProvinceName=New York/ countryName=US | Subject Alternative Name: DNS:UbiquitiRouterUI | Not valid before: 2020-03-11T01:02:25 |_Not valid after: 2022-06-13T01:02:25 |_ssl-date: TLS randomness does not represent time MAC Address: B4:FB:E4:2F:04:3D (Ubiquiti Networks) Service Info: OS: Linux; Device: router; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 24.20 seconds
همچنین، میتوانید از سوئیچ -A برای اجرای اسکن اسکریپت پیشفرض استفاده کنید، اما باید بدانید که این گزینه شامل موارد زیر خواهد بود:
■ اسکن نسخه
■ اسکن SYN TCP
■ اسکن اسکریپت پیشفرض NSE
■ اسکن سیستمعامل
■ ردیابی شبکه (traceroute)
$nmap -A [IP address / range]
روش دیگری برای هدفگذاری چندین اسکریپت در یک دسته، استفاده از کاراکتر * است. به عنوان مثال، برای هدفگذاری تمام اسکریپتهای مرتبط با آسیبپذیریهای Samba، باید از دستور زیر استفاده کنید. (توجه داشته باشید که این دستور زمان زیادی برای اتمام خواهد برد. در هر لحظه از اجرا، میتوانید کلید Enter را فشار دهید تا درصد پیشرفت را مشاهده کنید.)
root@kali:~# nmap -sV -p 135,445 --script smb-vuln* 10.0.0.187 Starting Nmap 7.80 ( https://nmap.org ) at 2020-10-05 09:54 EDT Nmap scan report for Win7Lab.ksec.local (10.0.0.187) Host is up (0.00027s latency). PORT STATE SERVICE VERSION 135/tcp open msrpc Microsoft Windows RPC 445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP) MAC Address: 00:0C:29:1C:0E:EE (VMware) Service Info: Host: WIN7LAB; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_smb-vuln-ms10-054: false |_smb-vuln-ms10-061: NT_STATUS_ACCESS_DENIED | smb-vuln-ms17-010: | VULNERABLE: | Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010) | State: VULNERABLE | IDs: CVE:CVE-2017-0143 | Risk factor: HIGH | A critical remote code execution vulnerability exists in Microsoft SMBv1 | servers (ms17-010). | | Disclosure date: 2017-03-14 | References: | https://blogs.technet.microsoft.com/msrc/2017/05/12/customerguidance-for-wannacrypt-attacks/ | https://technet.microsoft.com/en-us/library/security/ms17-010 .aspx |_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143 Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 12.60 seconds
آرگومانهای NSE
برخی از اسکریپتهای NSE نیاز به وارد کردن آرگومانهای اضافی دارند. یک مثال خوب حمله brute-force است. بیایید بگوییم شما می خواهید سرویس SSH را در میزبان هدف brute-force کنید ،بنابراین باید اضافه کنید; باید از گزینه –script-args برای شناسایی فایلهای نامهای کاربری و رمزهای عبور استفاده کنید:
$nmap -p 22 -sV –script ssh-brute –script-args userdb=users.txt, passdb=passwords.txt
در پایان راز آشنایی با تمام این گزینهها استفاده از مرجع رسمی NSE در Nmap است.
DNS Enumeration
چرا این بخش در فصل اسکن شبکه قرار دارد؟ شمارش DNS ممکن است به ما کمک کند تا ماهیت هدف میزبانی که میخواهیم اسکن کنیم را شناسایی کنیم. علاوه بر این، شمارش DNS از موتورهای جستجوی عمومی برای جستجو در نامهای دامنه مخفی که در ابتدای کار خود از آنها آگاه نبودهایم، استفاده میکند. به عنوان مثال، هدف router.ethicalhackingblog.com احتمالاً یک روتر است (ethicalhackingblog.com دامنه من است؛ این فقط یک مثال است).
DNS Brute-Force
ابزارهای زیادی وجود دارند که از روش فورس کردن برای جستجوی نامهای دامنه DNS استفاده میکنند. ابتدا بیایید درک کنیم که DNS Brute-Force چگونه کار میکند و یک اسکریپت Bash خودمان توسعه دهیم. ابتدا یک لیست از زیر دامنههای احتمالی که ممکن است وجود داشته باشند را ذخیره میکنیم:
■ www
■ vpn
■ prod
■ api
■ dev
■ ftp
■ staging
■ mail
در عمل، من از فایلهای دیکشنری زیر دامنه از لیست موجود در گیتهاب استفاده میکنم: https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS حالا که فایل دیکشنری زیر دامنه خود را تعریف کردهایم، وقت آن است که اسکریپت Bash را توسعه دهیم:]
#! /bin/bash #This script will brute force domain names #Prompt to user to enter the domain name read -p "Enter the domain name that you want to brute-force: " DOMAIN_ NAME function check_domain(){ #Execute the host command and extract the live subdomains results=$(host $SUB_DOMAIN | grep 'has address') #if not empty results if [[ -n $results ]] then printf "Found $SUB_DOMAIN\n" fi } #read the dictionary file for sub in $(cat sub-d.txt) do SUB_DOMAIN=$sub.$DOMAIN_NAME check_domain done
بیایید آن را در وب سایت وبلاگ من آزمایش کنیم:
root@kali:/opt# ./dns-brute.sh Enter the domain name that you want to brute-force: ethicalhackingblog.com Found www.ethicalhackingblog.com Found ftp.ethicalhackingblog.com
DNS Zone Transfer
کپی کردن رکوردهای سرور اصلی DNS به یک سرور برده DNS دیگر، به نام انتقال DNS شناخته میشود. ما میتوانیم از این فرآیند برای دریافت لیست تمام زیر دامنهها استفاده کنیم، با درخواست از سرور اصلی DNS (که به آن سرور NS گفته میشود، مانند ns1.ethicalhackingblog.com) برای ارائه لیست نام دامنه هدف. این درخواست به ندرت کار میکند، اما اگر موفقیتآمیز باشد، یک هدیه به شما داده میشود که شامل تمام زیر دامنهها و آدرسهای IP مرتبط با آنها است.
اول، بیایید لیست سرورهای ns را برای یک نام دامنه تصادفی دریافت کنیم:
$host -t ns [domain name] | cut -d " " -f 4 root@kali:/opt# host -t ns google.com | cut -d " " -f 4 ns4.google.com. ns3.google.com. ns1.google.com. ns2.google.com.
حالا که لیست سرورهای DNS را میدانیم، میتوانیم از سرور درخواست رکوردهای DNS کنیم. بیایید سعی کنیم از سرور ns1 درخواست کنیم با استفاده از دستور host
:
$host -l [domain name] [ns server domain name] root@kali:/opt# host -l google.com ns1.google.com Using domain server: Name: ns1.google.com Address: 216.239.32.10#53 Aliases: ; Transfer failed.
در این مثال، تلاش برای انتقال اطلاعات DNS از سرور ns1 گوگل ناموفق بود (خطای “Transfer failed”). این اتفاق معمولاً به دلیل محدودیتهای امنیتی یا پیکربندی سرور رخ میدهد.
حالا که با نحوه کار اسکریپتنویسی در Bash آشنا شدید، میتوانید اسکریپتهای خود را ایجاد کنید که لیست سرورهای ns را استخراج کرده و سپس به هرکدام سر بزنید، و سپس میتوانید از تکنیک انتقال ناحیه DNS که قبلاً توضیح داده شد، برای درخواست لیست رکوردهای DNS استفاده کنید. حالا شما به قدرت و کاربرد اسکریپتنویسی در Bash پی بردید.
ابزارهای جستجوی زیر دامنه DNS
ابزارهای زیادی برای اسکن زیر دامنهها وجود دارند. نکته مهم این است که درک کنید این ابزارها چه کاری انجام میدهند، بنابراین باید مطمئن شوید که ابزاری که انتخاب میکنید موارد زیر را انجام میدهد:
- بروتفورس سریع زیر دامنهها بر اساس یک فایل دیکشنری با کیفیت خوب.
- بررسی انتقال DNS.
- اتوماتیکسازی جستجوی زیر دامنه در موتورهای جستجوی اینترنتی مانند گوگل.
Fierce
Fierce یک ابزار عالی برای جستجوی زیر دامنهها است. این ابزار چندین تست DNS انجام میدهد، از جمله انتقال ناحیه و بروتفورسینگ. سریع است و یک فایل دیکشنری خوب دارد:
$fierce -dns [domain name] root@kali:/opt# fierce -dns ethicalhackingblog.com DNS Servers for ethicalhackingblog.com: ns66.domaincontrol.com ns65.domaincontrol.com Trying zone transfer first... Testing ns66.domaincontrol.com Request timed out or transfer not allowed. Testing ns65.domaincontrol.com Request timed out or transfer not allowed. Unsuccessful in zone transfer (it was worth a shot) Okay, trying the good old fashioned way... brute force Checking for wildcard DNS... Nope. Good. Now performing 2280 test(s)... 45.40.155.145 ftp.ethicalhackingblog.com 45.40.155.145 www.ethicalhackingblog.com Subnets found (may want to probe here using nmap or unicornscan): 45.40.155.0-255 : 2 hostnames found. Done with Fierce scan: http://ha.ckers.org/fierce/ Found 2 entries. Have a nice day.
به هیچ وجه تنها به یک ابزار برای انجام کار اعتماد نکنید؛ هر ابزار مزایا و معایب خود را دارد. ابزارهای DNS دیگری نیز وجود دارند که باید در جستجوی زیر دامنهها مد نظر قرار گیرند:
#sublist3r موجود در گیتهاب
$python sublist3r.py [domain name]
#subbrute موجود در گیتهاب
$python subbrute.py [domain name]
خلاصه
شما اولین قدم از پلههای تست نفوذ را یاد گرفتید. امیدواریم که از این فصل لذت برده و چیز جدیدی یاد گرفته باشید. در فصلهای آینده، از اطلاعات بدست آمده از اسکنهای شبکه برای بهرهبرداری از میزبانهای هدف استفاده خواهیم کرد. تفریح تازه شروع شده، دوستان!