nmap詳解之原理與用法

前言

nmap是一款開源免費的網絡發現(Network Discovery)和安全審計(Security Auditing)工具。軟件名字Nmap是Network Mapper的簡稱。Nmap最初是由Fyodor在1997年開始建立的。隨後在開源社區衆多的志願者參與下,該工具逐漸成爲最爲流行安全必備工具之一。最新版的Nmap6.0在2012年5月21日發佈,詳情請參見:www.nmap.org。html

通常狀況下,Nmap用於列舉網絡主機清單、管理服務升級調度、監控主機或服務運行情況。Nmap能夠檢測目標機是否在線、端口開放狀況、偵測運行的服務類型及版本信息、偵測操做系統與設備類型等信息。git

Nmap的優勢:github

  • 靈活:支持數十種不一樣的掃描方式,支持多種目標對象的掃描。
  • 強大:Nmap能夠用於掃描互聯網上大規模的計算機。
  • 可移植:支持主流操做系統:Windows/Linux/Unix/MacOS等等;源碼開放,方便移植。
  • 簡單:提供默認的操做能覆蓋大部分功能,基本端口掃描nmap targetip,全面的掃描nmap –A targetip。
  • 自由:Nmap做爲開源軟件,在GPL License的範圍內能夠自由的使用。
  • 文檔豐富:Nmap官網提供了詳細的文檔描述。Nmap做者及其餘安全專家編寫了多部Nmap參考書籍。
  • 社區支持:Nmap背後有強大的社區團隊支持。
  • 讚譽有加:得到不少的獎勵,並在不少影視做品中出現(如黑客帝國二、Die Hard4等)。
  • 流行:目前Nmap已經被成千上萬的安全專家列爲必備的工具之一。

 

Zenmap

  Zenmap是Nmap官方提供的圖形界面,一般隨Nmap的安裝包發佈。Zenmap是用Python語言編寫而成的開源免費的圖形界面,可以運行在不一樣操做系統平臺上(Windows/Linux/Unix/Mac OS等)。Zenmap旨在爲nmap提供更加簡單的操做方式。簡單經常使用的操做命令能夠保存成爲profile,用戶掃描時選擇profile便可;能夠方便地比較不一樣的掃描結果;提供網絡拓撲結構(NetworkTopology)的圖形顯示功能。
  其中Profile欄位,用於選擇「Zenmap默認提供的Profile」或「用戶建立的Profile」;Command欄位,用於顯示選擇Profile對應的命令或者用戶自行指定的命令;Topology選項卡,用於顯示掃描到的目標機與本機之間的拓撲結構。數據庫

 

功能架構圖

Nmap包含四項基本功能:編程

  1. 主機發現(Host Discovery)
  2. 端口掃描(Port Scanning)
  3. 版本偵測(Version Detection)
  4. 操做系統偵測(Operating System Detection)

而這四項功能之間,又存在大體的依賴關係(一般狀況下的順序關係,但特殊應用另外考慮),首先須要進行主機發現,隨後肯定端口情況,而後肯定端口上運行具體應用程序與版本信息,而後能夠進行操做系統的偵測。而在四項基本功能的基礎上,Nmap提供防火牆與IDS(IntrusionDetection System,入侵檢測系統)的規避技巧,能夠綜合應用到四個基本功能的各個階段;另外Nmap提供強大的NSE(Nmap Scripting Language)腳本引擎功能,腳本能夠對基本功能進行補充和擴展。
安全

 

Nmap基本掃描方法

Nmap主要包括四個方面的掃描功能,主機發現、端口掃描、應用與版本偵測、操做系統偵測。在詳細講解每一個具體功能以前,首先能夠看看Nmap的典型用法。服務器

用法引入

肯定端口情況

若是直接針對某臺計算的IP地址或域名進行掃描,那麼Nmap對該主機進行主機發現過程和端口掃描。該方式執行迅速,能夠用於肯定端口的開放情況。網絡

命令形式:架構

nmap targethost

能夠肯定目標主機在線狀況及端口基本情況app

 

完整全面的掃描

若是但願對某臺主機進行完整全面的掃描,那麼可使用nmap內置的-A選項。使用了改選項,nmap對目標主機進行主機發現、端口掃描、應用程序與版本偵測、操做系統偵測及調用默認NSE腳本掃描。

命令形式:

