در ادامه آموزش nmap در این پست یک نوع خروجی اسکن nmap بررسی می‌شود و جزئیات خروجی را توضیح می‌دهیم. در انتها مختصری در مورد NSE در nmap توضیح داده می‌شود و در آموز‌ش‌های بعدی روش استفاده از تابع‌های nmap گفته می‌شود.

تحلیل خروجی nmap:

برای شروع از دستور زیر استفاده می‌کنیم:

nmap -A scanme.nmap.org

خروجی دستور بالا به شکل زیر است:

Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-26 12:56 +0330
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.29s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f
Not shown: 996 closed ports
PORT      STATE SERVICE    VERSION
۲۲/tcp    open  ssh        OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   ۱۰۲۴ ac:00:a0:1a:82:ff:cc:55:99:dc:67:2b:34:97:6b:75 (DSA)
|   ۲۰۴۸ ۲۰:۳d:2d:44:62:2a:b0:5a:9d:b5:b3:05:14:c2:a6:b2 (RSA)
|   ۲۵۶ ۹۶:۰۲:bb:5e:57:54:1c:4e:45:2f:56:4c:4a:24:b2:57 (ECDSA)
|_  ۲۵۶ ۳۳:fa:91:0f:e0:e1:7b:1f:6d:05:a2:b0:f1:54:41:56 (ED25519)
۸۰/tcp    open  http       Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: Go ahead and ScanMe!
۹۹۲۹/tcp  open  nping-echo Nping echo
۳۱۳۳۷/tcp open  tcpwrapped
Service Info: OS: Linux; 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 53.16 seconds
۲۲/tcp    open  ssh        OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)

از پست قبل به یاد دارید که A- برای تشخیص سیستم عامل، تشخیص نسخه سیستم عامل، اسکن اسکریپت و traceroute است. همانطور که در پاسخ مشاهده می‌کنید سیستم‌ عاملی که به پورت ۲۲ پاسخ می‌دهد از نوع Ubuntu و ورژن این نسخه ۲ubuntu2.13 است. در ادامه چهار نوع کلید رمزنگاری SSH در این پورت استفاده می‌شود که شامل  DSA, RSA, ECDSA, ED25519 است.

 کلید هاست رمزنگاری شده برای احرازهویت کامپیوترها از پرتکل SSH استفاده می‌شود. کلیدهای هاست معمولاً جفت هستند به این معنی که کلیدهای عمومی در کلاینت‌ها ذخیره و کلیدهای خصوصی در هاست ذخیره می‌شوند.

۸۰/tcp    open  http       Apache httpd 2.4.7 ((Ubuntu))

در پورت ۸۰ از Apache httpd نسخه ۲.۴.۷ استفاده می‌شود. عنوان سایت اسکن شده Go ahead and ScanMe است.

۹۹۲۹/tcp  open  nping-echo Nping echo

برای توضیح این بخش اول از همه باید Nping را توضیح دهیم. Nping ابزاری متن باز برای تولید پکت‌های شبکه، تحلیل پاسخ و تحلیل زمان پاسخ‌دهی است. Nping برای بازه وسیعی از انواع پرتکل‌های شبکه می‌تواند پکت تولید کند و کنترل کامل protocol headers را به کاربر بدهد. از Nping به عنوان یک ابزار ping ساده، تولید پکت برای تست تنش پشته شبکه، ARP poisoning، DoS، ردیابی روتر و کارهای دیگر استفاده می‌شود.

 حالت echo به کاربر اجازه دیدن تغییرات پکت‌ها بین مبدأ و مقصد را به کاربر می‌دهد. این روش، راهی درست برای فهمیدن رفتار قوانین فایروال، پکت‌های از بین رفته و کارهای دیگر است. مد Echo در Nping به دو دسته تقسیم ‌می‌شود; Echo server و Echo client. سرویس شبکه Echo server توانایی ضبط پکت‌ها از شبکه، کپی و ارسال پکت(echo them) به سمت کلاینت از طریق کانال TCP است. Echo client بخشی از پکت‌های شبکه را تولید می‌کند. این پکت‌ها به سمت سروراز طریق کانال TCP فرستاده می‌شوند و سرور نسخه Echo پکت‌ها را دریافت می‌کند. این پکت‌ها در مرحله قبلی توسطEcho server تولید شده بودند.

این طرح به کلاینت امکان دیدن اختلاف پکت‌هایی که می‌فرستد و پکت‌هایی که سرور دریافت می‌کند، مشاهده کند. زمانی که سرور کپی پکت‌های دریافتی را دوباره به سمت کلاینت می‌فرستد، کلاینت متوجه تجهیزات NAT که در شبکه ظاهر می‌شوند وIP address منبع(و شاید پورت منبع را تغییر دهند) را تغییر می‌دهند، می‌شود.

