主動掃描之Nmap
本文參考於李華峰等人的圖書《Kali Linux2 網絡滲透測試實踐指南》2018年第1版
主動掃描一般都是針對目標發送特定的數據包,然后根據目標的反應來獲得一些信息。
Nmap是非常優秀的主動掃描工具,通過Nmap對一台計算機進行掃描,我們可以得到的目標信息如下:
- 目標主機是否在線
- 目標主機所在的網絡結構
- 目標主機上開放的端口
- 目標主機所使用的操作系統
- 目標主機上所運行的服務及版本
- 目標主機上所存在的漏洞
基本用法
對單個主機進行掃描nmap <目標ip地址>
對多個不連續的主機進行掃描nmap [目標1 目標2 目標3 目標4...]
對連續范圍內的主機進行掃描nmap [ip范圍]
,如nmap 192.168.164.1-255
使用CIDR掃描整個子網nmap [ip地址/掩碼位數]
,如nmap 192.168.164.1/24
主機發現
跳過Ping掃描階段
通常在Nmap進行其他掃描前,先對目標主機進行Ping掃描,若該掃描無反應,則結束整個掃描過程。然而有時目標主機其實在線,但采用某種手段屏蔽了Ping掃描,因此也會躲過其他掃描操作。所以我么可以指定無論目標是否響應Ping,都要完成整個掃描過程,該參數為-PN
,例如
nmap -PN 192.168.169.131
使用ARP協議進行主機發現
當目標主機與我們處於同一網段時,使用ARP協議掃描是最佳選擇,不僅速度最快,而且掃描結果也是最精准的,因為沒有任何安全措施會阻止正常的ARP請求。參數-PR
,例如
nmap -PR 192.168.169.131
僅使用Ping協議進行主機發現
有時我們要對大量主機進行掃描,若采用所有方式進行掃描的話就會花費大量的時間,這時我們可以只對目標主機進行Ping掃描,參數為-sP
,例如
nmap -sP 192.168.169.131
使用TCP協議進行主機發現
TCP協議主要由三次握手構成,其中最后一步意義不大,所以掃描的時候也可以不完成最后一步。若完成最后一步,則稱為全開(Connect)掃描,參數為-sT
,否則稱為半開(SYN)掃描,參數為-sS
,例如
nmap -sS 192.168.169.131
nmap -sT 192.168.169.131
使用UDP協議進行主機發現
UDP協議比TCP協議簡單,但在掃描時所花時間卻比TCP長,因此這種掃描方式並不常用。參數-sU
,例如
nmap -sU 192.168.164.131
端口發現
端口狀態
Nmap對目標端口進行掃描時,對端口的狀態判斷有5種:
- open,應用程序在該端口接收TCP連接或者UDP報文
- closed,關閉的端口對於nmap也是可訪問的,它接收nmap探測報文並作出響應,但沒有應用程序在其上監聽。
- filtered,由於包過濾阻止探測報文到達端口,nmap無法確定該端口是否開放。過濾可能來自專業的防火牆設備,路由規則或者主機上的軟件防火牆。
- unfiltered,未被過濾狀態意味着端口可訪問,但nmap無法確定它是開放還是關閉。只有用於映射防火牆規則集的ACK掃描才會把端口分類到這個類別。
- open|filtered,無法確定端口是開放還是被過濾,開放的端口不響應就是一個例子。
掃描全部端口
每個網絡設備有65536個端口,如果對這些端口全部進行掃描,那么就會花費很長的時間,所以Nmap默認掃描的端口只有最常用的1000個。
若要對所有的65536個端口進行掃描,可使用參數-p "*"
,例如
nmap -p "*" 192.168.164.131
掃描前n個端口
如果只想掃描使用頻率最高的n個端口,可以使用參數--top-ports n
,例如
nmap --top-ports 10 192.168.164.131
掃描指定端口
如果只對指定端口進行測試的話,可以使用參數-p 端口號
,例如
nmap -p 80 192.168.164.131
掃描目標操作系統
如果我們知道目標所使用的操作系統,之后就可以大大減少工作量。但沒有一種工具可以提供絕對准確的信息,所有的工具都是使用“猜”的方法:通過向目標發送探針,不同系統對這些探針會做出不同的響應,Nmap將這些響應特征提取出來並記錄在一個數據庫中,然后根據目標的回應來猜測系統。探針和響應特征的對應關系存放在安裝目錄的Nmap-os-db
文件中。
Nmap會嘗試驗證如下參數:
- 操作系統供應商的名字,如微軟或sun
- 操作系統的名字,如windows、Mac OS X、Linux
- 操作系統的版本,如XP、2000、2003、2008
- 當前設備的類型,比如通用計算機、打印服務器、媒體播放器、路由器、WAP或者電力裝置
除此之外,操作系統檢測還提供關於系統運行時間和TCP序列可預測性信息的分類。
對系統的掃描使用參數-O
,例如
nmap -O 192.168.164.131
掃描目標服務
對操作系統而言,那些安裝在操作系統之上的軟件更是網絡安全的重災區,因此在進行滲透時,要盡量的檢測出目標系統運行的各種軟件。
有時我們並沒有使用Nmap進行服務識別操作,也得到了服務類型的信息。其實Nmap並沒有進行服務的識別,只是將端口號在自己的端口服務表數據(nmap-services)中進行查找,然后返回。即這種返回的服務只是數據庫中的,並非事實中端口所運行的服務。
Nmap提供了更精准的服務及版本檢測選項,參數為-sV
,例如
nmap -sV 192.168.164.131
掃描結果保存
Nmap支持多種保存格式,若保存為XML格式,可使用參數-oX 文件名
,例如
nmap -oX Report.xml 192.168.164.131