Nmap是什么? (What is Nmap?)
你好,未來的網(wǎng)絡安全探索者! 歡迎來到 Nmap 的世界。
想象一下,你是一名城市規(guī)劃師,在規(guī)劃一座新城市之前,你需要了解這片土地的每一寸細節(jié):哪里有河流,哪里有山丘,哪里已經(jīng)有了建筑。Nmap (NetworkMapper) 就是你在數(shù)字世界中的“勘探工具”,它可以幫助你發(fā)現(xiàn)網(wǎng)絡上的設備,以及這些設備上開放了哪些“大門”(也就是端口)。
Nmap 的主要用途包括:
? 主機發(fā)現(xiàn) (Host Discovery): 找出網(wǎng)絡上有哪些活躍的設備,比如電腦、服務器、路由器、甚至智能冰箱!
? 端口掃描 (Port Scanning): 識別目標設備上哪些網(wǎng)絡端口是開放的。端口就像是設備上的不同服務窗口,比如 80 端口通常是網(wǎng)頁服務,22 端口通常是遠程登錄服務。
? 服務與版本探測 (Service and Version Detection): 找出在開放端口上運行的具體網(wǎng)絡服務是什么,以及它們的軟件版本。這很重要,因為某些特定版本的軟件可能存在已知的安全漏洞。
? 操作系統(tǒng)探測 (Operating System Detection): 嘗試識別目標設備的操作系統(tǒng)類型和版本。
? 漏洞掃描 (Vulnerability Scanning): 通過 Nmap 腳本引擎 (NSE),Nmap 還可以執(zhí)行一些基本的漏洞掃描,幫助發(fā)現(xiàn)潛在的安全風險。
為什么學習 Nmap?它為什么這么重要?
Nmap 是網(wǎng)絡安全領域中最基礎、最強大的工具之一。無論你是想成為一名滲透測試工程師 (Penetration Tester)、安全分析師 (Security Analyst),還是僅僅想更好地了解你自己的網(wǎng)絡環(huán)境,Nmap 都是必備技能。
? 對于防御者 (Blue Team): Nmap 可以幫助你了解自己網(wǎng)絡的暴露面,及時發(fā)現(xiàn)未經(jīng)授權的設備或開放了不必要端口的服務,從而加固防線。
? 對于攻擊者/測試者 (Red Team/Penetration Testers): Nmap 是信息收集階段的核心工具,幫助他們繪制目標網(wǎng)絡的拓撲結(jié)構(gòu),找到潛在的攻擊入口。
Nmap 的合法和道德使用準則
這是一個非常非常重要的話題!Nmap 本身是一個中立的工具,就像一把錘子,你可以用它來蓋房子,也可以用它來搞破壞。 我們必須強調(diào):未經(jīng)授權掃描他人網(wǎng)絡是非法且不道德的!
請牢記:始終在獲得明確授權的情況下使用 Nmap。 我們學習 Nmap 是為了更好地保護網(wǎng)絡,而不是去侵犯他人。
小成就解鎖: 你已經(jīng)了解了 Nmap 的基本概念和重要性!這是成為網(wǎng)絡安全高手的第一步!
安裝與初識 Nmap (Installation and First Look)
現(xiàn)在我們已經(jīng)知道了 Nmap 是什么以及它的重要性,是時候親自動手,把這個強大的工具安裝到我們的電腦上了!別擔心,安裝過程通常很簡單。
Nmap 支持多種操作系統(tǒng)。下面我們分別介紹在 Windows、Linux 和 macOS上的安裝方法。你可以根據(jù)自己的操作系統(tǒng)選擇相應的指南。
操作系統(tǒng)安裝指南
| 操作系統(tǒng) | 安裝方法 |
| Windows | 訪問 Nmap 官方網(wǎng)站的下載頁面 (https://nmap.org/download.html)。找到最新的穩(wěn)定版 Windows 安裝程序 (通常是一個.exe文件,例如nmap-x.yy-setup.exe)。下載并運行該程序,按照安裝向?qū)У奶崾就瓿砂惭b。安裝過程中,請確保勾選了 “Nmap core files” 和 “Command-line Nmap executable”。 |
| Linux |
大多數(shù) Linux 發(fā)行版都可以通過包管理器輕松安裝 Nmap。 -Debian/Ubuntu (及衍生版):打開終端,輸入命令sudo apt update && sudo apt install nmap -Fedora/CentOS/RHEL (及衍生版):打開終端,輸入命令sudo dnf install nmap(較新版本) 或sudo yum install nmap(較老版本) |
| macOS |
方法一 (推薦): 使用 Homebrew 。如果你安裝了 Homebrew (macOS 的一個流行包管理器),打開終端,輸入命令brew install nmap。 方法二: 官方安裝包。訪問 Nmap 官方網(wǎng)站的下載頁面,下載適用于 macOS 的.dmg安裝包。雙擊打開.dmg文件,然后運行其中的安裝程序。 |
小提示 :安裝完成后,可以打開你的命令行終端 (Windows 上是cmd或PowerShell,Linux 和 macOS 上是Terminal),輸入nmap -V(注意 V 是大寫) 并按回車。如果安裝成功,你會看到 Nmap 的版本信息。
Nmap 的基本命令行界面
Nmap 主要通過命令行來操作。這意味著你需要打開終端,然后輸入nmap命令,后面跟著一些參數(shù)和目標地址。
基本的命令格式看起來像這樣:
nmap [掃描類型...] [選項...] {目標規(guī)范}
別被這個嚇到!我們后面會一步步學習各種掃描類型和選項的含義。
第一次掃描:nmap scanme.nmap.org示例與結(jié)果解讀
激動人心的時刻到了!讓我們進行第一次 Nmap 掃描。Nmap 的開發(fā)者提供了一個專門用于測試掃描的網(wǎng)站:scanme.nmap.org。掃描這個網(wǎng)站是完全合法的。
打開你的終端,輸入以下命令并按回車:
`nmap scanme.nmap.org`
請注意:第一次運行掃描可能需要一點時間,因為它需要下載一些必要的數(shù)據(jù)文件。請耐心等待。
掃描完成后,你會看到類似下面的輸出 (具體結(jié)果可能會因 Nmap 版本和網(wǎng)絡狀況略有不同):
Starting Nmap X.YY ( https://nmap.org ) at YYYY-MM-DD HH:MM ZZZ Nmap scan report for scanme.nmap.org (45.33.32.156) Host is up (0.12s latency). Not shown: 995 closed tcp ports (conn-refused) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 9929/tcp open nping-echo 31337/tcp open Elite Nmap done: 1 IP address (1 host up) scanned in X.XX seconds plaintext
讓我們來解讀一下這些信息:
?Starting Nmap X.YY ...: 顯示你正在使用的 Nmap 版本和啟動時間。
?Nmap scan report for scanme.nmap.org (45.33.32.156): 表明這是針對scanme.nmap.org(其 IP 地址是45.33.32.156) 的掃描報告。
?Host is up (0.12s latency).: 表示目標主機是活躍的 (在線),并且網(wǎng)絡延遲大約是 0.12 秒。
?Not shown: 995 closed tcp ports (conn-refused): Nmap 默認會掃描最常見的 1000 個 TCP 端口。這里告訴我們,有 995 個被掃描的 TCP 端口是關閉的 (狀態(tài)是conn-refused,意味著連接被拒絕)。
?核心部分來了!下面列出的是開放的端口及其服務:
?22/tcp open ssh: 端口 22 是開放的 (open),運行的是ssh(Secure Shell) 服務。
?80/tcp open http: 端口 80 是開放的,運行的是http(Hypertext Transfer Protocol) 服務,也就是我們常說的 Web 服務。
?9929/tcp open nping-echo: 端口 9929 是開放的,運行的是nping-echo服務 (Nmap 項目的一個工具)。
?31337/tcp open Elite: 端口 31337 是開放的,被標記為Elite(這是一個歷史悠久的黑客文化端口)。
?Nmap done: 1 IP address (1 host up) scanned in X.XX seconds: 掃描完成,總共掃描了 1 個 IP 地址,發(fā)現(xiàn) 1 個主機是活躍的,耗時 X.XX 秒。
小成就解鎖:你成功安裝了 Nmap 并完成了你的第一次網(wǎng)絡掃描!是不是很有成就感?
通過這次簡單的掃描,我們就發(fā)現(xiàn)scanme.nmap.org這個服務器對外開放了 SSH、HTTP 等服務。這些信息對于了解一個網(wǎng)絡系統(tǒng)至關重要。
在接下來的章節(jié)中,我們將學習如何更精確地指定掃描目標,以及探索 Nmap 更多強大的掃描功能。
指定掃描目標 (Specifying Targets)
在上一節(jié)中,我們對scanme.nmap.org進行了一次掃描。但在實際應用中,你需要告訴 Nmap 具體要掃描哪些設備。Nmap 提供了多種靈活的方式來指定掃描目標。
想象一下,你是一名偵察兵,你需要精確地知道你的偵察范圍。同樣,在使用 Nmap 時,明確目標至關重要。
以下是一些常用的指定目標的方法:
| 指定方式 | 示例命令 | 說明 |
| 單個 IP 地址 | nmap 192.168.1.1 | 直接指定一個 IPv4 地址進行掃描。這是最直接的方式。 |
| 主機名 | nmap example.com | 你也可以使用主機名。Nmap 會自動解析該主機名對應的 IP 地址進行掃描。 |
| IP 地址范圍 (CIDR) | nmap 192.168.1.0/24 | 使用 CIDR (Classless Inter-Domain Routing) 表示法指定一個網(wǎng)段。例如,/24表示掃描從192.168.1.0到192.168.1.255的所有 256 個 IP 地址。這是掃描整個子網(wǎng)的常用方法。 |
| IP 地址范圍 (八位字節(jié)) | nmap 192.168.1.100-150 | 指定 IP 地址的最后一個八位字節(jié)的范圍。這個例子會掃描從192.168.1.100到192.168.1.150的 IP 地址。 |
| nmap 192.168.1,2,3.1-10 | 你甚至可以指定多個八位字節(jié)的范圍或列表。這個例子會掃描192.168.1.1到192.168.1.10,192.168.2.1到192.168.2.10,以及192.168.3.1到192.168.3.10。 | |
| 從文件中讀取目標 | nmap -iL targets.txt | 使用-iL(Input from List) 參數(shù),Nmap 會從指定的文件 (targets.txt) 中讀取目標列表。文件中的每一行可以是一個 IP 地址、主機名或范圍。這對于掃描大量目標非常方便。 |
| 排除特定目標 | nmap 192.168.1.0/24 --exclude 192.168.1.5 | 使用--exclude參數(shù)可以從掃描范圍中排除一個或多個 IP 地址。 |
| nmap 192.168.1.0/24 --excludefile exclude.txt | 也可以使用--excludefile參數(shù),從一個文件中讀取要排除的目標列表。 |
生活化比喻:
?單個 IP 地址:就像給快遞員一個精確的門牌號碼,例如“幸福路 8 號”。
?主機名:就像告訴出租車司機要去“市中心廣場”,司機會知道具體的地址。
?IP 地址范圍 (CIDR):就像告訴郵遞員派送整個“陽光小區(qū)”的信件。
?從文件中讀取目標:就像你有一張客戶名單,需要挨個拜訪。
?排除特定目標:就像在派對邀請函上注明“除了小明都可以來”。
重要提示:再次強調(diào),務必確保你擁有掃描目標的明確授權!未經(jīng)許可掃描他人網(wǎng)絡是違法的。
思考題 :
1. 如果你想掃描你家路由器(假設 IP 地址是192.168.0.1)和你的筆記本電腦(假設 IP 地址是192.168.0.101),你會使用什么 Nmap 命令?
2. 如果你們公司有一個網(wǎng)段是10.0.0.0/24,但其中10.0.0.50是一臺非常敏感的服務器,不希望被掃描到,你會如何設置 Nmap 命令?
小成就解鎖:你現(xiàn)在知道如何告訴 Nmap 要掃描誰了!這是進行有效網(wǎng)絡探測的關鍵一步。
掌握了如何指定目標后,我們下一步將學習 Nmap 如何發(fā)現(xiàn)這些目標是否真的“活著”(在線)——也就是主機發(fā)現(xiàn)技術。
主機發(fā)現(xiàn) (Host Discovery - Ping Scans)
在我們開始對目標進行詳細的端口掃描之前,通常需要先確認哪些目標主機是“活著的”,也就是在線并且可以響應網(wǎng)絡請求。這個過程就叫做主機發(fā)現(xiàn) (Host Discovery),有時也被稱為Ping 掃描 (Ping Scan)。
為什么主機發(fā)現(xiàn)很重要?
想象一下,你要給一個城市的所有住戶送信,但你事先不知道哪些房子是空置的。如果你挨家挨戶地敲門(進行端口掃描),會浪費大量時間在那些根本沒人的空房子上。主機發(fā)現(xiàn)就像是先派無人機偵察一下,看看哪些房子亮著燈,然后再針對性地去送信。
默認情況下,當你指定一個目標給 Nmap 時(例如nmap target.com),Nmap 會先進行主機發(fā)現(xiàn)。如果主機被認為是離線的,Nmap 通常就不會再對其進行端口掃描了,這樣可以大大提高掃描效率,尤其是在掃描大范圍網(wǎng)段時。
常用的主機發(fā)現(xiàn)技術
Nmap 使用多種技術來判斷主機是否在線。這些技術就像是偵察兵的不同工具,各有特點:
?ICMP Echo Request (Ping):這是最常見的方式,就像我們平時在命令行里用ping命令一樣。Nmap 發(fā)送一個 ICMP Echo 請求包到目標主機,如果收到 Echo 回復,就認為主機在線。
?TCP SYN Ping:Nmap 向目標主機的特定端口(默認是 80 端口,HTTP 服務)發(fā)送一個 TCP SYN 包(請求建立連接的第一個包)。如果收到 SYN/ACK 包(表示端口開放并同意建立連接)或 RST 包(表示端口關閉但主機在線),都認為主機在線。
?TCP ACK Ping:Nmap 向目標主機的特定端口(默認是 80 端口)發(fā)送一個 TCP ACK 包(確認包)。如果收到 RST 包,通常意味著主機在線,因為只有在線的主機才會響應一個它未曾期望的 ACK 包。
?UDP Ping:Nmap 向目標主機的特定高位 UDP 端口發(fā)送一個空的 UDP 包。如果收到 ICMP Port Unreachable 錯誤,說明主機在線但該 UDP 端口關閉。如果沒有任何響應,也可能意味著主機在線(因為 UDP 是無連接的,不保證響應)。
?ARP Ping (僅限局域網(wǎng)):當 Nmap 掃描與你處于同一個局域網(wǎng) (LAN) 內(nèi)的目標時,它會使用 ARP (Address Resolution Protocol) 請求來發(fā)現(xiàn)主機。ARP 請求直接在鏈路層工作,非常快速和可靠。如果目標主機回復了 ARP 響應,Nmap 就知道它在線了。
-sn(Ping Scan - No port scan) 參數(shù)詳解
如果你只想進行主機發(fā)現(xiàn),而不進行后續(xù)的端口掃描,可以使用-sn參數(shù) (可以記作 “Scan No ports” 或者 “Skip port scan”)。
例如,要發(fā)現(xiàn)192.168.1.0/24網(wǎng)段中哪些主機在線,但不掃描它們的端口,可以使用:
`nmap -sn 192.168.1.0/24`
這個命令會列出所有響應了 Nmap 主機發(fā)現(xiàn)探測的主機,并報告它們的狀態(tài) (Host is up)。
更多主機發(fā)現(xiàn)選項 (Ping Types)
Nmap 允許你更精細地控制使用哪些主機發(fā)現(xiàn)技術。以下是一些常用的選項:
| 選項 | 技術說明 | 示例命令 |
| -PE | ICMP Echo Ping (默認選項之一,如果 Nmap 有權限發(fā)送原始套接字) | nmap -PE target.com |
| -PP | ICMP Timestamp Ping (發(fā)送時間戳請求) | nmap -PP target.com |
| -PM | ICMP Address Mask Ping (發(fā)送地址掩碼請求) | nmap -PM target.com |
| -PS[portlist] | TCP SYN Ping 。可以指定端口列表,例如-PS22,80,443。默認是端口 80。 | nmap -PS80,443 scanme.nmap.org |
| -PA[portlist] | TCP ACK Ping 。可以指定端口列表,默認是端口 80。 | nmap -PA21,22 192.168.1.1 |
| -PU[portlist] | UDP Ping ??梢灾付ǘ丝诹斜恚J是端口 40125。 | nmap -PU53 192.168.1.1 |
| -PR | ARP Ping (僅限局域網(wǎng),通常是默認行為,如果 Nmap 檢測到目標在本地網(wǎng)絡) | nmap -PR 192.168.1.0/24 |
| -Pn | No Ping - Treat all hosts as online. 這個選項會跳過主機發(fā)現(xiàn)階段,直接對所有指定的目標進行端口掃描,即使它們可能并不在線。謹慎使用,因為它可能會對大量離線主機進行耗時的端口掃描。在你知道目標肯定在線,但它們可能屏蔽了 Ping 請求時比較有用。 | nmap -Pn scanme.nmap.org |
小提示 :
? 在掃描本地網(wǎng)絡時,ARP Ping (-PR) 通常是最快和最可靠的主機發(fā)現(xiàn)方法。
? 如果目標網(wǎng)絡有防火墻,它們可能會阻止某些類型的 Ping 請求。這時你可能需要嘗試不同的 Ping 類型 (-PS,-PA,-PU等) 或者使用-Pn(但要小心)。
小成就解鎖:你現(xiàn)在理解了主機發(fā)現(xiàn)的原理和常用方法!這能幫助你更高效地進行網(wǎng)絡掃描。
思考題 :
1. 如果你想快速檢查你家局域網(wǎng) (192.168.0.0/24) 中有哪些設備在線,你會使用哪個 Nmap 命令?為什么?
2. 你正在對一個已知的 Web 服務器進行安全評估,你知道它肯定在線,但它似乎屏蔽了所有 ICMP Ping 請求。為了掃描它的端口,你會使用哪個 Nmap 參數(shù)來確保 Nmap 不會因為 Ping 不通而跳過它?
了解了如何發(fā)現(xiàn)活躍主機后,我們就可以開始探索這些主機上到底開放了哪些“大門”了。下一節(jié),我們將進入端口掃描的世界!
教程的第六部分:服務與版本探測 (Service and Version Detection)。
6. 服務與版本探測 (Service and Version Detection)
僅僅知道端口是開放的還不夠,更重要的是了解這些端口上究竟運行著什么服務以及它們的具體版本。這就像我們不僅知道一扇門開著,還想知道門后是客廳、臥室還是廚房,以及里面的電器是什么品牌和型號。這些信息對于評估潛在的安全風險至關重要,因為很多漏洞都是特定于軟件的某個版本的。
Nmap通過向開放端口發(fā)送一系列精心構(gòu)造的探測報文,并分析返回的數(shù)據(jù)來識別服務和版本信息。這個過程有點像一位經(jīng)驗豐富的偵探,通過詢問和觀察來判斷一個人的職業(yè)和背景。
6.1 為什么服務與版本探測如此重要?
?精確識別服務:標準的端口號并不總是可靠。例如,一個Web服務器可能運行在80端口,但也可能運行在8080或其他非標準端口。服務探測可以幫助我們確認端口上運行的真實服務,而不是僅僅依賴于端口號的約定。
?發(fā)現(xiàn)潛在漏洞:知道了服務的具體版本,我們就可以查詢該版本是否存在已知的安全漏洞。例如,如果發(fā)現(xiàn)目標運行著一個過時的Apache Web服務器版本,那么它可能容易受到某些已知漏洞的攻擊。
?制定后續(xù)滲透策略:版本信息可以幫助我們選擇更具針對性的攻擊載荷或利用工具。
6.2 如何進行服務與版本探測?
Nmap中使用-sV選項來啟用服務與版本探測。這個選項會告訴Nmap在完成端口掃描后,對所有識別出的開放端口進行更深入的探測。
基本命令格式:
nmap -sV
示例:
讓我們嘗試對scanme.nmap.org進行服務與版本探測:
`nmap -sV scanme.nmap.org`
預期輸出解讀:
您會看到類似以下的輸出(具體版本號可能會有所不同):
Starting Nmap X.XX ( https://nmap.org ) at YYYY-MM-DD HH:MM ZZZ Nmap scan report for scanme.nmap.org (45.33.32.156) Host is up (0.18s latency). Not shown: 995 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0) 25/tcp open smtp Postfix smtpd 80/tcp open http Apache httpd 2.4.7 ((Ubuntu)) 9929/tcp open nping-echo Nping echo 31337/tcp open Elite ? Service Info: OS: Linux; CPE: cpe:/olinux_kernel Nmap done: 1 IP address (1 host up) scanned in XX.XX seconds
關鍵信息解讀:
?VERSION列:這是-sV選項的核心價值所在。它顯示了Nmap識別出的運行在對應端口上的服務的具體名稱和版本號。
? 例如,在22/tcp端口,我們看到OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13,這告訴我們目標運行的是OpenSSH服務,版本為6.6.1p1,并且是Ubuntu系統(tǒng)上的一個特定構(gòu)建版本。
? 在80/tcp端口,我們看到Apache httpd 2.4.7 ((Ubuntu)),表明這是一個Apache Web服務器,版本為2.4.7,運行在Ubuntu上。
? 有時,如果Nmap無法精確識別版本,或者服務比較特殊,版本列可能會顯示?或者一些描述性信息,如31337/tcp open Elite ?。
?SERVICE列:顯示了Nmap根據(jù)端口號和探測結(jié)果初步判斷的服務類型。
?Service Info行:有時Nmap還會提供一些額外的服務相關信息,比如操作系統(tǒng)類型(OS: Linux)和通用平臺枚舉(CPE)標識符(cpe:/olinux_kernel)。CPE是一種標準化的命名方式,用于唯一標識IT平臺和產(chǎn)品,這對于自動化漏洞管理非常有用。
6.3 服務探測的強度與精細控制
Nmap的服務探測功能非常強大,但也可能比較耗時,因為它需要與每個開放端口進行多次交互。
?--version-intensity
例如,進行一次輕量級的版本掃描:
nmap -sV --version-light
?--version-light(強度2)
?--version-all(強度9)
?--version-trace:如果您想了解Nmap是如何進行版本探測的,可以使用這個選項。它會顯示詳細的探測過程和Nmap與目標服務的交互數(shù)據(jù),這對于調(diào)試或深入理解探測原理非常有幫助。
思考題:
1. 為什么在進行安全評估時,僅僅知道一個端口是開放的是不夠的?服務和版本信息能提供哪些額外的價值?
2. 如果您掃描一個目標,發(fā)現(xiàn)其80端口開放,SERVICE列顯示為http,但VERSION列顯示為Microsoft IIS httpd 10.0。這與您預期的Linux服務器上的Apache服務不符,這可能意味著什么?您會如何進一步分析?
3. 在什么情況下,您可能會選擇使用--version-light而不是默認強度的服務探測?
服務與版本探測是Nmap的核心功能之一,它能為我們提供關于目標系統(tǒng)極其寶貴的信息。掌握好這一節(jié)的內(nèi)容,將大大提升您的網(wǎng)絡偵察能力。
接下來是第七部分:操作系統(tǒng)探測 (Operating System Detection)。
7. 操作系統(tǒng)探測 (Operating System Detection)
了解目標主機運行的操作系統(tǒng)是網(wǎng)絡偵察中的另一個關鍵環(huán)節(jié)。不同的操作系統(tǒng)有其獨特的特性、默認配置和潛在的漏洞。Nmap可以通過分析目標主機對特定TCP/IP探測報文的響應方式來猜測其操作系統(tǒng)。
想象一下,不同國家的人說同一種語言時可能會有不同的口音和用詞習慣。Nmap就像一位語言學家,通過分析這些細微的“網(wǎng)絡口音”來判斷對方的“國籍”(操作系統(tǒng))。
7.1 為什么操作系統(tǒng)探測很重要?
?定制攻擊策略:針對特定操作系統(tǒng)的漏洞利用成功率更高。例如,一個針對Windows SMB服務的漏洞利用,對Linux系統(tǒng)就無效。
?了解系統(tǒng)環(huán)境:操作系統(tǒng)信息有助于我們推斷目標可能安裝的軟件、默認服務以及安全配置。
?評估安全基線:某些操作系統(tǒng)版本可能已知存在未修補的漏洞,或者默認安全設置較弱。
7.2 如何進行操作系統(tǒng)探測?
Nmap中使用-O(大寫字母O) 選項來啟用操作系統(tǒng)探測。為了獲得準確的結(jié)果,Nmap通常需要找到至少一個開放和一個關閉的TCP端口。
基本命令格式:
nmap -O
示例:
讓我們嘗試對scanme.nmap.org進行操作系統(tǒng)探測:
`nmap -O scanme.nmap.org`
預期輸出解讀:
您可能會看到類似以下的輸出:
Starting Nmap X.XX ( https://nmap.org ) at YYYY-MM-DD HH:MM ZZZ Nmap scan report for scanme.nmap.org (45.33.32.156) Host is up (0.18s latency). Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 9929/tcp open nping-echo 31337/tcp open Elite Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/olinux_kernel:3 cpe:/olinux_kernel:4 OS details: Linux 3.2 - 4.9 Nmap done: 1 IP address (1 host up) scanned in XX.XX seconds
關鍵信息解讀:
?Device type:Nmap嘗試猜測設備類型,例如general purpose(通用服務器/工作站),router,printer等。
?Running:Nmap列出的最有可能的操作系統(tǒng)。這里可能是具體的發(fā)行版和內(nèi)核版本,例如Linux 3.X|4.X表示可能是Linux內(nèi)核3系列或4系列。
?OS CPE:操作系統(tǒng)的通用平臺枚舉(CPE)標識符。這對于自動化腳本和漏洞數(shù)據(jù)庫查詢非常有用。
?OS details:更詳細的操作系統(tǒng)猜測信息。Nmap會根據(jù)其指紋數(shù)據(jù)庫中的匹配情況給出最可能的幾個候選項。例如Linux 3.2 - 4.9。
重要提示:操作系統(tǒng)探測并非100%準確。它依賴于目標主機對特定探測報文的響應,而這些響應可能會受到防火墻、負載均衡器或操作系統(tǒng)本身配置的影響。如果Nmap無法獲得足夠的信息,它可能無法給出準確的猜測,或者會給出多個可能的選項。
7.3 操作系統(tǒng)探測的進階選項
?--osscan-limit:如果目標主機沒有任何開放和關閉的TCP端口符合Nmap進行操作系統(tǒng)探測的要求,Nmap通常會跳過對該主機的操作系統(tǒng)探測。使用此選項可以強制Nmap即使在不理想的情況下也嘗試進行探測。
?--osscan-guess或--fuzzy:當Nmap的操作系統(tǒng)探測結(jié)果不理想時,它會嘗試進行更積極(或說更模糊)的猜測。這可能會提高識別率,但也可能導致錯誤的猜測。
? 可以把它想象成,如果初步判斷不出來,Nmap會說:“嗯,雖然細節(jié)對不上,但它看起來很像一個Linux系統(tǒng)?!?/p>
?--max-os-tries
7.4 操作系統(tǒng)探測的原理簡述 (選讀)
Nmap的操作系統(tǒng)探測技術非常復雜,它基于一個龐大的指紋數(shù)據(jù)庫 (nmap-os-db)。這個數(shù)據(jù)庫包含了數(shù)千種已知操作系統(tǒng)和服務對特定TCP/IP探測報文的響應特征。
Nmap會向目標發(fā)送一系列精心設計的TCP、UDP和ICMP探測報文,并分析以下特征:
?TCP ISN (Initial Sequence Number) 采樣:不同操作系統(tǒng)生成TCP初始序列號的方式可能不同。
?TCP 選項支持和順序:例如窗口縮放選項、時間戳選項等。
?IP ID 采樣:IP包頭中的ID字段的生成方式。
?顯式擁塞通知 (ECN) 支持。
?對特定標志位組合的響應:例如,對SYN/FIN/URG/PSH同時設置的TCP報文的響應。
?ICMP 報文處理:例如,對不可達端口的ICMP響應。
Nmap收集這些響應特征,然后與數(shù)據(jù)庫中的指紋進行比對,找出最匹配的操作系統(tǒng)。
思考題:
1. 在哪些情況下,操作系統(tǒng)探測的結(jié)果可能不準確?你會如何應對這種情況?
2. 如果你掃描一個網(wǎng)絡,發(fā)現(xiàn)大部分主機都是Windows系統(tǒng),但有一臺主機Nmap無法識別其操作系統(tǒng),或者給出了非常模糊的猜測(例如unknown device)。這可能暗示了什么?
3.--osscan-guess選項的潛在好處和風險是什么?
操作系統(tǒng)探測是Nmap工具箱中非常強大的一個功能,它能幫助我們更全面地了解目標網(wǎng)絡環(huán)境。熟練運用它,將使您的安全評估工作更加高效和精準。
我們現(xiàn)在進入Nmap中一個非常強大且靈活的部分——Nmap腳本引擎。這部分將極大地擴展Nmap的功能。
8. Nmap腳本引擎 (NSE - Nmap Scripting Engine)
Nmap腳本引擎(NSE)是Nmap最強大的功能之一。它允許用戶編寫(或使用現(xiàn)有的)Lua腳本來自動化各種網(wǎng)絡任務。這些腳本可以用于更高級的漏洞檢測、更深入的服務發(fā)現(xiàn)、利用某些已知的漏洞、收集更多目標信息等等。
想象一下,Nmap本身是一個多功能工具箱,而NSE腳本就是各種定制的、專用的工具頭,可以裝在工具箱的工具上,執(zhí)行特定的高級任務。
8.1 NSE能做什么?
NSE腳本的用途非常廣泛,Nmap自帶了數(shù)百個腳本,涵蓋以下主要類別:
?auth:嘗試繞過認證機制或獲取目標系統(tǒng)上的憑據(jù)(例如,嘗試默認密碼)。
?broadcast:利用廣播發(fā)現(xiàn)網(wǎng)絡中的主機和服務,收集信息。
?brute:對服務進行暴力破解(例如,F(xiàn)TP、SSH、Telnet的用戶名和密碼)。
?default:一組被認為是安全且有用的默認腳本,通常與-sC或-A選項一起運行。
?discovery:嘗試發(fā)現(xiàn)關于網(wǎng)絡的更多信息(例如,DNS服務器、SNMP信息、目錄服務等)。
?dos:檢測或利用拒絕服務漏洞(使用時需格外小心,并獲得授權)。
?exploit:嘗試利用已知的安全漏洞(同樣,使用時需格外小心,并獲得授權)。
?external:與第三方服務交互以獲取信息(例如,查詢Whois數(shù)據(jù)庫、Shodan等)。
?fuzzer:向目標發(fā)送異常或隨機數(shù)據(jù),以測試其健壯性或發(fā)現(xiàn)潛在漏洞。
?intrusive:被認為具有侵入性,可能導致目標系統(tǒng)崩潰或留下明顯痕跡的腳本(不建議在未授權的情況下使用)。
?malware:檢測目標系統(tǒng)上是否存在已知的惡意軟件或后門。
?safe:被認為是安全的腳本,不太可能對目標系統(tǒng)造成負面影響。
?version:用于增強版本探測-sV的腳本,嘗試獲取更詳細的服務版本信息。
?vuln:專門用于檢測已知漏洞的腳本。
8.2 如何使用NSE腳本?
主要通過--script選項來指定要運行的腳本或腳本類別。
基本命令格式:
?運行單個腳本:
nmap --script

Nmap從入門到精通