nmap使用方法

iamblackcat發表於2022-03-07

簡介

Nmap全稱Network Mapper(網路對映器),是一款開源的網路探測和安全稽核工具,其設計初衷是為了能夠快速掃描大型網路,掃描單個主機當然也是沒有問題。使用nmap掃描埠狀態時,可能為以下幾種狀態:Open(開放的),意味著目標機器上的應用程式正在該埠監聽連線/報文; filtered(被過濾的) 意味著防火牆,過濾器或者其它網路障礙阻止了該埠被訪問,Nmap無法得知 它是開放的還是關閉的;closed(關閉的) 意味著埠上沒有應用程式在監聽,但他們隨時可能開放;當埠對Nmap的探測做出響應,但是Nmap無法確定它們是關閉還是開放時,這些埠就被認為是 unfiltered(未被過濾的) ;如果Nmap報告狀態組合 open|filtered 和 closed|filtered時,那說明Nmap無法確定該埠處於兩個狀態中的哪一個狀態。

主要功能

主機發現

ping掃描:-sP

ping掃描只進行ping,然後列出線上的主機,例如可以用ping掃描快速發現一個C段所有存活的主機。

ping掃描

無ping掃描:-P0

無ping掃描通常用在目標主機防火牆禁止ping的情況下,可以避免被防火牆發現。格式為:nmap -p0[協議1,協議2,...] <目標>若不指定協議,則預設使用協議1、2、4。這裡協議的數字即IP報文首部中的協議,TCP為6,ICMP為1,IGMP為2,UDP為17。更多協議號可參考IP協議號列表。例如下面指定使用TCP、IGMP、UDP判斷主機是否存活:

無ping掃描

TCP SYN Ping掃描:-PS

nmap預設情況下使用TCP ACK和ICMP Eho請求對目標進行探測,若目標主機防火牆對這些請求禁止時,就可以使用TCP SYN Ping進行目標主機是否存活的探測。

TCP SYN Ping掃描

預設埠為80,也可以使用逗號分隔埠列表,例如:

TCP SYN Ping掃描2

這裡的-v代表增加顯示的詳細程度,-vv代表更加詳細。

TCP ACK Ping掃描:-PA

與TCP SYN Ping掃描區別是這裡使用的TCP標誌位是ACK而不是SYN,使用這種掃描方式可以探測阻止SYN包或ICMP Echo請求的主機。這種方式下,nmap會傳送一個ACK標誌的TCP包給目標主機,如果目標不存活則不響應該請求,目標主機線上則會返回一個RST包。

UDP Ping 掃描:-PU

傳送一個空的UDP包到目標主機,如果目標主機響應則返回以ICMP埠不可達錯誤,如果目標主機不是存活狀態則返回各種ICMP錯誤資訊。(這部分我看書上抓到了一個icmp的不可達報文,我自己並沒有抓到該報文,不知道是哪裡出了問題)同樣可以指定埠,例如:

UDP Ping 掃描

該選項需要使用root許可權執行。

ICMP Ping Types掃描:-PE;-PP;-PM

ICMP全稱Internet Control Message Protocol,用於在主機、路由器間傳遞控制訊息。-PE是向目標傳送ICMP Echo資料包來探測主機是否線上,-PP是ICMP時間戳掃描,防火牆一般會禁止ICMP Echo請求,但配置不當時有可能回覆ICMP時間戳請求,-PM進行ICMP地址掩碼ping掃描。

ARP Ping掃描:-PR

多用在掃描區域網時,因為區域網防火牆一般不會禁止ARP請求,預設情況下如果我們掃描的目標主機就在同一個區域網上,會自動使用ARP掃描。

列表掃描:-sL

列表掃描僅僅列出每臺主機,不會傳送任何報文到主機上。預設情況下nmap會進行反向域名解析獲取它們的名字。例如:

列表掃描

禁止DNS反向解析:-n

還是上面的例子,新增-n型別後:

可以看到不再對目標IP進行反向域名解析。

反向解析域名:-R

與-n相反,-R表示永遠對伺服器進行反向域名解析,多用在繫結了域名的伺服器上,以便讓我們更加清楚哪一個ip上部署了什麼網站。而-n多用在我們僅僅想單純掃描一段IP,以節省時間。

使用系統域名解析器:--system-dns

在進行域名解析時,預設nmap會傳送查詢到主機上配置的域名伺服器來解析域名,也可以使用指定的域名解析伺服器。

掃描IPv6地址:-6
路由跟蹤:--traceroute

路由跟蹤可以幫助使用者查出從本地計算機到目標之間所經過的網路節點,並可以看到通過各個節點的時間。例如:

路由跟蹤

需要使用root許可權

SCTP INIT Ping掃描:-PY

SCTP全稱Stream Control Transmission Protocol,流控制傳輸協議,是一個傳輸層協議,可以看作是TCP協議的改進。SCTP INIT Ping通過向目標主機傳送INIT包來判斷目標主機是否存活。

網路探索

時序選項:-T