nmap –T4 –A –v targethost

其中-A選項用於使用進攻性(Aggressive)方式掃描;-T4指定掃描過程使用的時序(Timing),總有6個級別(0-5),級別越高,掃描速度越快,但也容易被防火牆或IDS檢測並屏蔽掉,在網絡通信情況良好的狀況推薦使用T4;-v表示顯示冗餘(verbosity)信息,在掃描過程當中顯示掃描的細節,從而讓用戶瞭解當前的掃描狀態。 
例如,掃描局域網內地址爲192.168.1.100的電腦。顯而易見,掃描出的信息很是豐富,在對192.168.1.100的掃描報告部分中(以紅框圈出),能夠看到主機發現的結果「Host is up」;端口掃描出的結果,有996個關閉端口,4個開放端口(在未指定掃描端口時,Nmap默認掃描1000個最有可能開放的端口);而版本偵測針對掃描到的開放情況進一步探測端口上運行的具體的應用程序和版本信息;OS偵測對該目標主機的設備類型與操做系統進行探測;而綠色框圖是nmap調用NSE腳本進行進一步的信息挖掘的顯示結果。

 

主機發現

主機發現(Host Discovery),即用於發現目標主機是否在線(Alive,處於開啓狀態)。

 

主機發現原理

主機發現發現的原理與Ping命令相似,發送探測包到目標主機,若是收到回覆,那麼說明目標主機是開啓的。Nmap支持十多種不一樣的主機探測方式,好比發送ICMP ECHO/TIMESTAMP/NETMASK報文、發送TCPSYN/ACK包、發送SCTP INIT/COOKIE-ECHO包,用戶能夠在不一樣的條件下靈活選用不一樣的方式來探測目標機。

主機發現基本原理:(以ICMP echo方式爲例) 

 


Nmap的用戶位於源端,IP地址192.168.0.5,向目標主機192.168.0.3發送ICMP Echo Request。若是該請求報文沒有被防火牆攔截掉,那麼目標機會回覆ICMP Echo Reply包回來。以此來肯定目標主機是否在線。

默認狀況下,Nmap會發送四種不一樣類型的數據包來探測目標主機是否在線。

  1. ICMP echo request
  2. a TCP SYN packet to port 443
  3. a TCP ACK packet to port 80
  4. an ICMP timestamp request

依次發送四個報文探測目標機是否開啓。只要收到其中一個包的回覆,那就證實目標機開啓。使用四種不一樣類型的數據包能夠避免因防火牆或丟包形成的判斷錯誤。

 

主機發現的用法

一般主機發現並不單獨使用,而只是做爲端口掃描、版本偵測、OS偵測先行步驟。而在某些特殊應用(例如肯定大型局域網內活動主機的數量),可能會單獨專門適用主機發現功能來完成。

無論是做爲輔助用法仍是專門用途,用戶均可以使用Nmap提供的豐富的選項來定製主機發現的探測方式。

-sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現。 -sn: Ping Scan 只進行主機發現,不進行端口掃描。 -Pn: 將全部指定的主機視做開啓的,跳過主機發現的過程。 -PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式進行發現。 -PE/PP/PM: 使用ICMP echo, timestamp, and netmask 請求包發現主機。-PO[protocollist]: 使用IP協議包探測對方主機是否開啓。 -n/-R: -n表示不進行DNS解析;-R表示老是進行DNS解析。 --dns-servers : 指定DNS服務器。 --system-dns: 指定使用系統的DNS服務器 --traceroute: 追蹤每一個路由節點  

 

注意說明

-sn: Ping Scan 只進行主機發現,不進行端口掃描。 -Pn: 將全部指定的主機視做開啓的,跳過主機發現的過程。 -PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式進行發現。 -PE/PP/PM: 使用ICMP echo, timestamp, and netmask 請求包發現主機。-PO[protocollist]: 使用IP協議包探測對方主機是否開啓。 -n/-R: -n表示不進行DNS解析;-R表示老是進行DNS解析。 --dns-servers <serv1[,serv2],...>: 指定DNS服務器。 --system-dns: 指定使用系統的DNS服務器 --traceroute: 追蹤每一個路由節點其中,比較經常使用的使用的是-sn,表示只單獨進行主機發現過程;-Pn表示直接跳過主機發現而進行端口掃描等高級操做(若是已經確知目標主機已經開啓,可用該選項);-n,若是不想使用DNS或reverse DNS解析,那麼可使用該選項。

 

