
در بخش اول آموزش جامع فاز شناسایی پیشرفته (Advanced Enumeration Phase) در کالی لینوکس به بررسی و شناسایی سرویس های FTP و SSH و Telnet پرداخته شد. در بخش دوم آموزش شناسایی پیشرفته در کالی لینوکس به بررسی و شناسایی سرویس های SMTP و POP3 و IMAP4 و Microsoft SQL و Oracle Database Server و MySQL و Docker Engine و Jenkins پرداخته شد.
Web Protocols 80/447
این روزها برنامههای وب همهچیز هستند؛ به همین دلیل یک فصل اختصاصی به شناسایی و بهرهبرداری از برنامههای وب اختصاص داده شده است. در بخش قبلی، شما یاد گرفتید که چگونه از Burp Suite برای رهگیری درخواستهای وب و brute-force کردن یک برنامه وب با استفاده از Hydra استفاده کنید. در حال حاضر، باید متوجه شوید که بیشتر سرورهای وب از دو پورت برای سرویسدهی به برنامه وب استفاده میکنند (بهطور پیشفرض):
- پورت HTTP TCP 80: این پورت درخواستها و پاسخهای وب را به صورت متن ساده (cleartext) سرویسدهی میکند. اگر شبکه یک وبسایت که روی پورت 80 سرویسدهی میکند را شبیهسازی کنید، قادر خواهید بود اطلاعات ورود (credentials) را به صورت متن ساده مشاهده کنید.
- پورت HTTPS/TLS TCP 443: پروتکل امن HTTP به نام HTTPS یا TLS شناخته میشود. در این پروتکل، ارتباط امن است و یک sniffگر قادر به مشاهده ترافیک نخواهد بود مگر اینکه یک پروکسی وجود داشته باشد که ترافیک را رهگیری کند. شرکتهای بزرگ از پروکسیها استفاده میکنند و گواهینامهها را به سیستمهای کاربران خود تزریق میکنند تا بتوانند ترافیک HTTPS کارکنان خود را نظارت کنند.
توجه: پورتالهای وب مانند Jenkins، به عنوان مثال، از پورت پیشفرض 80 استفاده نمیکنند تا از تداخل با برنامه وب پیشفرضی که روی همان سرور وب میزبانی میشود، جلوگیری کنند.
پروتکلهای دسترسی گرافیکی از راه دور
اتصال به رابط کاربری گرافیکی از راه دور در سیستمهای ویندوز و لینوکس این روزها به راحتی امکانپذیر است. در این بخش، شما یاد خواهید گرفت که چگونه یک سرویس پروتکل دسترسی از راه دور را شناسایی کرده و آن را مانند حرفهایها آزمایش کنید. اینها رایجترین برنامههایی هستند که برای این منظور استفاده میشوند:
■ پروتکل دسکتاپ از راه دور (RDP): پورت TCP 3389
■ محاسبات شبکه مجازی (VNC): پورت TCP 5900
RDP (Port 3389)
پروتکل دسکتاپ از راه دور یک برنامه رایج است که برای اتصال از راه دور به سیستمعاملهای ویندوز استفاده میشود. اگر بر روی میزبان از راه دور فعال باشد، کاربران میتوانند به رابط گرافیکی کاربر میزبان ویندوز متصل شوند. توجه داشته باشید که سرور RDP بر روی پورت 3389 گوش میدهد تا این کار را انجام دهد. بیایید سریعاً یک میزبان که در حال اجرای سرور RDP است را اسکن کنیم:
root@kali:~# nmap -sV -sC -O -T5 -p 3389 172.16.0.104 Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-16 10:04 EDT Nmap scan report for 172.16.0.104 Host is up (0.00056s latency). PORT STATE SERVICE VERSION 3389/tcp open ms-wbt-server Microsoft Terminal Services | rdp-ntlm-info: | Target_Name: KCORP | NetBIOS_Domain_Name: KCORP | NetBIOS_Computer_Name: WINDOWS10LAB | DNS_Domain_Name: KCorp.local | DNS_Computer_Name: Windows10Lab.KCorp.local | DNS_Tree_Name: KCorp.local | Product_Version: 10.0.17763 |_ System_Time: 2020-06-16T14:04:26+00:00 | ssl-cert: Subject: commonName=Windows10Lab.KCorp.local [...]
RDP Brute-Force
پروتکل RDP یک پروتکل نسبتاً کند است و Hydra در پروتکل RDP عملکرد بهینهای ندارد. از طرف دیگر، Crowbar ثابت کرده که کمی بهتر از Hydra در Brute-Force سرویس RDP عمل میکند. بیایید یک مثال عملی از همان سروری که قبلاً با استفاده از Hydra آن را شناسایی کردیم، با استفاده از Crowbar مشاهده کنیم (ابتدا باید آن را با دستور apt install crowbar -y
نصب کنید):
root@kali:/# crowbar -b rdp -s 172.16.0.104/32 -u admin -C /root/pass.txt 2020-06-16 14:08:26 START 2020-06-16 14:08:26 Crowbar v0.4.1 2020-06-16 14:08:26 Trying 172.16.0.104:3389 2020-06-16 14:08:26 RDP-SUCCESS : 172.16.0.104:3389 - admin:Password123! 2020-06-16 14:08:26 STOP
VNC (Port 5900)
Virtual Network Computing (VNC) یک سرویس محبوب دیگر است که برای اهداف ریموتینگ استفاده میشود. VNC به طور معمول بر روی میزبانهای لینوکسی با رابط گرافیکی کار میکند (مانند GNOME) و به طور پیشفرض از پورت TCP 5900 استفاده میکند. میزبان Metasploitable که در این فصل استفاده میکنیم، دارای سرویسی است که بر روی پورت 5900 در حال گوش دادن است. بیایید ببینیم که Nmap چه اطلاعاتی را در مورد این سرور به ما نشان میدهد:
nmap -sV -T5 -p 5900 --script=vnc* 172.16.0.101 Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-16 15:14 EDT Nmap scan report for 172.16.0.101 Host is up (0.00025s latency). PORT STATE SERVICE VERSION 5900/tcp open vnc VNC (protocol 3.3) | vnc-brute: | Accounts: No valid accounts found | Statistics: Performed 15 guesses in 1 seconds, average tps: 15.0 |_ ERROR: Too many authentication failures | vnc-info: | Protocol version: 3.3 | Security types: |_ VNC Authentication (2) [...]
Nmap اطلاعات زیادی به ما نشان نمیدهد؛ ما تنها قادر به شناسایی نسخه VNC بودیم. برای Brute-Force VNC، از Metasploit استفاده خواهیم کرد. (در گذشته، نتایج موفقتری با ماژول Msf به جای Hydra به دست آوردهام.) توجه داشته باشید که برای نفوذ کردن حساب VNC به نام کاربری نیاز ندارید. تنها چیزی که به آن نیاز دارید، رمز عبور است:
msf5 > use auxiliary/scanner/vnc/vnc_login msf5 auxiliary(scanner/vnc/vnc_login) > set RHOSTS 172.16.0.101 RHOSTS => 172.16.0.101 msf5 auxiliary(scanner/vnc/vnc_login) > set VERBOSE false VERBOSE => false msf5 auxiliary(scanner/vnc/vnc_login) > set STOP_ON_SUCCESS true STOP_ON_SUCCESS => true msf5 auxiliary(scanner/vnc/vnc_login) > run [*] 172.16.0.101:5900 - 172.16.0.101:5900 - Starting VNC login sweep [+] 172.16.0.101:5900 - 172.16.0.101:5900 - Login Successful: :password [*] 172.16.0.101:5900 - Scanned 1 of 1 hosts (100% complete) [...]
پروتکلهای اشتراک فایل – File Sharing Protocols
پروتکلهای Server Message Block (SMB) و NetBIOS قلب اشتراک فایل در سیستمعاملهای Microsoft Windows هستند. پروتکل Samba از SMB مشتق شده است و شما اغلب این دو اصطلاح را بهطور متناوب خواهید شنید. Samba نه تنها در سیستمعاملهای ویندوز استفاده میشود، بلکه در سیستمعاملهای لینوکس برای اشتراک فایلها و خدمات چاپ نیز بهطور گستردهای مورد استفاده قرار میگیرد.
SMB (Port 445)
پروتکل SMB بر روی پورت TCP 445 کار میکند و به محض فعال شدن، مشاهده خواهید کرد که پورت TCP 139 مربوط به NetBIOS نیز باز است. فرآیند شناسایی پروتکل SMB باید به دنبال موارد زیر باشد:
- نامهای اشتراک
- فهرست کاربران
- فهرست گروهها
- نام دامنه
- Brute-Force حسابها
- فهرست نسخههای آسیبپذیر SMB
یک اسکن سریع با Nmap باید اطلاعات پایهای در مورد میزبان هدف به شما بدهد:
root@kali:~# nmap -sV -T5 -p 445 -sC 172.16.0.106 Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-18 09:36 EDT Nmap scan report for 172.16.0.106 Host is up (0.00072s latency). PORT STATE SERVICE VERSION 445/tcp open microsoft-ds Windows 10 Pro 10240 microsoft-ds (workgroup: KCORP) MAC Address: 00:0C:29:87:09:90 (VMware) Service Info: Host: WINDOWS10LAB02; OS: Windows; CPE: cpe:/ o:microsoft:windows Host script results: |_clock-skew: mean: 2h19m59s, deviation: 4h02m29s, median: 0s |_nbstat: NetBIOS name: WINDOWS10LAB02, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:87:09:90 (VMware) | smb-os-discovery: | OS: Windows 10 Pro 10240 (Windows 10 Pro 6.3) | OS CPE: cpe:/o:microsoft:windows_10::- | Computer name: Windows10Lab02 | NetBIOS computer name: WINDOWS10LAB02\x00 | Domain name: KCorp.local | Forest name: KCorp.local | FQDN: Windows10Lab02.KCorp.local |_ System time: 2020-06-18T06:36:19-07:00 | smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: disabled (dangerous, but default) | smb2-security-mode: | 2.02: |_ Message signing enabled but not required | smb2-time: | date: 2020-06-18T13:36:19 |_ start_date: 2020-06-18T13:32:18
در مرحله بعد، میتوانیم یک اسکن آسیبپذیری با استفاده از اسکریپتهای Nmap اجرا کنیم تا ببینیم آیا میتوانیم اطلاعات بیشتری به دست آوریم (من از smb*
استفاده نکردم، زیرا این اسکریپتها وقتگیر و پرخطر هستند):
root@kali:~# nmap -sV -p 445 --script=smb-vuln* 172.16.0.106 Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-18 10:27 EDT Nmap scan report for 172.16.0.106 Host is up (0.00025s latency). PORT STATE SERVICE VERSION 445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: KCORP) MAC Address: 00:0C:29:87:09:90 (VMware) Service Info: Host: WINDOWS10LAB02; 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://technet.microsoft.com/en-us/library/security/ms17-010. aspx | https://blogs.technet.microsoft.com/msrc/2017/05/12/customerguidance-for-wannacrypt-attacks/ |_ 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 11.49 seconds
ما در مقالات بعد آزمایش خواهیم کرد که آیا میزبان از راه دور در برابر آسیبپذیری ms17-010 آسیبپذیر است یا نه. در حال حاضر، ما فقط در حال جمعآوری اطلاعات هستیم. (ممکن است این نتایج مثبت کاذب باشند؛ بنابراین نباید روی دقت نتایج این مرحله حساب کنید.) توجه داشته باشید که میتوانید از گزینه اسکریپت smb-enum
برای افزودن نتایج بیشتر به فاز شمارش استفاده کنید:
root@kali:~# nmap -sV -p 445 --script=smb-enum 172.16.0.106
اگر میخواهید ابزارهای بیشتری برای این منظور امتحان کنید، پیشنهاد میکنم ابزار شمارش SMB به نام Enum4Linux را نیز تست کنید:
$ enum4linux -a [IP address]
Brute-Forcing SMB
ما میتوانیم به جای استفاده از Hydra، از ماژول کمکی smb_login
در Metasploit برای پروتکل SMB استفاده کنیم، زیرا این ماژول نتایج مثبت کاذب کمتری ارائه میدهد و عملکرد بهتری دارد. برای به دست آوردن نتیجه مطلوب، میتوانید گزینههای اسکنر خود را تنظیم کنید تا از مصرف بیهوده منابع جلوگیری کنید. (نام گزینهها خود توضحی هستند.)
msf5 > use auxiliary/scanner/smb/smb_login msf5 auxiliary(scanner/smb/smb_login) > set BLANK_PASSWORDS true BLANK_PASSWORDS => true msf5 auxiliary(scanner/smb/smb_login) > set PASS_FILE /usr/share/wordlists/rockyou.txt PASS_FILE => /usr/share/wordlists/rockyou.txt msf5 auxiliary(scanner/smb/smb_login) > set RHOSTS 172.16.0.106 RHOSTS => 172.16.0.106 msf5 auxiliary(scanner/smb/smb_login) > set SMBUser admin SMBUser => admin msf5 auxiliary(scanner/smb/smb_login) > set STOP_ON_SUCCESS true STOP_ON_SUCCESS => true msf5 auxiliary(scanner/smb/smb_login) > set THREADS 100 THREADS => 100 msf5 auxiliary(scanner/smb/smb_login) > set USER_AS_PASS true USER_AS_PASS => true msf5 auxiliary(scanner/smb/smb_login) > set VERBOSE false VERBOSE => false msf5 auxiliary(scanner/smb/smb_login) > run [+] 172.16.0.106:445 - 172.16.0.106:445 - Success: '.\admin:admin' [*] 172.16.0.106:445 - Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed msf5 auxiliary(scanner/smb/smb_login) >
SNMP (Port UDP 161)
پروتکل مدیریت ساده شبکه (SNMP) یک پایگاه داده است که اطلاعات دستگاهها/میزبانهای شبکه را برای اهداف مدیریت شبکه ذخیره میکند. پایگاه داده اطلاعات SNMP تحت عنوان پایگاه اطلاعات مدیریت (MIB) شناخته میشود و دادهها را به صورت درختی سازماندهی میکند. این سرور از پورت UDP 161 برای افشای این اطلاعات استفاده میکند. نسخههای قبلی SNMP مانند نسخه 1، 2 و 2c از رمزگذاری در ترافیک استفاده نمیکنند، بنابراین با استفاده از یک ابزار sniffing میتوانیم اعتبارنامهها را در متن واضح (cleartext) مشاهده کنیم. سرور SNMP از یک رشته جامعه (community string) برای ایمنسازی دادهها در داخل سرور استفاده میکند. شما میتوانید از سه رشته جامعه زیر برای اتصال به سرور SNMP استفاده کنید:
■ Public
■ Private
■ Manager
SNMP Enumeration
اگر توانستید سرور SNMP را شناسایی کنید، میتوانید اطلاعات زیادی در مورد میزبان هدف به دست آورید:
- رابطهای شبکه
- پورتهای در حال گوش دادن
- فرآیندهای سیستم
- اطلاعات سختافزاری میزبان
- نرمافزارهای نصب شده
- کاربران محلی
- پوشههای به اشتراک گذاشته شده
این اطلاعات میتواند برای برنامهریزی حملات بعدی یا جمعآوری دادههای مفید برای تحلیل آسیبپذیریهای سیستم هدف استفاده شود. Nmap ابزار مورد علاقه من برای فرآیند شناسایی است. بنابراین، برای پروتکل SNMP، دوباره از Nmap استفاده خواهم کرد تا کار را انجام دهم. توجه داشته باشید که من از گزینه -sU
استفاده میکنم زیرا هدف من یک پورت UDP است (نتایج زیاد خواهد بود، بنابراین برخی از نتایج را کوتاه میکنم):
root@kali:~# nmap -sU -p 161 -sV -sC -T5 172.16.0.100 Starting Nmap 7.80 ( https://nmap.org ) at 2021-01-05 12:39 EST Nmap scan report for 172.16.0.100 Host is up (0.00038s latency). PORT STATE SERVICE VERSION 161/udp open snmp SNMPv1 server (public) | snmp-interfaces: | Software Loopback Interface 1\x00 | IP address: 127.0.0.1 Netmask: 255.0.0.0 | Type: softwareLoopback Speed: 1 Gbps | Traffic stats: 0.00 Kb sent, 0.00 Kb received | WAN Miniport (SSTP)\x00 | Type: tunnel Speed: 1 Gbps | Traffic stats: 0.00 Kb sent, 0.00 Kb received [...] | snmp-netstat: | TCP 0.0.0.0:135 0.0.0.0:0 | TCP 0.0.0.0:3389 0.0.0.0:0 | TCP 0.0.0.0:49152 0.0.0.0:0 [...] | snmp-processes: | 1: | Name: System Idle Process | 4: | Name: System | 264: | Name: smss.exe | Path: \SystemRoot\System32\ | 356: | Name: csrss.exe | Path: %SystemRoot%\system32\ | Params: ObjectDirectory=\Windows SharedSection=1024,20480,768 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:User [...]
Nmap کار فوقالعادهای در نشان دادن تمام اطلاعات انجام داد. در واقع، خروجی آن آنقدر وسیع است که چندین صفحه طول خواهد کشید، بنابراین بیشتر آنها را برای وضوح حذف کردم. مهمترین بخش در خروجی Nmap، نسخه سرور SNMP (V1) و همچنین رشته جامعهای که استفاده شده (public) است. این اطلاعات به شما کمک میکند که بدانید از کدام نسخه SNMP استفاده میشود و اینکه سرور با استفاده از رشته جامعهای به نام “public” برای دسترسی به دادهها محافظت شده است. رشته جامعهای “public” معمولاً در SNMP نسخههای 1 و 2c به عنوان رشته پیشفرض برای دسترسی به اطلاعات عمومی استفاده میشود و این میتواند برای حملههای نفوذی بسیار مفید باشد.
خلاصه
امیدوارم از این فصل مربوط به شناسایی خدمات لذت برده باشید. در این مرحله از تست نفوذ، ما تمام اطلاعات مربوط به انواع مختلف خدمات را جمعآوری میکنیم. تمام دادههای شناسایی شده برای بهرهبرداری از هر یک از این خدمات به صورت جداگانه استفاده خواهند شد. در فصل بعد، شما خواهید آموخت که چگونه این خدمات را از طریق یک شل راه دور (و بسیاری از موارد دیگر) بهرهبرداری کنید.