-T 用於指定時序,共有0~5 6個選項,0最慢,5最快,慢的掃描多用於IDS逃避,一般使用-T4進行掃描,可以在儘可能短的時間做到儘可能精確的掃描。

一些常用的掃描型別

-p用來指定一個掃描的埠號,也可以用來指定一個範圍。如果想指定TCP的埠或UDP的埠,可以在埠號前新增“T:”或“U:”,若不指定協議限定符,則埠號會被新增到所有協議列表。

-F用於快速掃描埠,只會掃描有限的埠來提升速度。

-r使用該選項可以避免對埠進行隨機順序的掃描,預設是隨機進行掃描的。

--top-ports後跟數字,可以指定掃描開發概率最高的前若干個埠。

--port-ratio後面跟頻率,掃描一定概率以上開放的埠,與--top-ports類似,儲存在nmap-services檔案中。

TCP SYN掃描:-sS

掃描速度較快,隱蔽性也較好,是一種常用的掃描方式。因為它不開啟一個完全的TCP連線,也被稱為半開掃描。TCP連線掃描會呼叫開啟目標上相關埠並完成3次握手,這樣做容易被目標主機察覺,使用半開掃描不容易被察覺。

nmap先向目標主機傳送一個SYN包請求連線,若收到RST表明無法連線目標主機,即主機埠關閉。若埠開放,則會響應一個SYN/ACK包,此時三次握手尚未進行完成,nmap收到相應後向目標傳送一個RST代替ACK包,連線未建立,但nmap已經知道埠開放了。如下圖所示:

TCP SYN掃描

TCP 連線掃描:-sT

理解了tcp半開掃描,自然就能理解tcp連線掃描,除非SYN掃描不能使用,否則SYN掃描將是比TCP連線掃描更好的選擇。

UDP掃描:-sU

UDP掃描往往速度較慢,也很容易被管理員忽略,UDP頭沒有任何資料,就使得nmap可以輕鬆判斷埠的開放狀態,若果返回ICMP埠不可達,就可以斷定其實關閉的,其他的就可以被認定是被過濾的,若被響應則可以判斷其實開放的。

UDP掃描

隱蔽掃描:-sN;-sF;-sX

-sN為NULL掃描,通過傳送非常規的TCP資料包對計算機進行探測,若目標主機埠關閉,則會響應一個RST,若埠開放,則不會響應任何資訊。

-sF為FIN掃描,當我們使用TCP SYN掃描時可能被目標主機的防火牆發現,會阻止SYN資料包,使用TCP FIN掃描不需要完成TCP握手就會有很好的穿透效果,若收到RST響應,則說明目標埠時開放的,否則為關閉的。

-sX為Xmas掃描,資料包的FIN、PSH和URG標記位置置為1,若目標系統遵循RFC793且埠開放,則目標主機會響應一個RST。若目標主機不遵循RFC793,則無論埠是否開放,都會響應RST。

TCP ACK掃描:-sA

與TCP SYN掃描類似,該方法是向目標主機埠傳送一個只有ACK標誌的TCP資料,如果目標主機埠開放,則會返回一個TCP RST資料包。例如:

TCP ACK掃描

(我覺得這種掃描方式不是特別準確,因為無論我測試的埠有沒有開放,都得到了RST包,且nmap對埠狀態都顯示unfiltered)

TCP視窗掃描:-sW

TCP視窗掃描,與ACK原理類似,通過檢查RST報文判斷目標埠是否開放。

TCP Maimon掃描:-sM

和NULL、FIN、Xmas掃描完全一樣,除了探測報文是FIN/ACK。

自定義TCP掃描:--scanflags

可以自定義標誌位,可以是:URG、ACK、PSH、RST、SYN、FIN中的任意組合,標誌位之間不需要空格。不常用,非一般場景使用。

空閒掃描:-sI

允許進行埠完全欺騙掃描,可以使攻擊者不使用自己的IP向目標主機傳送資料包,可以利用不活躍的殭屍主機反彈給攻擊者一個旁通訊道,IDS會把殭屍主機當做攻擊者,是很隱蔽的掃描方法。

如下圖所示,當我們篩選傳送源可以看到192.168.137.6(即Kali)並沒有向目標主機192.168.137.1直接傳送資料包,而是利用了“殭屍主機”192.168.137.130,指定的埠必須是對192.168.137.6開放的。

空閒掃描

IP協議掃描:-sO

不是一種嚴格的埠掃描方式,並不掃描TCP、UDP埠號,而是IP協議號。可以幫助使用者確定目標主機支援哪些IP協議,例如TCP、UDP、IGMP。如下圖所示:

IP協議掃描

FTP Bounce掃描:-b

它利用存在漏洞的 FTP 伺服器對目標主機進行掃描,格式為nmap -b [username:password@server:port] [host] username:password@server:port。其中,server 是指 FTP 服務的名字或 IP 地址,port為ftp服務埠,若為預設21則可以是省略,如果 FTP 伺服器允許匿名使用者登入的話,則可以省略 username:password。