使用演示

下面以探測scanme.nmap.org 的主機爲例,簡單演示主機發現的用法。

命令以下:

nmap –sn –PE –PS80,135 –PU53 scanme.nmap.org 

 

使用Wireshark抓包,咱們看到,scanme.nmap.org 的IP地址182.140.147.57發送了四個探測包:ICMPEcho,80和135端口的TCP SYN包,53端口的UDP包(DNS domain)。而收到ICMP Echo的回覆與80端口的回覆。從而肯定了scanme.nmap.org主機正常在線。 

 

 

探測局域網內活動主機

掃描局域網192.168.1.100-192.168.1.120範圍內哪些IP的主機是活動的

命令以下:

nmap –sn 192.168.1.100-120 

 

從結果中,能夠看到這個IP範圍內有三臺主機處於活動狀態。

從Wireshark抓取的包中,能夠看到發送的探測包的狀況:

在局域網內,Nmap是經過ARP包來詢問IP地址上的主機是否活動的,若是收到ARP回覆包,那麼說明主機在線。

例如,某條ARP回覆的報文詳細信息以下:

 

端口掃描

端口掃描是Nmap最基本最核心的功能,用於肯定目標主機的TCP/UDP端口的開放狀況。

默認狀況下,Nmap會掃描1000個最有可能開放的TCP端口。

Nmap經過探測將端口劃分爲6個狀態:

  • open:端口是開放的。
  • closed:端口是關閉的。
  • filtered:端口被防火牆IDS/IPS屏蔽,沒法肯定其狀態。
  • unfiltered:端口沒有被屏蔽,可是否開放須要進一步肯定。
  • open|filtered:端口是開放的或被屏蔽。
  • closed|filtered :端口是關閉的或被屏蔽。

 

端口掃描原理

Nmap在端口掃描方面很是強大,提供了十多種探測方式。

 

TCP SYN scanning

這是Nmap默認的掃描方式,一般被稱做半開放掃描(Half-open scanning)。該方式發送SYN到目標端口,若是收到SYN/ACK回覆,那麼判斷端口是開放的;若是收到RST包,說明該端口是關閉的。若是沒有收到回覆,那麼判斷該端口被屏蔽(Filtered)。由於該方式僅發送SYN包對目標主機的特定端口,但不創建的完整的TCP鏈接,因此相對比較隱蔽,並且效率比較高,適用範圍廣。

TCP SYN探測到端口關閉:

 

TCP SYN探測到端口開放:

 

TCP connect scanning

TCP connect方式使用系統網絡API connect向目標主機的端口發起鏈接,若是沒法鏈接,說明該端口關閉。該方式掃描速度比較慢,並且因爲創建完整的TCP鏈接會在目標機上留下記錄信息,不夠隱蔽。因此,TCP connect是TCP SYN沒法使用才考慮選擇的方式。

TCP connect探測到端口關閉:

 

TCP connect探測到端口開放:

 

TCP ACK scanning

向目標主機的端口發送ACK包,若是收到RST包,說明該端口沒有被防火牆屏蔽;沒有收到RST包,說明被屏蔽。該方式只能用於肯定防火牆是否屏蔽某個端口,能夠輔助TCP SYN的方式來判斷目標主機防火牆的情況。

TCP ACK探測到端口被屏蔽:

 

TCP ACK探測到端口未被屏蔽:

 

TCP FIN/Xmas/NULL scanning

這三種掃描方式被稱爲祕密掃描(Stealthy Scan),由於相對比較隱蔽。FIN掃描向目標主機的端口發送的TCP FIN包或Xmas tree包/Null包,若是收到對方RST回覆包,那麼說明該端口是關閉的;沒有收到RST包說明端口多是開放的或被屏蔽的(open|filtered)。

其中Xmas tree包是指flags中FIN URG PUSH被置爲1的TCP包;NULL包是指全部flags都爲0的TCP包。

TCP FIN探測到主機端口是關閉的:

 

TCP FIN探測到主機端口是開放或屏蔽的:

 

UDP scanning

