Nmap掃描原理與用法
Nmap掃描原理與用法
2012年6月16日
1 Nmap介紹
Nmap掃描原理與用法PDF:下載地址
Nmap是一款開源免費的網絡發現(Network Discovery)和安全審計(Security Auditing)工具。軟件名字Nmap是Network Mapper的簡稱。Nmap最初是由Fyodor在1997年開始創建的。隨後在開源社區眾多的誌願者參與下,該工具逐漸成為最為流行安全必備工具之一。最新版的Nmap6.0在2012年5月21日發布,詳情請參見:www.nmap.org。
一般情況下,Nmap用於列舉網絡主機清單、管理服務升級調度、監控主機或服務運行狀況。Nmap可以檢測目標機是否在線、端口開放情況、偵測運行的服務類型及版本信息、偵測操作系統與設備類型等信息。
Nmap的優點:
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已經被成千上萬的安全專家列為必備的工具之一。
1.1 Zenmap
Zenmap是Nmap官方提供的圖形界面,通常隨Nmap的安裝包發布。Zenmap是用Python語言編寫而成的開源免費的圖形界面,能夠運行在不同操作系統平臺上(Windows/Linux/Unix/Mac OS等)。Zenmap旨在為nmap提供更加簡單的操作方式。簡單常用的操作命令可以保存成為profile,用戶掃描時選擇profile即可;可以方便地比較不同的掃描結果;提供網絡拓撲結構(NetworkTopology)的圖形顯示功能。
其中Profile欄位,用於選擇“Zenmap默認提供的Profile”或“用戶創建的Profile”;Command欄位,用於顯示選擇Profile對應的命令或者用戶自行指定的命令;Topology選項卡,用於顯示掃描到的目標機與本機之間的拓撲結構。
1.2 功能架構圖
Nmap包含四項基本功能:
- 主機發現(Host Discovery)
- 端口掃描(Port Scanning)
- 版本偵測(Version Detection)
- 操作系統偵測(Operating System Detection)
而這四項功能之間,又存在大致的依賴關系(通常情況下的順序關系,但特殊應用另外考慮),首先需要進行主機發現,隨後確定端口狀況,然後確定端口上運行具體應用程序與版本信息,然後可以進行操作系統的偵測。而在四項基本功能的基礎上,Nmap提供防火墻與IDS(IntrusionDetection System,入侵檢測系統)的規避技巧,可以綜合應用到四個基本功能的各個階段;另外Nmap提供強大的NSE(Nmap Scripting Language)腳本引擎功能,腳本可以對基本功能進行補充和擴展。
2 Nmap基本掃描方法
Nmap主要包括四個方面的掃描功能,主機發現、端口掃描、應用與版本偵測、操作系統偵測。在詳細講解每個具體功能之前,首先可以看看Nmap的典型用法。
2.1 用法引入
2.1.1 確定端口狀況
如果直接針對某臺計算的IP地址或域名進行掃描,那麽Nmap對該主機進行主機發現過程和端口掃描。該方式執行迅速,可以用於確定端口的開放狀況。
命令形式:
nmap targethost
可以確定目標主機在線情況及端口基本狀況。
2.1.2 完整全面的掃描
如果希望對某臺主機進行完整全面的掃描,那麽可以使用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腳本進行進一步的信息挖掘的顯示結果。
2.2 主機發現
主機發現(Host Discovery),即用於發現目標主機是否在線(Alive,處於開啟狀態)。
2.2.1 主機發現原理
主機發現發現的原理與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
依次發送四個報文探測目標機是否開啟。只要收到其中一個包的回復,那就證明目標機開啟。使用四種不同類型的數據包可以避免因防火墻或丟包造成的判斷錯誤。
2.2.2 主機發現的用法
通常主機發現並不單獨使用,而只是作為端口掃描、版本偵測、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 <serv1[,serv2],...>: 指定DNS服務器。
- --system-dns: 指定使用系統的DNS服務器
- --traceroute: 追蹤每個路由節點
其中,比較常用的使用的是-sn,表示只單獨進行主機發現過程;-Pn表示直接跳過主機發現而進行端口掃描等高級操作(如果已經確知目標主機已經開啟,可用該選項);-n,如果不想使用DNS或reverse DNS解析,那麽可以使用該選項。
2.2.3 使用演示
探測scanme.nmap.org
下面以探測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回復的報文詳細信息如下:
2.3 端口掃描
端口掃描是Nmap最基本最核心的功能,用於確定目標主機的TCP/UDP端口的開放情況。
默認情況下,Nmap會掃描1000個最有可能開放的TCP端口。
Nmap通過探測將端口劃分為6個狀態:
- open:端口是開放的。
- closed:端口是關閉的。
- filtered:端口被防火墻IDS/IPS屏蔽,無法確定其狀態。
- unfiltered:端口沒有被屏蔽,但是否開放需要進一步確定。
- open|filtered:端口是開放的或被屏蔽。
- closed|filtered :端口是關閉的或被屏蔽。
2.3.1 端口掃描原理
Nmap在端口掃描方面非常強大,提供了十多種探測方式。
2.3.1.1 TCP SYN scanning
這是Nmap默認的掃描方式,通常被稱作半開放掃描(Half-open scanning)。該方式發送SYN到目標端口,如果收到SYN/ACK回復,那麽判斷端口是開放的;如果收到RST包,說明該端口是關閉的。如果沒有收到回復,那麽判斷該端口被屏蔽(Filtered)。因為該方式僅發送SYN包對目標主機的特定端口,但不建立的完整的TCP連接,所以相對比較隱蔽,而且效率比較高,適用範圍廣。
TCP SYN探測到端口關閉:
TCP SYN探測到端口開放:
2.3.1.2 TCP connect scanning
TCP connect方式使用系統網絡API connect向目標主機的端口發起連接,如果無法連接,說明該端口關閉。該方式掃描速度比較慢,而且由於建立完整的TCP連接會在目標機上留下記錄信息,不夠隱蔽。所以,TCP connect是TCP SYN無法使用才考慮選擇的方式。
TCP connect探測到端口關閉:
TCP connect探測到端口開放:
2.3.1.3 TCP ACK scanning
向目標主機的端口發送ACK包,如果收到RST包,說明該端口沒有被防火墻屏蔽;沒有收到RST包,說明被屏蔽。該方式只能用於確定防火墻是否屏蔽某個端口,可以輔助TCP SYN的方式來判斷目標主機防火墻的狀況。
TCP ACK探測到端口被屏蔽:
TCP ACK探測到端口未被屏蔽:
2.3.1.4 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探測到主機端口是開放或屏蔽的:
2.3.1.5 UDP scanning
UDP掃描方式用於判斷UDP端口的情況。向目標主機的UDP端口發送探測包,如果收到回復“ICMP port unreachable”就說明該端口是關閉的;如果沒有收到回復,那說明UDP端口可能是開放的或屏蔽的。因此,通過反向排除法的方式來斷定哪些UDP端口是可能出於開放狀態。
UDP端口關閉:
UDP端口開放或被屏蔽:
2.3.1.6 其他方式
除上述幾種常用的方式之外,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允許的代理服務掃描其他的主機,同樣達到隱藏自己的身份的目的。
2.3.2 端口掃描用法
端口掃描用法比較簡單,Nmap提供豐富的命令行參數來指定掃描方式和掃描端口。
具體可以參見如下描述。
2.3.2.1 掃描方式選項
- -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掃描方式
2.3.2.2 端口參數與掃描順序
[plain] view plain copy- -p <port ranges>: 掃描指定的端口
- 實例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP協議、U代表UDP協議、S代表SCTP協議)
- -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文件。
2.3.3 端口掃描演示
這裏,我們以掃描局域網內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端口是關閉的;紅色框圖中列舉出開放的端口和可能是開放的端口。
2.4 版本偵測
版本偵測,用於確定目標主機開放端口上運行的具體的應用程序及版本信息。
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多種不同的協議。
2.4.1 版本偵測原理
簡要的介紹版本的偵測原理。
版本偵測主要分為以下幾個步驟:
- 首先檢查open與open|filtered狀態的端口是否在排除端口列表內。如果在排除列表,將該端口剔除。
- 如果是TCP端口,嘗試建立TCP連接。嘗試等待片刻(通常6秒或更多,具體時間可以查詢文件nmap-services-probes中Probe TCP NULL q||對應的totalwaitms)。通常在等待時間內,會接收到目標機發送的“WelcomeBanner”信息。nmap將接收到的Banner與nmap-services-probes中NULL probe中的簽名進行對比。查找對應應用程序的名字與版本信息。
- 如果通過“Welcome Banner”無法確定應用程序版本,那麽nmap再嘗試發送其他的探測包(即從nmap-services-probes中挑選合適的probe),將probe得到回復包與數據庫中的簽名進行對比。如果反復探測都無法得出具體應用,那麽打印出應用返回報文,讓用戶自行進一步判定。
- 如果是UDP端口,那麽直接使用nmap-services-probes中探測包進行探測匹配。根據結果對比分析出UDP應用服務類型。
- 如果探測到應用程序是SSL,那麽調用openSSL進一步的偵查運行在SSL之上的具體的應用類型。
- 如果探測到應用程序是SunRPC,那麽調用brute-force RPC grinder進一步探測具體服務。
2.4.2 版本偵測的用法
版本偵測方面的命令行選項比較簡單。
- -sV: 指定讓Nmap進行版本偵測
- --version-intensity <level>: 指定版本偵測強度(0-9),默認為7。數值越高,探測出的服務越準確,但是運行時間會比較長。
- --version-light: 指定使用輕量偵測方式 (intensity 2)
- --version-all: 嘗試使用所有的probes進行偵測 (intensity 9)
- --version-trace: 顯示出詳細的版本偵測過程信息。
2.4.3 版本偵測演示
命令:
nmap –sV 192.168.1.100
對主機192.168.1.100進行版本偵測。
從結果中,我們可以看到996個端口是關閉狀態,對於4個open的端口進行版本偵測。圖中紅色為版本信息。紅色線條劃出部分是版本偵測得到的附加信息,因為從應用中檢測到微軟特定的應用服務,所以推斷出對方運行的Windows的操作系統。
2.5 OS偵測
操作系統偵測用於檢測目標主機運行的操作系統類型及設備類型等信息。
Nmap擁有豐富的系統數據庫nmap-os-db,目前可以識別2600多種操作系統與設備類型。
2.5.1 OS偵測原理
Nmap使用TCP/IP協議棧指紋來識別不同的操作系統和設備。在RFC規範中,有些地方對TCP/IP的實現並沒有強制規定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根據這些細節上的差異來判斷操作系統的類型的。
具體實現方式如下:
- Nmap內部包含了2600多已知系統的指紋特征(在文件nmap-os-db文件中)。將此指紋數據庫作為進行指紋對比的樣本庫。
- 分別挑選一個open和closed的端口,向其發送經過精心設計的TCP/UDP/ICMP數據包,根據返回的數據包生成一份系統指紋。
- 將探測生成的指紋與nmap-os-db中指紋進行對比,查找匹配的系統。如果無法匹配,以概率形式列舉出可能的系統。
2.5.2 OS偵測用法
OS偵測的用法簡單,Nmap提供的命令比較少。
- -O: 指定Nmap進行OS偵測。
- --osscan-limit: 限制Nmap只對確定的主機的進行OS探測(至少需確知該主機分別有一個open和closed的端口)。
- --osscan-guess: 大膽猜測對方的主機的系統類型。由此準確性會下降不少,但會盡可能多為用戶提供潛在的操作系統。
2.5.3 OS偵測演示
命令:
nmap –O 192.168.1.100
從上圖中可看到,指定-O選項後先進行主機發現與端口掃描,根據掃描到端口來進行進一步的OS偵測。獲取的結果信息有設備類型,操作系統類型,操作系統的CPE描述,操作系統細節,網絡距離等。
3 Nmap高級用法
3.1 防火墻/IDS規避
防火墻與IDS規避為用於繞開防火墻與IDS(入侵檢測系統)的檢測與屏蔽,以便能夠更加詳細地發現目標主機的狀況。
Nmap提供了多種規避技巧,通常可以從兩個方面考慮規避方式:數據包的變換(Packet Change)與時序變換(Timing Change)。
3.1.1 規避原理
3.1.1.1 分片(Fragmentation)
將可疑的探測包進行分片處理(例如將TCP包拆分成多個IP包發送過去),某些簡單的防火墻為了加快處理速度可能不會進行重組檢查,以此避開其檢查。
3.1.1.2 IP誘騙(IP decoys)
在進行掃描時,將真實IP地址和其他主機的IP地址(其他主機需要在線,否則目標主機將回復大量數據包到不存在的主機,從而實質構成了拒絕服務攻擊)混合使用,以此讓目標主機的防火墻或IDS追蹤檢查大量的不同IP地址的數據包,降低其追查到自身的概率。註意,某些高級的IDS系統通過統計分析仍然可以追蹤出掃描者真實IP地址。
3.1.1.3 IP偽裝(IP Spoofing)
顧名思義,IP偽裝即將自己發送的數據包中的IP地址偽裝成其他主機的地址,從而目標機認為是其他主機在與之通信。需要註意,如果希望接收到目標主機的回復包,那麽偽裝的IP需要位於統一局域網內。另外,如果既希望隱蔽自己的IP地址,又希望收到目標主機的回復包,那麽可以嘗試使用idle scan或匿名代理(如TOR)等網絡技術。
3.1.1.4 指定源端口
某些目標主機只允許來自特定端口的數據包通過防火墻。例如FTP服務器配置為:允許源端口為21號的TCP包通過防火墻與FTP服務端通信,但是源端口為其他端口的數據包被屏蔽。所以,在此類情況下,可以指定Nmap將發送的數據包的源端口都設置特定的端口。
3.1.1.5 掃描延時
某些防火墻針對發送過於頻繁的數據包會進行嚴格的偵查,而且某些系統限制錯誤報文產生的頻率(例如,Solaris 系統通常會限制每秒鐘只能產生一個ICMP消息回復給UDP掃描),所以,定制該情況下發包的頻率和發包延時可以降低目標主機的審查強度、節省網絡帶寬。
3.1.1.6 其他技術
Nmap還提供多種規避技巧,比如指定使用某個網絡接口來發送數據包、指定發送包的最小長度、指定發包的MTU、指定TTL、指定偽裝的MAC地址、使用錯誤檢查和(badchecksum)。
更多信息http://nmap.org/book/man-bypass-firewalls-ids.html
3.1.2 規避用法
- -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)。
3.1.3 規避演示
使用命令:
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端口是開放的。
3.2 NSE腳本引擎
NSE腳本引擎(Nmap Scripting Engine)是Nmap最強大最靈活的功能之一,允許用戶自己編寫腳本來執行自動化的操作或者擴展Nmap的功能。
NSE使用Lua腳本語言,並且默認提供了豐富的腳本庫,目前已經包含14個類別的350多個腳本。
NSE的設計初衷主要考慮以下幾個方面:
- 網絡發現(Network Discovery)
- 更加復雜的版本偵測(例如skype軟件)
- 漏洞偵測(Vulnerability Detection)
- 後門偵測(Backdoor Detection)
- 漏洞利用(Vulnerability Exploitation)
3.2.1 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字段定義的函數。
3.2.2 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>部分可以逗號分隔的文件或腳本類別。
3.2.3 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已知的漏洞,那麽就可以進行更進一步的滲透測試了。
4 參考資料
4.1 書籍
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用法整理很完整。
4.2 網站
官網:www.nmap.org
安全工具排名:http://sectools.org/
Nmap掃描原理與用法