nmap攻擊技術原理簡述

美創安全實驗室發表於2019-08-16

Nmap掃描原理簡介
Nmap(NetWork Mapper)最初是由Fyodor在1997年建立的一款開源免費的網路發現和安全審計工具。隨後在開源社群眾多的志願者參與下,該工具逐漸完善併成為了最為流行的安全必備工具。Nmap可以檢測目標主機是否線上、埠開放情況、偵測執行的服務型別及版本資訊、偵測作業系統與裝置型別等資訊。它已成為網路管理員用以評估網路系統安全的必備工具之一。

Nmap的四大基本功能與兩大擴充套件功能:
基本功能:
1. 主機發現
2. 埠掃描
3. 版本偵測
4. 作業系統偵測

擴充套件功能:
1. 防火牆/IDS規避
2. NSE指令碼引擎

在這裡插入圖片描述

一般情況下,nmap順序進行各種功能,首先需要進行主機發現,隨後確定埠狀況,在已經確定的埠上查詢執行的具體應用程式的名字與版本資訊,然後可以進行作業系統的偵測。而在四項基本功能的基礎上,Nmap提供防火牆與IDS(入侵檢測系統)的規避技巧,以及強大的NSE(Nmap Scripting Language)指令碼引擎功能,可以綜合運用到四個基本功能的各個階段,對基本功能進行補充和擴充套件。

Nmap與滲透測試:
Nmap常用在滲透測試中資訊蒐集階段,用於蒐集目標機主機的基本狀態資訊,列舉網路主機清單、管理服務升級排程、監控主機、服務執行狀況。Nmap不僅可以用於掃描單個目標機,也可以適用於掃描大規模的計算機網路。掃描結果可以作為漏洞掃描、漏洞利用和許可權提升階段的輸入。例如,漏洞掃描工具Nessus與漏洞利用工具Metasploit都可以匯入Nmap的XML形式的掃描結果。
Nmap支援很多掃描技術,例如:UDP、TCP connect()、TCP SYN(半開掃描)、ftp代理(bounce攻擊)、反向標誌、ICMP、FIN、ACK掃描、聖誕樹(Xmas Tree)和Null掃描。Nmap還提供了一些高階的特徵,例如:通過TCP/IP協議棧特徵探測作業系統型別,祕密掃描,動態延時和重傳計算,並行掃描,通過並行ping掃描探測關閉的主機,誘餌掃描,避開埠過濾檢測,直接RPC掃描(無須埠影射),碎片掃描,以及靈活的目標和埠設定。
根據使用的功能選項,Nmap也可以報告遠端主機的下列特徵:使用的作業系統、TCP序列、執行繫結到每個埠上的應用程式的使用者名稱、DNS名、主機地址是否是欺騙地址、以及其它一些東西。