UDP掃描方式用於判斷UDP端口的狀況。向目標主機的UDP端口發送探測包,若是收到回覆「ICMP port unreachable」就說明該端口是關閉的;若是沒有收到回覆,那說明UDP端口多是開放的或屏蔽的。所以,經過反向排除法的方式來判定哪些UDP端口是可能出於開放狀態。

UDP端口關閉:

 

UDP端口開放或被屏蔽:

 

其餘方式

除上述幾種經常使用的方式以外,Nmap還支持多種其餘探測方式。例如使用SCTP INIT/COOKIE-ECHO方式來探測SCTP的端口開放狀況;使用IP protocol方式來探測目標主機支持的協議類型(TCP/UDP/ICMP/SCTP等等);使用idle scan方式藉助殭屍主機(zombie host,也被稱爲idle host,該主機處於空閒狀態而且它的IPID方式爲遞增。詳細實現原理參見:http://nmap.org/book/idlescan.html)來掃描目標在主機,達到隱蔽本身的目的;或者使用FTP bounce scan,藉助FTP容許的代理服務掃描其餘的主機,一樣達到隱藏本身的身份的目的。

端口掃描用法

端口掃描用法比較簡單,Nmap提供豐富的命令行參數來指定掃描方式和掃描端口。具體能夠參見以下描述。

 

掃描方式選項

-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式來對目標主機進行掃描。 -sU: 指定使用UDP掃描方式肯定目標主機的UDP端口情況。 -sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans祕密掃描方式來協助探測對方的TCP端口狀態。 --scanflags <flags>: 定製TCP包的flags。 -sI <zombiehost[:probeport]>: 指定使用idle scan方式來掃描目標主機(前提須要找到合適的zombie host) -sY/sZ: 使用SCTP INIT/COOKIE-ECHO來掃描SCTP協議端口的開放的狀況。 -sO: 使用IP protocol 掃描肯定目標機支持的協議類型。 -b <FTP relay host>: 使用FTP bounce scan掃描方式

 

端口參數與掃描順序

-p <port ranges>: 掃描指定的端口 -F: Fast mode – 快速模式,僅掃描TOP 100的端口 -r: 不進行端口隨機打亂的操做(如無該參數,nmap會將要掃描的端口以隨機順序方式掃描,以讓nmap的掃描不易被對方防火牆檢測到)。 --top-ports <number>:掃描開放機率最高的number個端口(nmap的做者曾經作過大規模地互聯網掃描,以此統計出網絡上各類端口可能開放的機率。以此排列出最有可能開放端口的列表,具體能夠參見文件:nmap-services。默認狀況下,nmap會掃描最有可能的1000個TCP端口) --port-ratio <ratio>: 掃描指定頻率以上的端口。與上述--top-ports相似,這裏以機率做爲參數,讓機率大於--port-ratio的端口才被掃描。顯然參數必須在在0到1之間,具體範圍機率狀況能夠查看nmap-services文件。

 

實例

-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T表明TCP協議、U表明UDP協議、S表明SCTP協議)

 

端口掃描演示

這裏,咱們以掃描局域網內192.168.1.100主機爲例。命令以下:

nmap –sS –sU –T4 –top-ports 300 192.168.1.100

 

參數-sS表示使用TCP SYN方式掃描TCP端口;-sU表示掃描UDP端口;-T4表示時間級別配置4級;--top-ports 300表示掃描最有可能開放的300個端口(TCP和UDP分別有300個端口)。

從上圖中,咱們看到掃描結果,橫線處寫明有共有589端口是關閉的;紅色框圖中列舉出開放的端口和多是開放的端口。

 

版本偵測

版本偵測,用於肯定目標主機開放端口上運行的具體的應用程序及版本信息。

Nmap提供的版本偵測具備以下的優勢:

  • 高速。並行地進行套接字操做,實現一組高效的探測匹配定義語法。
  • 儘量地肯定應用名字與版本名字。
  • 支持TCP/UDP協議,支持文本格式與二進制格式。
  • 支持多種平臺服務的偵測,包括Linux/Windows/Mac OS/FreeBSD等系統。
  • 若是檢測到SSL,會調用openSSL繼續偵測運行在SSL上的具體協議(如HTTPS/POP3S/IMAPS)。
  • 若是檢測到SunRPC服務,那麼會調用brute-force RPC grinder進一步肯定RPC程序編號、名字、版本號。
  • 支持完整的IPv6功能,包括TCP/UDP,基於TCP的SSL。
  • 通用平臺枚舉功能(CPE)
  • 普遍的應用程序數據庫(nmap-services-probes)。目前Nmap能夠識別幾千種服務的簽名,包含了180多種不一樣的協議。

 

