埠掃描工具 Nmap(一)
埠掃描在百度百科上的定義是:
埠掃描是指某些別有用心的人傳送一組埠掃描訊息,試圖以此侵入某臺計算機,並瞭解其提供的計算機網路服務型別(這些網路服務均與埠號相關),但是埠掃描不但可以為黑客所利用,同時埠掃描還是網路安全工作者的必備的利器,通過對埠的掃描,瞭解網站中出現的漏洞以及埠的開放情況,對網站安全方面有著不可或缺的貢獻,是你學習網路安全的第一門課程的首選
目前在市面上主要的埠掃描工具是X_Scan、SuperScan、nmap,其中在這裡主推的是nmap,因為nmap具有以下的這一些優點:
1、多種多樣的引數,豐富的指令碼庫,滿足使用者的個人定製需求,其中指令碼庫還提供了很多強大的功能任你選擇
2、強大的可移植性,基本上能在所有的主流系統上執行,而且程式碼是開源的
3、詳細的文件說明,和強大的社群團隊進行支援,方面新人上手
Nmap是一款開源免費的網路發現(Network Discovery)和安全審計(Security Auditing)工具,但是nmap也是有一些缺點的,比如說上手較難,但是難上手是相對的,與其他達到這種功能性的軟體產品相比,還是比較容易上手的,但是這也不妨礙nmap成為世界千萬安全專家列為必備的工具之一,在其中的一些影視作品中《黑客帝國2》、《特警判官》中都有亮相
廢話不多說,開始今天的nmap學習:
nmap的安裝:直接從百度上下載,然後安裝的步驟跟其他的軟體一樣,最後確認安裝成功只需要在命令列中輸入nmap回車,有相關的引數輸出即為安裝成功,安裝的具體步驟可以檢視:
Nmap包含四項基本功能:
- 主機發現(Host Discovery)
- 埠掃描(Port Scanning)
- 版本偵測(Version Detection)
- 作業系統偵測(Operating System Detection)
下面就從主機發現一步一步進行探討
主機發現顧名思義就是發現所要掃描的主機是否是正在執行的狀態,接下來就來一個簡單例子
例子要求:獲取http://nmap.org 的主機是否開啟
輸入命令:nmap -F -sT -v nmap.org
-F:掃描100個最有可能開放的埠 -v 獲取掃描的資訊 -sT:採用的是TCP掃描 不寫也是可以的,預設採用的就是TCP掃描
執行如下:
由圖中的1,我們可以發現對URL進行解析花了16.5秒,這個地方花費的時間是可以進行優化的,優化的方法會稍後介紹
圖中的2,是總共的執行時間
圖中的3是說明有96個埠被遮蔽了,也就是說明了網站的防火牆是開啟的,因為沒有開啟防火牆是不會對埠進行遮蔽的,
補充說明:
埠埠一般是有下面這幾種狀態的
狀態 | 詳細的引數說明 |
Open | 埠開啟,資料有到達主機,有程式在埠上監控 |
Closed | 埠關閉,資料有到達主機,沒有程式在埠上監控 |
Filtered | 資料沒有到達主機,返回的結果為空,資料被防火牆或者是IDS過濾 |
UnFiltered | 資料有到達主機,但是不能識別埠的當前狀態 |
Open|Filtered | 埠沒有返回值,主要發生在UDP、IP、FIN、NULL和Xmas掃描中 |
Closed|Filtered |
只發生在IP ID idle掃描 |
圖中的4是本次返回的關鍵資訊,其中我們要主要關注的是埠號,埠狀態,埠上的服務
那你可能就會要問為什麼要關注這些埠呢?那這個問題就要轉到探討為什麼要進行掃描?
掃描對於黑客和安全人員來說,主要的流程是這樣的
上面的圖中的IP寫錯了,應該改為FTP
從這個圖中我們不難發現,我們主要關注的區域就是這些內容
接下來就來討論下面上面提出來的問題?怎樣對URL解析的時間進行優化,在Nmap重提供了不進行解析的引數(-n),這樣就不會對域名進行解析了
其中關於域名解析的相關引數還有:
-R 為所有的目標主機進行解析
--system-dns 使用系統域名解析器進行解析,這個解析起來會比較慢
--dns-server 伺服器選擇DNS解析
說到-R註釋的意思你會有所體會,其實nmap的掃描解析不止是對一個目標主機進行解析,還可以對一定範圍內的目標主機群進行解析
例如:查詢45.33.49.119-120的主機的狀態以及埠狀態
分析:
1、雖然查詢的主機的數量不多,但是這樣查詢起來也是很浪費時間的, 所有我們可以通過使用快速查詢的方法來節約時間
快速查詢埠方法的原理如下:
預設的情況下,我們的查詢是查詢最有可能開放的1000埠,但是使用快速埠查詢(引數 -F )會查詢最有可能開放的100個埠,這樣也就節約了10倍的時間
2、這裡我們需要獲取埠的狀態,所以就不能使用引數(-sn),這個引數是可以跳過埠掃描,直接進行主機發現的
輸入命令:nmap -F -sT -v -n 45.33.49.119-120 45.33.49.119:nmap.org的IP地址
PS:1、-sn引數只能掃描的主機,不能掃描埠,另一個引數也要特別注意的是(-PE)通過ICMP echo判定主機是否存活
執行情況如下:
圖片中的1處指的是,採用sT的掃描方法,這種掃描方法準確,速度快,但是這樣的掃描容易被防火牆和IDS發現並記錄,所以這種方法,實際中並不多用
由圖中的3處我們可以知道在不進行解析的情況下掃描用時為26.92秒,比解析的時候用的時間節約了不少
圖中的4說明了掃描了2個主機,然後只有一個主機為開啟
提示:
在nmap執行的時候,如果我們可以像其他程式設計一樣打“斷點”,直接按鍵盤的d鍵就行了,如果想知道執行的進度可以按下X鍵
好了,示例也講完了,下面我們就來分析一下掃描的各種方法:
埠掃描
1、TCP掃描(-sT)
這是一種最為普通的掃描方法,這種掃描方法的特點是:掃描的速度快,準確性高,對操作者沒有許可權上的要求,但是容易被防火牆和IDS(防入侵系統)發現
執行的原理:通過建立TCP的三次握手連線來進行資訊的傳遞
① Client端傳送SYN;
② Server端返回SYN/ACK,表明埠開放;
③ Client端返回ACK,表明連線已建立;
④ Client端主動斷開連線。
2、SYN掃描(-sS)
這是一種祕密的掃描方式之一,因為在SYN掃描中Client端和Server端沒有形成3次握手,所以沒有建立一個正常的TCP連線,因此不被防火牆和日誌所記錄,一般不會再目標主機上留下任何的痕跡,但是這種掃描是需要root許可權(對於windows使用者來說,是沒有root許可權這個概念的,root許可權是linux的最高許可權,對應windows的管理員許可權)
執行的原理圖如下:
3、NULL掃描
NULL掃描是一種反向的掃描方法,通過傳送一個沒有任何標誌位的資料包給伺服器,然後等待伺服器的返回內容。這種掃描的方法比前面提及的掃描方法要隱蔽很多,但是這種方法的準確度也是較低的, 主要的用途是用來判斷作業系統是否為windows,因為windows不遵守RFC 793標準,不論埠是開啟還是關閉的都返回RST包
但是雖然NULL具有這樣的一些用處,但是本人卻認為不宜使用NULL
1、NULL方法的精確度不高,埠的狀態返回的不是很準確
2、要獲取目標主機的執行系統,可以使用引數(-O),來獲取對於一些作業系統無法準確判斷的,可以加上引數(-osscan-guess)
3、NULL掃描易被過濾
4、FIN掃描
FIN掃描的原理與NULL掃描的原理基本上是一樣的在這裡就不重複了
5、ACK掃描
ACK掃描的原理是傳送一個ACK包給目標主機,不論目標主機的埠是否開啟,都會返回相應的RST包,通過判斷RST包中的TTL來判斷埠是否開啟
執行原理圖:
TTL值小於64埠開啟,大於64埠關閉
大致上主要的掃描方法就是這些,除了我們可以按照這樣些引數去執行掃描外,還可以自己定義一個TCP掃描包
6、自定義TCP掃描包的引數為(--scanflags)
例如:定製一個包含ACK掃描和SYN掃描的安裝包
命令:nmap --scanflags ACKSYN nmap.org
好了,接下來還有各種掃描方法的埠列表引數
-PS 埠列表用,隔開[tcp80 syn 掃描]
-PA 埠列表用,隔開[ack掃描](PS+PA測試狀態包過濾防火牆【非狀態的PA可以過】)【預設掃描埠1-1024】
-PU 埠列表用,隔開[udp高階口掃描 穿越只過濾tcp的防火牆]
其他的常見命令
輸出命令
-oN 檔名 輸出普通檔案
-oX 檔名 輸出xml檔案
錯誤除錯:
--log-errors 輸出錯誤日誌
--packet-trace 獲取從當前主機到目標主機的所有節點
其他的相關引數可以參考:http://www.2cto.com/Article/201203/125686.html 到時候需要再進行查詢
相關資料:
http://www.tuicool.com/articles/ZBvmYrN
http://www.2cto.com/Article/201203/125686.html