Nmap工作原理分析:
1. 主機發現
----目的:
用於發現目標主機是否處於存活狀態。
----原理:
主機發現的原理類似於Ping命令,即傳送探測包到目標主機,如果可以收到回覆報文,那麼就證明目標主機是開啟狀態。預設情況下,Nmap會預設傳送四種不同型別的資料包來探測目標主機是否線上(ICMP echo request // TCP SYN // TCP ACK // ICMP timestamp request),依次傳送四個報文來探測目標機是否開啟。只要成功收到其中一個的返回包,就證明目標機開啟。除此之外,Nmap還支援一些其他型別的探測包, (SCTP INIT // COOKIE-ECHO //NETMASK)等。使用不同型別的資料包可以避免因防火牆過濾或丟包造成的判斷失誤。
2. 埠掃描
----目的:
用於掃描目標機上的埠狀態。
在預設狀態下,Nmap會掃描1660個常用的埠,可以覆蓋大多數基本應用情況。
----原理:
埠掃描實際上是運用TCP和UDP以及一些其他連線方式對目標機的各個埠進行連線,根據返回包的結果判斷埠是否處於正常開放(open)、關閉(Closed)、過濾(Filtered)、未過濾(Unfiltered)的狀態。根據連線方式以及返回的資料包的不同可以大致可以分成以下幾種掃描方法。TCP connect()、 TCP SYN、 TCP ACK、 UDP、 FIN、 XMAS、 NULL掃描等。
----型別圖解:
在這裡插入圖片描述
TCP connect()掃描:
TCP connect()方式使用系統網路API connect向目標主機的埠發起TCP連線,如果目標埠有程式監聽,connect()就會成功收到返回包,否則這個埠是不可達的。這項技術最大的優點是,不需root許可權。任何UNIX使用者都可以自由使用這個系統呼叫。缺點是,掃描速度較慢(因為要經歷完整的 “三次握手“ 過程),且很容易被檢測到,會在目標主機的日誌中會記錄大批的連線請求以及錯誤資訊。

TCP connect()探測到埠關閉:
在這裡插入圖片描述
TCP connect()探測到埠開啟:
在這裡插入圖片描述

TCP SYN 掃描:
這是Nmap預設的掃描方式,也叫TCP半開放掃描。該掃描在傳送SYN報文至目 標埠後,如果收到了SYN / ACK的回覆包,就可以判斷埠是開放狀態。如果收到了RST 包,證明埠是關閉狀態的。如果沒有收到回覆包,那麼判斷埠是被遮蔽的。
不同於connect全掃描,半開放掃描並不需要經歷完整的 “三次握手” ,不需建立完整的TCP連線,所以相對比較隱蔽,速度更快,適用範圍更廣。

TCP SYN 探測到埠關閉:
在這裡插入圖片描述
TCP SYN 探測到埠開放:

在這裡插入圖片描述
TCP ACK 掃描:
TCP ACK 掃描區別於以上兩種掃描方式,該掃描方法並不能用來判斷埠是否開啟,因為當客戶端向伺服器傳送一個ACK資料包時,無論埠是否開啟,都會返回一個RST包。所以,該方法通常用來判斷某個埠有沒有被防火牆遮蔽或過濾,如果被遮蔽則無法收到RST包,若沒有遮蔽則可以收到。此方法常與TCP SYN掃描一起使用,輔助SYN掃描,判斷目標主機防火牆的狀況。該方法是一種祕密掃描。
祕密掃描是一種不被審計工具所檢測的掃描技術。它通常用於在通過普通的防火牆或路由器的篩選(filtering)時隱藏自己。祕密掃描能躲避IDS、防火牆、包過濾器和日誌審計的檢查,從而獲取目標埠的開放或關閉的資訊。由於沒有包含TCP “三次握手”協議的任何部分,所以無法被記錄下來,比半連線掃描更為隱蔽。但是這種掃描的缺點是掃描結果的不可靠性會增加,精度降低,而且掃描主機也需要自己構造IP包。現有的祕密掃描有TCP FIN掃描、TCP ACK掃描、NULL掃描、XMAS掃描和SYN/ACK掃描等。

TCP ACK 探測到埠被過濾:
在這裡插入圖片描述
TCP ACK 探測到埠未被過濾:
在這裡插入圖片描述

TCP FIN 掃描
該方法是向目標機傳送一個帶有FIN標識和埠號的資料包給伺服器,如果埠開啟,無論防火牆是否過濾了請求包,都不會回應任何資訊,如果埠關閉,都會返回一個RST 報文。該掃描方法的好處就是完全不建立TCP連線,從而大大減少了被目標主機記錄下來的可能性。該方法是祕密掃描的一種。

TCP FIN 探測到埠關閉:

在這裡插入圖片描述
TCP FIN 探測到埠開啟:
在這裡插入圖片描述
TCP XMAS 掃描:
該方法的原理是客戶端向目標機傳送帶有PSH,FIN,URG標識且值為1的資料包,其中URG標誌,指示緊急資料,應立即處理;PSH標誌,指示強制將資料壓入緩衝區;FIN 標誌,指示結束TCP會話請求。
如果埠開放,則目標機不會有任何的響應,如果目標及返回一個RST資料包,則表明埠處於關閉狀態;如果返回的是一個ICMP 資料包則表明資料包被過濾。正常情況下,三個標誌位不能同時被設定。此掃描也屬於祕密掃描。

TCP XMAS 探測到埠關閉:
在這裡插入圖片描述
TCP XMAS 探測到埠開啟:
在這裡插入圖片描述
TCP XMAS 探測到埠過濾:

在這裡插入圖片描述
TCP Null 掃描:
該方法又叫反向掃描,是將一個沒有設定任何標誌位的資料包傳送給TCP埠,由於在正常的通訊中,資料包至少要設定一個標誌位,根據RFC 793的要求,在埠關閉的情況下,若收到一個沒有設定任何標誌位的資料欄位,那麼主機應該捨棄改分段,併傳送一個RST 資料包,否則不會響應發起掃描的客戶端計算機。
簡單來說,客戶端傳送NULL資料包,目標機無響應,證明埠開放;目標機返回RST 資料包證明埠關閉。但windows系統主機不遵從RFC 793標準,且只要收到沒有設定任何標誌位的資料包時,不管埠是處於開放還是關閉都響應一個RST 資料包。所以可以在一定程度上區分主機系統是windows還是Unix。

TCP NULL探測到埠關閉:
在這裡插入圖片描述
TCP NULL探測到埠開啟:
在這裡插入圖片描述

UDP 掃描:
由於UDP協議是面向非連線的,因此該方法不可能像TCP埠掃描一樣,依賴於建立連線的過程,這也使得UDP埠掃描的可靠性不高。
UDP掃描方式用於判斷UDP埠的情況。
第一種掃描方法是利用ICMP埠不可達報文進行掃描。此原理是當一個UDP埠接收到一個UDP資料包時,如果他是關閉狀態,會返回一個“ICMP port unreachable”資料包;如果是開放的,就會忽略資料包從而不返回任何資訊。因此,可以通過反向排除法來斷定哪些UDP埠是可能處於開放狀態。但是由於此方法需要系統管理員的許可權,且掃描結果可靠性不高(因為不知道資料包是否到達目標機),最重要的是在RFC 1812中對ICMP錯誤報文生成速度進行了限制,導致了此方法有一定侷限性。
第二種方法是對UDP中的recvfrom()和write()掃描。此方法是對上一個方法的改進版本,一定程度上解決了需要系統管理員的問題。因為ICMP錯誤報文,只有管理員有許可權檢視,那麼在未獲得許可權的時候可以使用recvfrom()和write()這兩個系統呼叫來間接獲得對方埠狀態。對於一個處於關閉狀態的埠而言,第二次呼叫write()時,通常會得到出錯資訊。而呼叫recvfrom()時,如果未收到ICMP報文會返回錯誤程式碼13,如果收到ICMP錯誤報文會返回錯誤程式碼111,可根據這些區別判斷埠狀態。

UDP 探測到埠關閉:
在這裡插入圖片描述
UDP 探測到埠開啟:
在這裡插入圖片描述

DUMP 掃描:
此方法也被稱為Idle掃描,在掃描主機時應用了第三方殭屍計算機掃描。由殭屍主機向目標主機傳送SYN包。目標主機埠開發時回應SYN|ACK,關閉時返回RST,殭屍主機對SYN|ACK回應RST,對RST不做回應。
從殭屍主機上進行掃描時,進行的是一個從本地計算機到殭屍主機的、連續的ping操作。檢視殭屍主機返回的Echo響應的ID欄位,能確定目標主機上哪些埠是開放的還是關閉的。

3. 版本偵測
–目的:
用於識別埠上執行的應用程式與程式版本。
–原理:
Nmap當前可識別,檢測別數千種應用的簽名及數百種應用協議。對於不識別的應用,Nmap會預設將應用的指紋列印出來,讓使用者自行判斷。

a. 首先檢查開啟狀態下的埠是否在排除埠列表內。如果在則將埠剔除。
b. 若是TCP 埠,嘗試TCP 連線。在等待連線的時間裡,會接受到目標機傳送的“WelcomeBanner”資訊。Nmap將接收到的Bnner與nmap -service -probes中NULL prode的簽名進行對比。查詢對應應用程式的名字和版本資訊。
c. 若無法通過Banner確定應用程式版本,那麼Nmap再次嘗試傳送其他的探測包將probe得到回覆包與資料庫中的簽名進行對比。如果反覆探測都無法得出具體應用,那麼列印出應用返回報文,讓使用者自行進一步判定。
d. 若是UDP 埠,那麼直接使用nmap -service -probes中探測包進行匹配,根據匹配結果分析應用程式版本。
e. 如果探測到的應用程式時SSL,那麼呼叫openSSL進一步偵查執行在SSL之上的具體的應用程式。
f. 如果探測到的應用程式時SunRPC,那麼呼叫brute -force RPC grinder 進一步探測具體服務。
4. 作業系統偵測
–目的:
用於識別目標主機的作業系統型別、版本編號及裝置型別。
–原理:
Nmap使用TCP/IP協議棧指紋來識別不同的作業系統和裝置。在RFC規範中,有些地方對TCP/IP的實現並沒有強制規定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根據這些細節上的差異來判斷作業系統的型別的。
a. Nmap內部包含了2600多已知系統的指紋特徵(在檔案nmap-os-db檔案中), 可以識別通用PC系統、路由器、交換機等裝置型別。將此指紋資料庫作為進行指紋對比的樣本庫。
b. 分別挑選一個開啟和關閉狀態下的埠,向其傳送經過精心設計的TCP / UDP / ICMP資料包,根據返回的資料包生成一份系統指紋。
c. 將探測生成的指紋與 nmap -os -db中指紋進行對比,查詢匹配的系統。如果無法匹配,以概率形式列舉出可能的系統。
5. 防火牆/IDS規避和欺騙
–目的:
Nmap提供多種機制來規避防火牆、IDS的遮蔽和檢查,便於祕密的探查目標主機的狀況。
–原理:
基本的規避方法包括:分片、IP誘騙、IP偽裝、指定源埠、掃描延時等。
分片(Fragmentation):
將可疑的探測包進行分片處理(例如將TCP包拆分成多個IP包傳送過去),某些簡單的防火牆為了加快處理速度可能不會進行重組檢查,以此避開其檢查。

IP誘騙(IP decoys):
在進行掃描時,將真實IP地址和其他主機的IP地址(其他主機需要線上,否則目標主機將回復大量資料包到不存在的主機,從而實質構成了拒絕服務攻擊)混合使用,以此讓目標主機的防火牆或IDS追蹤檢查大量的不同IP地址的資料包,降低其追查到自身的概率。注意,某些高階的IDS系統通過統計分析仍然可以追蹤出掃描者真實IP地址。

IP偽裝(IP Spoofing):
顧名思義,IP偽裝即將自己傳送的資料包中的IP地址偽裝成其他主機的地址,從而目標機認為是其他主機在與之通訊。需要注意,如果希望接收到目標主機的回覆包,那麼偽裝的IP需要位於統一區域網內。另外,如果既希望隱蔽自己的IP地址,又希望收到目標主機的回覆包,那麼可以嘗試使用idle scan或匿名代理(如TOR)等網路技術。

指定源埠(Specify source port):
某些目標主機只允許來自特定埠的資料包通過防火牆。例如FTP伺服器配置為:允許源埠為21號的TCP包通過防火牆與FTP服務端通訊,但是源埠為其他埠的資料包被遮蔽。所以,在此類情況下,可以指定Nmap將傳送的資料包的源埠都設定特定的埠。

掃描延時(Scanning Delay):
某些防火牆針對傳送過於頻繁的資料包會進行嚴格的偵查,而且某些系統限制錯誤報文產生的頻率(例如,Solaris 系統通常會限制每秒鐘只能產生一個ICMP訊息回覆給UDP掃描),所以,定製該情況下發包的頻率和發包延時可以降低目標主機的審查強度、節省網路頻寬。
6. NSE指令碼引擎
–目的:
用於增強主機發現、埠掃描、版本偵測和作業系統偵測等功能,還可以用來擴充套件高階的功能如web掃描,漏洞發現何漏洞利用等。
–原理:
在這裡插入圖片描述
Nmap使用Lua語言作為NSE指令碼語言,當前的Nmap指令碼庫已經支援350多個指令碼。在nmap_main裡面,呼叫init_main()進行詳細的初始化過程,載入Lua標準庫與Nmap擴充套件庫,準備引數環境,載入並執行nse_main.lua檔案;這個檔案載入使用者選擇的指令碼檔案,執行完之後返回函式物件給init_main(),被儲存到Lua登錄檔中。
在nse_main.lua中,定義兩個核心的類,Script和Thread,Script用於管理NSE指令碼,當新的指令碼被載入時,呼叫 Script.new建立指令碼物件,該物件被儲存下來在後續的掃描過程中使用;Thread用於管理指令碼的執行,該類中也包含對指令碼健全性的檢查。在指令碼執行時,如果指令碼之間存在依賴關係,那麼會將基礎的無依賴的指令碼統一執行完畢,再執行依賴性的指令碼。
執行指令碼掃描時,從nmap_main()中呼叫script_scan()函式。在進入script_scan()後,會標記掃描階段型別,然後進入到初始化階段返回的main()函式(來自nse_main.lua指令碼中的main)中,在函式中解析具體的掃描型別。
main()函式負責處理三種型別的指令碼掃描:預掃描(SCRIPT_PRE_SCAN)、指令碼掃描(SCRIPT_SCAN)、後掃描 (SCRIPT_POST_SCAN)。預掃描即在Nmap呼叫的最前面(沒有進行主機發現、埠掃描等操作)執行的指令碼掃描,通常該類掃描用於準備基本的資訊,例如到第三伺服器查詢相關的DNS資訊。而指令碼掃描,是使用NSE指令碼來掃描目標主機,這是最核心的掃描方式。後掃描,是整個掃描結束後,做一些善後處理的指令碼,比如優化整理某些掃描。
在main()函式中核心操作由run函式負責。而run()函式的本身設計用於執行所有同一級別的指令碼(根據依賴關係劃分的級別),直到所有執行緒執行完畢才退出。run()函式中實現三個佇列:執行佇列(Running Queue)、等待佇列(Waiting Queue)、掛起佇列(Pending Queue),並管理三個佇列中執行緒的切換,直到全部佇列為空或出錯而退出。

Nmap基本語法:
–格式:
Nmap [ <掃描型別> …… ] [ <選項> ] { <掃描目標說明> }
–具體型別詳解:

    -sT: TCP connect()掃描,這是最基本的TCP掃描方式。connect()是一種系統呼叫,由作業系統提供,用來開啟一個tcp連線。如果目標埠有程式監聽, connect()就會成功返回,否則這個埠是不可達的。這項技術最大的優點是,不需要root許可權。任何UNIX使用者都可以自由使用這個系統呼叫。

    -sS: TCP同步掃描(TCP SYN):因為不必全部開啟一個TCP連線,所以這項技術通常稱為半開掃描(half-open)。使用者發出一個TCP同步包(SYN),然後等待回應。如果對方返回SYN|ACK(響應)包就表示目標埠正在監聽;如果返回RST資料包,就表示目標埠沒有監聽程式;如果收到一個SYN|ACK包,源主機就會馬上發出一個RST(復位)資料包斷開和目標主機的連線,這實際上有我們的作業系統核心自動完成的。這項技術最大的好處是,很少有系統能夠把這記入系統日誌。不過,使用者需要root許可權來定製SYN資料包。

    -sF -sX -sN:TCP FIN掃描、TCP XMAS掃描和TCP Null掃描都屬於祕密掃描,在SYN掃描無法確定的情況下,可以判斷埠狀態。關閉狀態的埠對使用者的探測包回應RST包,開啟狀態的埠會忽略探測包,所以可根據返回結果判斷埠是否開啟。雖然掃描方法對Windows95/NT無效,但可以使用此特性來判斷目標主機是windows還是Unix。 

    -sP: Nmap進行ping掃描,用於判斷主機是否存活。向指定的網路內的每個IP地址發ICMP echo請求資料包,根據伺服器是否做出響應,判斷主機狀態。但有一些網站會阻塞ICMP echo請求資料包。Nmap在任何情況下都會進行ping掃描,只有目標主機處於執行狀態,才會進行後續的掃描。

    -sU: UDP掃描,用於掃描目標機上的UDP埠。Nmap首先向目標主機的每個埠發出一個0位元組的UDP包,如果我們收到埠不可達的ICMP訊息,埠就是關閉的,否則我們就假設它是開啟的。但是UDP掃描有時非常緩慢,因為大多數主機限制ICMP錯誤資訊的比例。例如,在Linux核心中 (在net/ipv4/icmp.h檔案中)限制每4秒鐘只能出現80條目標不可達的ICMP訊息,如果超過這個比例,就會給1/4秒鐘的處罰。 solaris的限制更加嚴格,每秒鐘只允許出現大約2條ICMP不可達訊息,這樣,使掃描更加緩慢。Nmap會檢測這個限制的比例,減緩傳送速度,而不是傳送大量的將被目標主機丟棄的無用資料包。

    -sA: TCP ACK掃描,這項高階的掃描方法通常用來穿過防火牆的規則集。通常情況下,這有助於確定一個防火牆是功能比較完善的或者是一個簡單的包過濾程式。這種掃描是向特定的埠傳送ACK包(使用隨機的應答/序列號)。如果返回一個RST包,這個埠就標記為unfiltered狀態。如果什麼都沒有返回,或者返回一個不可達ICMP訊息,這個埠就歸入filtered類。注意,Nmap通常不輸出unfiltered的埠,所以在輸出中通常不顯示所有被探測的埠。顯然,這種掃描方式不能找出處於開啟狀態的埠。因此僅僅只能作為一個輔助手段。

    -sW:對滑動視窗的掃描,這項高階掃描技術非常類似於ACK掃描,除了它有時可以檢測到處於開啟狀態的埠,因為滑動視窗的大小是不規則的,有些作業系統可以報告其大小。這些系統至少包括:某些版本的AIX、Amiga、BeOS、BSDI、Cray、Tru64 UNIX、DG/UX、OpenVMS、Digital UNIX、OpenBSD、OpenStep、QNX、Rhapsody、SunOS 4.x、Ultrix、VAX、VXWORKS。

    -sR: RPC掃描,此方法通常與Nmap的其他不同埠掃描方法結合使用。選擇所有處於開啟狀態的埠向它們發出SunRPC程式的NULL命令,以確定它們是否是RPC埠,如果是,就確定是哪種軟體及其版本號。

    -b:  FTP反彈攻擊,FTP協議中支援代理FTP連線。使用這個特徵,可以在一臺代理FTP伺服器掃描TCP埠。因此,使用者需要連線到防火牆後面的一臺FTP伺服器,接著進行埠掃描。如果在這臺FTP伺服器中有可讀寫的目錄,使用者還可以向目標埠任意傳送資料。

    -o:  這個選項啟用對TCP/IP指紋特徵(fingerprinting)的掃描,獲得遠端主機的標誌。換句話說,Nmap使用一些技術檢測目標主機作業系統網路協議棧的特徵。Nmap使用這些資訊建立遠端主機的指紋特徵,把它和已知的作業系統指紋特徵資料庫做比較,就可以知道目標主機作業系統的型別。

    -T:  用於調整探測時間,設定Nmap的適時策略。Paranoid:為了避開IDS的檢測使掃描速度極慢,Nmap序列所有的掃描,每隔至少5分鐘傳送一個包; Sneaky:也差不多,只是資料包的傳送間隔是15秒;Polite:不增加太大的網路負載,避免宕掉目標主機,序列每個探測,並且使每個探測有0.4 秒種的間隔;Normal:nmap預設的選項,在不是網路過載或者主機/埠丟失的情況下儘可能快速地掃描;Aggressive:設定5分鐘的超時限制,使對每臺主機的掃描時間不超過5分鐘,並且使對每次探測回應的等待時間不超過1.5秒鐘;Insane:只適合快速的網路或者你不在意丟失某些資訊,每臺主機的超時限制是75秒,對每次探測只等待0.3秒鐘。你也可是使用數字來代替這些模式,例如:-T 0等於-T Paranoid,-T 5等於-T Insane。

Nmap中可能的攻擊方式:

  1. 埠掃描攻擊:
    攻擊者發出埠號從0開始依次遞增的TCP SYN或UDP報文,如果收到了針對這個TCP報文的RST報文,或針對這個UDP報文的ICMP不可達報文,則說明這個埠沒有開放;相反,如果收到了針對這個TCP SYN報文的ACK報文,或者沒有接收到任何針對該UDP報文的ICMP報文,則說明該TCP埠是開放的,UDP埠可能開放。這樣繼續下去,便可以很容易的判斷出目標計算機開放了哪些TCP或UDP埠,然後針對埠的具體數字,進行下一步攻擊,這就是所謂的埠掃描攻擊。
  2. TCP SYN拒絕服務攻擊:
    攻擊者向目標計算機傳送一個TCP SYN報文;目標計算機收到這個報文後,建立TCP連線控制結構(TCB),並回應一個ACK,等待發起者的回應;而發起者始終不向目標計算機回應ACK報文,這樣導致目標計算機一致處於等待狀態。消耗系統服務資源。
  3. 分片IP報文攻擊:
    為了傳送一個大的IP報文,IP協議棧需要根據鏈路介面的MTU對該IP報文進行分片,通過填充適當的IP頭中的分片指示欄位,接收計算機可以很容易的把這些IP分片報文組裝起來。如果攻擊者給目標計算機只傳送一片分片報文,而不傳送所有的分片報文,這樣攻擊者計算機便會一直等待,這個過程會消耗掉一部分記憶體,以及一些IP協議棧的資料結構。這也是一種DOS攻擊
  4. 畸形報文攻擊:
    正常情況下,SYN標誌(連線請求標誌)和FIN標誌(連線拆除標誌)是不能同時出現在一個TCP報文中的。而且RFC也沒有規定IP協議棧如何處理這樣的畸形報文,因此,各個作業系統的協議棧在收到這樣的報文後的處理方式也不同,攻擊者就可以利用這個特徵,通過傳送SYN和FIN同時設定的報文,來判斷作業系統的型別,然後針對該作業系統,進行進一步的攻擊。
  5. NSE 指令碼攻擊:
    在Nmap目錄下存在一個用來儲存Nmap指令碼引擎擴充套件庫的 nselib資料夾和一個用來儲存指令碼擴充套件的Scripts資料夾。通常情況下可以使用 nmap –script 命令指定呼叫的指令碼,針對確定的注入點進行攻擊。省去了通過Metasploit進行漏洞利用繁瑣操作的時間。

Nmap的9個優點:

  1. 靈活。支援數十種不同的掃描方式,支援多種目標物件的掃描。
  2. 強大。Nmap可以用於掃描網際網路上大規模的計算機。
  3. 可移植。支援主流作業系統:Windows/Linux/Unix/MacOS等等;原始碼開放,方便移植。
  4. 簡單。提供預設的操作能覆蓋大部分功能,基本埠掃描nmap targetip,全面的掃描nmap –A targetip
  5. 自由。Nmap作為開源軟體,在GPL License的範圍內可以自由的使用。
  6. 文件豐富。Nmap官網提供了詳細的文件描述。Nmap作者及其他安全專家編寫了多部Nmap參考書籍。
  7. 社群支援。Nmap背後有強大的社群團隊支援。
  8. 讚譽有加。獲得很多的獎勵,並在很多影視作品中出現(如黑客帝國2、Die Hard4等)。
  9. 流行。目前Nmap已經被成千上萬的安全專家列為必備的工具之一

Zenmap與Nmap:
Zenmap是Nmap官方提供的圖形介面,通常隨Nmap的安裝包釋出。Zenmap是用Python語言編寫而成的開源免費的圖形介面,能夠執行在不同作業系統平臺上(Windows/Linux/Unix/Mac OS等)。Zenmap旨在為Nmap提供更加簡單的操作方式。簡單常用的操作命令可以儲存成為profile,使用者掃描時選擇profile即可;可以方便地比較不同的掃描結果;提供網路拓撲結構(NetworkTopology)的圖形顯示功能。

相關文章