版本偵測原理

簡要的介紹版本的偵測原理。版本偵測主要分爲如下幾個步驟:

  1. 首先檢查open與open|filtered狀態的端口是否在排除端口列表內。若是在排除列表,將該端口剔除。
  2. 若是是TCP端口,嘗試創建TCP鏈接。嘗試等待片刻(一般6秒或更多,具體時間能夠查詢文件nmap-services-probes中Probe TCP NULL q||對應的totalwaitms)。一般在等待時間內,會接收到目標機發送的「WelcomeBanner」信息。nmap將接收到的Banner與nmap-services-probes中NULL probe中的簽名進行對比。查找對應應用程序的名字與版本信息。
  3. 若是經過「Welcome Banner」沒法肯定應用程序版本,那麼nmap再嘗試發送其餘的探測包(即從nmap-services-probes中挑選合適的probe),將probe獲得回覆包與數據庫中的簽名進行對比。若是反覆探測都沒法得出具體應用,那麼打印出應用返回報文,讓用戶自行進一步斷定。
  4. 若是是UDP端口,那麼直接使用nmap-services-probes中探測包進行探測匹配。根據結果對比分析出UDP應用服務類型。
  5. 若是探測到應用程序是SSL,那麼調用openSSL進一步的偵查運行在SSL之上的具體的應用類型。
  6. 若是探測到應用程序是SunRPC,那麼調用brute-force RPC grinder進一步探測具體服務。

 

版本偵測的用法

版本偵測方面的命令行選項比較簡單

-sV: 指定讓Nmap進行版本偵測 --version-intensity <level>: 指定版本偵測強度(0-9),默認爲7。數值越高,探測出的服務越準確,可是運行時間會比較長。 --version-light: 指定使用輕量偵測方式 (intensity 2) --version-all: 嘗試使用全部的probes進行偵測 (intensity 9) --version-trace: 顯示出詳細的版本偵測過程信息。

 

版本偵測演示

nmap –sV 192.168.1.100

 

對主機192.168.1.100進行版本偵測。

從結果中,咱們能夠看到996個端口是關閉狀態,對於4個open的端口進行版本偵測。圖中紅色爲版本信息。紅色線條劃出部分是版本偵測獲得的附加信息,由於從應用中檢測到微軟特定的應用服務,因此推斷出對方運行的Windows的操做系統。

 

OS偵測

操做系統偵測用於檢測目標主機運行的操做系統類型及設備類型等信息。Nmap擁有豐富的系統數據庫nmap-os-db,目前能夠識別2600多種操做系統與設備類型。

 

OS偵測原理

Nmap使用TCP/IP協議棧指紋來識別不一樣的操做系統和設備。在RFC規範中,有些地方對TCP/IP的實現並無強制規定,由此不一樣的TCP/IP方案中可能都有本身的特定方式。Nmap主要是根據這些細節上的差別來判斷操做系統的類型的。

具體實現方式以下:

  1. Nmap內部包含了2600多已知系統的指紋特徵(在文件nmap-os-db文件中)。將此指紋數據庫做爲進行指紋對比的樣本庫。
  2. 分別挑選一個open和closed的端口,向其發送通過精心設計的TCP/UDP/ICMP數據包,根據返回的數據包生成一份系統指紋。
  3. 將探測生成的指紋與nmap-os-db中指紋進行對比,查找匹配的系統。若是沒法匹配,以機率形式列舉出可能的系統。

OS偵測用法

OS偵測的用法簡單,Nmap提供的命令比較少。

-O: 指定Nmap進行OS偵測。 --osscan-limit: 限制Nmap只對肯定的主機的進行OS探測(至少需確知該主機分別有一個open和closed的端口)。 --osscan-guess: 大膽猜想對方的主機的系統類型。由此準確性會降低很多,但會盡量多爲用戶提供潛在的操做系統。

OS偵測演示

nmap –O 192.168.1.100

從上圖中可看到,指定-O選項後先進行主機發現與端口掃描,根據掃描到端口來進行進一步的OS偵測。獲取的結果信息有設備類型,操做系統類型,操做系統的CPE描述,操做系統細節,網絡距離等。

 