۳۱۳۳۷/tcp open  tcpwrapped

tcpwrapped برنامه کنترل دسترسی host-based است. این برنامه روی لینوکس ویونیکس اجرا می‌شود. زمانی که پورتی توسط nmap با tcpwrapped نشان داده شود به معنی رفتار پورت توسط tcpwrapped محافظت شده است. به شکل ویژه، full TCP handshake کامل شده است ولی هاست راه دور کانکشن را بدون دریافت هرگونه داده‌ای قطع کرده است.

نکته جالب در این مورد، tcpwrapped از پورت محافظت نمی‌کند بلکه از نرم‌افزار روی پورت محافظت می‌کند. به این معنی است که که پاسخ tcpwrapped سرویس واقعی شبکه فعال است اما شما در لیست مجاز برای صحبت با پورت نیستید. هنگامی که تعداد زیادی پورت در حالت tcpwrapped نشان داده می‌شود، احتمالاً سرویس‌های واقعی را نشان نمی‌دهند و به این معنی است که دلیل دیگری مانندload balancer و firewall جلوی درخواست‌ها را می‌گیرد.

معرفی NSE:

Nmap Scripting Engine (NSE) اسکریپت‌های nmap است. با استفاده از ویژگی‌های اسکریپت‌ کاربر می‌تواند از ویژگی‌ موازی nmap استفاده و با استفاده از اسکریپت کاربر می‌توانند تابع دلخواه اسکن شبکه را تولید کند. توابع اسکریپت Nmap برای آسیب‌پذیری‌های رایج کد اسکریپت دارد. برای مثال:

nmap -p 443 --script ssl-heartbleed <target>

کد بالا آسیب‌پذیری heartbleed در هدف مورد نظر را بررسی می‌کند. خروجی کد بالا به شکل زیر است:

PORT    STATE SERVICE
۴۴۳/tcp open  https
| ssl-heartbleed:
|   VULNERABLE:
|   The Heartbleed Bug is a serious vulnerability in the popular OpenSSL crypto-graphic software library. It allows for stealing information intended to be pro-tected by SSL/TLS encryption.
|     State: VULNERABLE
|     Risk factor: High
|     Description:
|       OpenSSL versions 1.0.1 and 1.0.2-beta releases (including 1.0.1f and 1.0.2-beta1) of OpenSSL are affected by the Heartbleed bug. The bug allows for reading memory of systems protected by the vulnerable OpenSSL versions and could allow for disclosure of otherwise encrypted confidential information as well as the encryption keys themselves.
|
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
|       https://www.openssl.org/news/secadv_20140407.txt
|_      https://cvedetails.com/cve/2014-0160/

آسیب‌پذیری heartbleed یک آسیب پذیری با درجه خطر بالا است. خروجی کد بالا نشان می‌دهد که آدرس هدف در پورت ۴۴۳ از openSSL نسخه‌های ۱.۰.۱ و ۱.۰.۲ آسیب‌پذیر است، استفاده می‌کند. این آسیب‌پذیری منجر به سرقت اطلاعات حساس از سرور می‌شود. حمله کننده با اکسپلویت آسیب‌پذیری می‌تواند اطلاعات حساس را از قسمتی از حافظه که توسط openSSL آسیب پذیری محافظ می‌شود، بخواند و به اطلاعات حساس دسترسی پیدا کند.

برای اینکه تمام توابع اسکریپت در nmap را ببیند می‌توانید از کد زیر در ترمینال kali دستور زیر را وارد کنید:

ls /usr/share/nmap/scripts/

تعداد اسکریپت‌های nmap زیاد است. پس برای اینکه تعداد محدود و مورد نظر کاربر را نشان دهد می‌توان از دستور grep استفاده کرد. برای مثال کد زیر توابع مربوط به SSH را نشان می‌دهد:

ls /usr/share/nmap/scripts/ |grep ssh

خروجی کد بالا به شکل زیر است:

ssh2-enum-algos.nse
ssh-auth-methods.nse
ssh-brute.nse
ssh-hostkey.nse
ssh-publickey-acceptance.nse
ssh-run.nse
sshv1.nse

می‌توانید دستورات توابع nmap را با توجه به نوع اسکن مورد نظر تغییر داد و آن‌ها را شخصی سازی کرد. اسکریپت نویسی این توابع با زبان برنامه نویسی lua است. با دستور زیر می‌توان کدهای NSE را تغییر داد:

nano /usr/share/nmap/scripts/<file.nse>