Nmap高級用法

防火牆/IDS規避

防火牆與IDS規避爲用於繞開防火牆與IDS(入侵檢測系統)的檢測與屏蔽,以便可以更加詳細地發現目標主機的情況。Nmap提供了多種規避技巧,一般能夠從兩個方面考慮規避方式:數據包的變換(Packet Change)與時序變換(Timing Change)。

 

規避原理

分片(Fragmentation)

將可疑的探測包進行分片處理(例如將TCP包拆分紅多個IP包發送過去),某些簡單的防火牆爲了加快處理速度可能不會進行重組檢查,以此避開其檢查。

IP誘騙(IP decoys)

在進行掃描時,將真實IP地址和其餘主機的IP地址(其餘主機須要在線,不然目標主機將回復大量數據包到不存在的主機,從而實質構成了拒絕服務攻擊)混合使用,以此讓目標主機的防火牆或IDS追蹤檢查大量的不一樣IP地址的數據包,下降其追查到自身的機率。注意,某些高級的IDS系統經過統計分析仍然能夠追蹤出掃描者真實IP地址。

IP假裝(IP Spoofing)

顧名思義,IP假裝即將本身發送的數據包中的IP地址假裝成其餘主機的地址,從而目標機認爲是其餘主機在與之通訊。須要注意,若是但願接收到目標主機的回覆包,那麼假裝的IP須要位於統一局域網內。另外,若是既但願隱蔽本身的IP地址,又但願收到目標主機的回覆包,那麼能夠嘗試使用idle scan或匿名代理(如TOR)等網絡技術。

指定源端口

某些目標主機只容許來自特定端口的數據包經過防火牆。例如FTP服務器配置爲:容許源端口爲21號的TCP包經過防火牆與FTP服務端通訊,可是源端口爲其餘端口的數據包被屏蔽。因此,在此類狀況下,能夠指定Nmap將發送的數據包的源端口都設置特定的端口。

掃描延時

某些防火牆針對發送過於頻繁的數據包會進行嚴格的偵查,並且某些系統限制錯誤報文產生的頻率(例如,Solaris 系統一般會限制每秒鐘只能產生一個ICMP消息回覆給UDP掃描),因此,定製該狀況下發包的頻率和發包延時能夠下降目標主機的審查強度、節省網絡帶寬。

其餘技術

Nmap還提供多種規避技巧,好比指定使用某個網絡接口來發送數據包、指定發送包的最小長度、指定發包的MTU、指定TTL、指定假裝的MAC地址、使用錯誤檢查和(badchecksum)。

更多信息http://nmap.org/book/man-bypass-firewalls-ids.html

 

規避用法

-f; --mtu <val>: 指定使用分片、指定數據包的MTU. -D <decoy1,decoy2[,ME],...>: 用一組IP地址掩蓋真實地址,其中ME填入本身的IP地址。 -S <IP_Address>: 假裝成其餘IP地址 -e <iface>: 使用特定的網絡接口 -g/--source-port <portnum>: 使用指定源端口 --data-length <num>: 填充隨機數據讓數據包長度達到Num。 --ip-options <options>: 使用指定的IP選項來發送數據包。 --ttl <val>: 設置time-to-live時間。 --spoof-mac <mac address/prefix/vendor name>: 假裝MAC地址 --badsum: 使用錯誤的checksum來發送數據包(正常狀況下,該類數據包被拋棄,若是收到回覆,說明回覆來自防火牆或IDS/IPS)。

 

規避演示

nmap -v -F -Pn -D192.168.1.100,192.168.1.102,ME -e eth0 -g 3355 192.168.1.1

其中,-F表示快速掃描100個端口;-Pn表示不進行Ping掃描;-D表示使用IP誘騙方式掩蓋本身真實IP(其中ME表示本身IP);-e eth0表示使用eth0網卡發送該數據包;-g 3355表示本身的源端口使用3355;192.168.1.1是被掃描的目標IP地址。

咱們能夠從Wireshark中看到數據包的流動狀況:對於每一個探測包,Nmap都使用-D選項指定的IP地址發送不一樣的數據包,從而達到擾亂對方防火牆/IDS檢查的目的(更好的方式-D選項中嵌入RND隨機數,這樣更具備迷惑性)。當探測到80端口時候,目標主機向咱們回覆了SYN/ACK包回來(固然也向其餘誘騙的IP回覆SYN/ACK包,咱們沒法接收到),證實80端口是開放的。

NSE腳本引擎

NSE腳本引擎(Nmap Scripting Engine)是Nmap最強大最靈活的功能之一,容許用戶本身編寫腳原本執行自動化的操做或者擴展Nmap的功能。

NSE使用Lua腳本語言,而且默認提供了豐富的腳本庫,目前已經包含14個類別的350多個腳本。

NSE的設計初衷主要考慮如下幾個方面:

  • 網絡發現(Network Discovery)
  • 更加複雜的版本偵測(例如skype軟件)
  • 漏洞偵測(Vulnerability Detection)
  • 後門偵測(Backdoor Detection)
  • 漏洞利用(Vulnerability Exploitation)

NSE建立腳本方法

下面以daytime.nse腳本爲例說明一下NSE格式。

NSE的使用Lua腳本,而且配置固定格式,以減輕用戶編程負擔。一般的一個腳本分爲幾個部分:

description字段:描述腳本功能的字符串,使用雙層方括號表示。 comment字段:以--開頭的行,描述腳本輸出格式 author字段:描述腳本做者 license字段:描述腳本使用許可證,一般配置爲Nmap相同的license categories字段:描述腳本所屬的類別,以對腳本的調用進行管理。 rule字段:描述腳本執行的規則,也就是肯定觸發腳本執行的條件。在Nmap中有四種類型的規則,prerule用於在Nmap沒有執行掃描以前觸發腳本執行,這類腳本並不需用到任何Nmap掃描的結果;hostrule用在Nmap執行完畢主機發現後觸發的腳本,根據主機發現的結果來觸發該類腳本;portrule用於Nmap執行端口掃描或版本偵測時觸發的腳本,例如檢測到某個端口時觸發某個腳本執行以完成更詳細的偵查。postrule用於Nmap執行完畢全部的掃描後,一般用於掃描結果的數據提取和整理。在上述實例中,只有一個portrule,說明該腳本在執行端口掃描後,若檢測到TCP 13號端口開放,那麼觸發該腳本的執行。 action字段:腳本執行的具體內容。當腳本經過rule字段的檢查被觸發執行時,就會調用action字段定義的函數。

 

NSE腳本用法

Nmap提供很多腳本使用的命令行參數。

-sC: 等價於 --script=default,使用默認類別的腳本進行掃描。 --script=<Lua scripts>: <Lua scripts>使用某個或某類腳本進行掃描,支持通配符描述 --script-args=<n1=v1,[n2=v2,...]>: 爲腳本提供默認參數 --script-args-file=filename: 使用文件來爲腳本提供參數 --script-trace: 顯示腳本執行過程當中發送與接收的數據 --script-updatedb: 更新腳本數據庫 --script-help=<Lua scripts>: 顯示腳本的幫助信息,其中<Luascripts>部分能夠逗號分隔的文件或腳本類別。

 

NSE用法演示

配合腳本掃描192.168.1.1,查看可否得到有用的信息。

nmap –sV –p 80 –v –script default,http*192.168.1.1

從上圖中,咱們能夠看到Nmap掃描到對方80端口是開放的,而後使用了大量的名字爲http開頭的腳本對其進行掃描。掃描過程發如今http-auth腳本執行,出現了「Basic relm=TP-LINK Wireless N router WR740」字樣(紅線劃出部分),這裏已經挖掘對方的設備類型與具體版本信息。若是咱們知道更多關於WR740已知的漏洞,那麼就能夠進行更進一步的滲透測試了。

參考資料

書籍

Nmap Network Scanning

Nmap創始人Fyodor編寫的Nmap的權威指南,很是詳盡地描述Nmap的實現原理及使用方法。Nmap官方文檔正是來自該書部分章節。

Secrets of Network Cartography

該書對Nmap的實現原理及使用場景有比較豐富的介紹。

Nmap in the Enterprise: Your Guide to Network Scanning

這本書描述Nmap在企業領域的運用。

Nmap mindmap.pdf

這nmap使用方法的思惟導圖(一頁紙的圖片),對Nmap用法整理很完整。

 

網站

官網:www.nmap.org

安全工具排名:http://sectools.org/

相關文章
相關標籤/搜索