'Linux 超級軍刀 Nmap詳解'

"

Nmap是一款開源免費的網絡發現(Network Discovery)和安全審計(Security Auditing)工具。軟件名字Nmap是Network Mapper的簡稱。Nmap最初是由Fyodor在1997年開始創建的。隨後在開源社區眾多的志願者參與下,該工具逐漸成為最為流行安全必備工具之一。官網為:www.nmap.org。

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

Nmap的優點:

靈活。支持數十種不同的掃描方式,支持多種目標對象的掃描

強大。Nmap可以用於掃描互聯網上大規模的計算機

可移植。支持主流操作系統:Windows/Linux/Unix/MacOS等等;源碼開放,方便移植

簡單。提供默認的操作能覆蓋大部分功能,基本端口掃描nmap targetip,全面的掃描nmap –A targetip

自由。Nmap作為開源軟件,在GPL License的範圍內可以自由的使用

文檔豐富。Nmap官網提供了詳細的文檔描述。Nmap作者及其他安全專家編寫了多部Nmap參考書籍

社區支持。Nmap背後有強大的社區團隊支持

Nmap包含四項基本功能:

主機發現 (Host Discovery)

端口掃描 (Port Scanning)

版本偵測 (Version Detection)

操作系統偵測 (Operating System Detection)

而這四項功能之間,又存在大致的依賴關係(通常情況下的順序關係,但特殊應用另外考慮),首先需要進行主機發現,隨後確定端口狀態,然後確定端口上運行的具體應用程序和版本信息,然後可以進行操作系統的偵測。而在這四項功能的基礎上,nmap還提供防火牆和 IDS 的規避技巧,可以綜合運用到四個基本功能的各個階段。另外nmap還提供強大的NSE(Nmap Scripting Language)腳本引擎功能,腳本可以對基本功能進行補充和擴展。

先整理一些nmap參數及其意義

nmap –iflist : 查看本地主機的接口信息和路由信息

-A :選項用於使用進攻性方式掃描

-T4: 指定掃描過程使用的時序,總有6個級別(0-5),級別越高,掃描速度越快,但也容易被防火牆或IDS檢測並屏蔽掉,在網絡通訊狀況較好的情況下推薦使用T4

-oX test.xml: 將掃描結果生成 test.xml 文件

-oG test.txt: 將掃描結果生成 test.txt 文件

-sn : 只進行主機發現,不進行端口掃描

-O : 指定Nmap進行系統版本掃描

-sV: 指定讓Nmap進行服務版本掃描

-p <port ranges>: 掃描指定的端口

-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式來對目標主機進行掃描

-sU: 指定使用UDP掃描方式確定目標主機的UDP端口狀況

-script <script name> : 指定掃描腳本

-Pn : 不進行ping掃描

-sP : 用ping掃描判斷主機是否存活,只有主機存活,nmap才會繼續掃描,一般最好不加,因為有的主機會禁止ping

-PI : 設置這個選項,讓nmap使用真正的ping(ICMP echo請求)來掃描目標主機是否正在運行。

-iL 1.txt : 批量掃描1.txt中的目標地址

-sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現

-sY/sZ: 使用SCTP INIT/COOKIE-ECHO來掃描SCTP協議端口的開放的情況

-sO: 使用IP protocol 掃描確定目標機支持的協議類型

-PO : 使用IP協議包探測對方主機是否開啟

-PE/PP/PM : 使用ICMP echo、 ICMP timestamp、ICMP netmask 請求包發現主機

-PS/PA/PU/PY : 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式進行發現

-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans祕密掃描方式來協助探測對方的TCP端口狀態

-e eth0:指定使用eth0網卡進行探測

-f : --mtu <val>: 指定使用分片、指定數據包的 MTU.

-b <FTP relay host>: 使用FTP bounce scan掃描方式

-g: 指定發送的端口號

-r: 不進行端口隨機打亂的操作(如無該參數,nmap會將要掃描的端口以隨機順序方式掃描,以讓nmap的掃描不易被對方防火牆檢測到)

-v 表示顯示冗餘信息,在掃描過程中顯示掃描的細節,從而讓用戶瞭解當前的掃描狀態

-n : 表示不進行DNS解析;

-D <decoy1,decoy2[,ME],...>: 用一組 IP 地址掩蓋真實地址,其中 ME 填入自己的 IP 地址

-R :表示總是進行DNS解析。

-F : 快速模式,僅掃描TOP 100的端口

-S <IP_Address>: 偽裝成其他 IP 地址

--ttl <val>: 設置 time-to-live 時間

--badsum: 使用錯誤的 checksum 來發送數據包(正常情況下,該類數據包被拋棄,如果收到回覆,說明回覆來自防火牆或 IDS/IPS)

--dns-servers : 指定DNS服務器

--system-dns : 指定使用系統的DNS服務器

--traceroute : 追蹤每個路由節點

--scanflags <flags>: 定製TCP包的flags

--top-ports <number> :掃描開放概率最高的number個端口

--port-ratio <ratio>: 掃描指定頻率以上的端口。與上述--top-ports類似,這裡以概率作為參數

--version-trace: 顯示出詳細的版本偵測過程信息

--osscan-limit: 限制Nmap只對確定的主機的進行OS探測(至少需確知該主機分別有一個open和closed的端口)

--osscan-guess: 大膽猜測對方的主機的系統類型。由此準確性會下降不少,但會盡可能多為用戶提供潛在的操作系統

--data-length <num>: 填充隨機數據讓數據包長度達到 Num

--ip-options <options>: 使用指定的 IP 選項來發送數據包

--spoof-mac <mac address/prefix/vendor name> : 偽裝 MAC 地址

--version-intensity <level>: 指定版本偵測強度(0-9),默認為7。數值越高,探測出的服務越準確,但是運行時間會比較長。

--version-light: 指定使用輕量偵測方式 (intensity 2)

--version-all: 嘗試使用所有的probes進行偵測 (intensity 9)

--version-trace: 顯示出詳細的版本偵測過程信息

一:探索目標主機是否在線

主機發現的原理與Ping命令類似,發送探測包到目標主機,如果收到回覆,那麼說明目標主機是開啟的。Nmap支持十多種不同的主機探測方式,用戶可以在不同的條件下靈活選用不同的方式來探測目標機。主機發現常用參數如下。

-sn: Ping Scan 只進行主機發現,不進行端口掃描。

-PE/PP/PM: 使用ICMP echo、 ICMP timestamp、ICMP netmask 請求包發現主機。

-PS/PA/PU/PY[portlist]: 使用TCP SYN/TCP ACK或SCTP INIT/ECHO方式進行發現。

-sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現。

-Pn: 將所有指定的主機視作開啟的,跳過主機發現的過程。

-PO[protocollist]: 使用IP協議包探測對方主機是否開啟。

-n/-R: -n表示不進行DNS解析;-R表示總是進行DNS解析。

--dns-servers <serv1[,serv2],...>: 指定DNS服務器。

--system-dns: 指定使用系統的DNS服務器

--traceroute: 追蹤每個路由節點

當探測公網 ip時

nmap -sn

Nmap會發送四種不同類型的數據包來探測目標主機是否在線。

ICMP echo request

a TCP SYN packet to port 443(https)

a TCP ACK packet to port 80(http)

an ICMP timestamp request

例: nmap -sn 133.133.100.30

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

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

nmap -PE/-PP/-PM

-PE 的ICMP Echo掃描簡單來說是通過向目標發送ICMP Echo數據包來探測目標主機是否存活,但由於許多主機的防火牆會禁止這些報文,所以僅僅ICMP掃描通常是不夠的。 nmap -PE 133.133.100.30

-PP 的ICMP time stamp時間戳掃描在大多數防火牆配置不當時可能會得到回覆,可以以此方式來判斷目標主機是否存活。倘若目標主機在線,該命令還會探測其開放的端口以及運行的服務! nmap nmap -PP 133.133.100.30

-PM 的ICMP address maskPing地址掩碼掃描會試圖用備選的ICMP等級Ping指定主機,通常有不錯的穿透防火牆的效果 nmap -PM 133.133.100.30

-PS的TCP SYN掃描

當探測內網ip時

nmap -sn

使用 nmap -sn 內網ip 這個命令會發送arp請求包探測目標ip是否在線,如果有arp回覆包,則說明在線。此命令可以探測目標主機是否在線,如果在線,還可以得到其MAC地址。但是不會探測其開放的端口號。

nmap -PE/-PP/-PM

使用 nmap -PE/PP/PM 內網ip 探測主機的開啟情況,使用的是ARP請求報文,如果有ARP回覆報文,說明主機在線。-PP/PE/PM命令探測到主機在線後,還會探測主機的端口的開啟狀態以及運行的服務,其探測端口狀態原理在下一節中有介紹。

探測該主機所在網段內所有主機的在線情況,使用的是 nmap -sn 網段/子網掩碼 。

例:nmap -sn 10.96.10.0/24 或 nmap -sn 10.96.10.100-200

探測10.96.10.0 這個網段內主機的在線情況,返回在線主機的ip和MAC地址

二:端口掃描及其原理

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

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

Nmap通過探測將端口劃分為6個狀態:

open:端口是開放的。

closed:端口是關閉的。

filtered:端口被防火牆IDS/IPS屏蔽,無法確定其狀態。

unfiltered:端口沒有被屏蔽,但是否開放需要進一步確定。

open|filtered:端口是開放的或被屏蔽。

closed|filtered :端口是關閉的或被屏蔽

TCP SYN 掃描(-sS)

這是Nmap默認的掃描方式,通常被稱作半開放掃描。該方式發送SYN到目標端口,如果收到SYN/ACK回覆,那麼可以判斷端口是開放的;如果收到RST包,說明該端口是關閉的。如果沒有收到回覆,那麼可以判斷該端口被屏蔽了。因為該方式僅發送SYN包對目標主機的特定端口,但不建立完整的TCP連接,所以相對比較隱蔽,而且效率比較高,適用範圍廣。

TCP connent 掃描(-sT)

TCP connect方式使用系統網絡API connect向目標主機的端口發起連接,如果無法連接,說明該端口關閉。該方式掃描速度比較慢,而且由於建立完整的TCP連接會在目標主機上留下記錄信息,不夠隱蔽。所以,TCP connect是TCP SYN無法使用才考慮使用的方式

TCP ACK 掃描(-sA)

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

TCP FIN/Xmas/NULL 掃描(-sN/sF/sX)

這三種掃描方式被稱為祕密掃描,因為相對比較隱蔽。FIN掃描向目標主機的端口發送的TCP FIN 包或Xmas tree包或NULL包,如果收到對方的RST回覆包,那麼說明該端口是關閉的;沒有收到RST包說明該端口可能是開放的或者被屏蔽了。其中Xmas tree包是指flags中FIN URG PUSH被置為1的TCP包;NULL包是指所有的flags都為0的TCP包。

UDP掃描(-sU)

UDP掃描用於判斷UDP端口的情況,向目標主機的UDP端口發送探測包,如果收到回覆ICMP port unreachable就說明該端口是關閉的;如果沒有收到回覆,那說明該UDP端口可能是開放的或者屏蔽的。因此,通過反向排除法的方式來判斷哪些UDP端口是可能處於開放狀態的。

其他方式(-sY/-sZ)

除了以上幾種常用的方式外,Nmap還支持多種其他的探測方式。例如使用SCTP INIT/Cookie-ECHO方式是來探測SCTP的端口開放情況;使用IP protocol方式來探測目標主機支持的協議類型(tcp/udp/icmp/sctp等等);使用idle scan方式藉助殭屍主機來掃描目標主機,以達到隱蔽自己的目的;或者使用FTP bounce scan,藉助FTP允許的代理服務掃描其他的主機,同樣達到隱蔽自己的目的

三:端口掃描用法

掃描方式選項

-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>: 掃描指定的端口

實例: -p 22; -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文件

簡單掃描(nmap ip)

nmap 202.207.236.2

例如: nmap 202.207.236.2 這個命令會按照 nmap-services 文件中指定的端口進行掃描,然後列出目標主機開放的端口號,以及端口號上運行的服務。在一次簡單掃描中,Nmap會以默認TCP SYN掃描方式進行,僅判斷目標端口是否開放,若開放,則列出端口對應的服務名稱。

探測端口開放過程: 確定主機在線之後,nmap會按照nmap-services文件中的端口號發送TCP SYN報文給主機相應的端口,如果主機回覆一個包含TCP SYN、ACK的報文,則說明該端口號開放。nmap會再回復一個TCP RST清除連接復位。下面的截圖是nmap是和目標主機的80號端口的探測過程,由此可見,目標主機的22號端口屬於開放狀態!

全面掃描(nmap -A ip)

nmap -A 202.207.236.2

例如: nmap -A 202.207.236.2 這個命令不僅列出目標主機開放的端口號,對應的服務,還較為詳細的列出了服務的版本,其支持的命令,到達目標主機的每一跳路由等信息。在進行完全掃描時,掃描機與目標主機之間存在大量的數據流量交互,掃描時長隨之增加。完全掃描不僅僅是TCP協議上的通信交互,還有例如ICMP、HTTP、NBSS、TDS、POP等等協議的交互,這些協議的交互是因為在完全掃描開始時首先對目標主機的開放端口進行了確認,之後再根據不同對應的不同服務進行服務版本信息探測、賬戶信息等信息的探測!

探測主機是否在線:全面掃描時探測主機是否在線和簡單掃描完全一致

探測端口是否打開:全面掃描時探測主機端口開放和簡單掃描完全一致

探測端口服務具體版本:每個協議都不一樣,總之就是確定端口開放了之後,和該端口進行更多的數據交互,以獲得更多的信息。在下一節的版本探測中有更深入的研究

探測主機系統:在下一節的系統探測中有更深入的研究。

nmap -T4 -A -v xx.xx.xx.xx

-A 選項用於使用進攻性方式掃描

-T4 指定掃描過程使用的時序,總有6個級別(0-5),級別越高,掃描速度越快,但也容易被防火牆或IDS檢測並屏蔽掉,在網絡通訊狀況較好的情況下推薦使用T4

-v 表示顯示冗餘信息,在掃描過程中顯示掃描的細節,從而讓用戶瞭解當前的掃描狀態

例如:nmap -T4 -A -v 10.96.10.246

全面掃描時數據流量包的截圖,確定了哪些端口的協議開啟了之後,進行更加深入的探測!

探測指定端口的開放狀態

在默認情況下,Nmap對端口的掃描方式是從小到大進行的,或者是參照 nmap-services 中文件列出的端口進行掃描。-p選項可以指定一個端口號或者一個端口範圍。若既想掃描TCP端口又想掃描UDP端口,則需要在端口號前加上T:或U:來分別代表TCP和UDP協議。注意,要既掃描TCP又掃描UDP,則需要指定-sU及至少一個TCP掃描類型(-sS(半連接掃描),-sT(全連接掃描)等),如果沒有給定協議限定符,端口號會被加到所有協議列表。

例: nmap -p 80-445 10.96.10.246 掃描目標主機的80-445端口的開放情況

從上面的圖中可以看到,若只簡單的指定一個端口範圍,Nmap會默認以TCP SYN方式掃描目標端口,若既想掃描目標TCP端口又想掃描UDP的端口,則需要指定掃描方式以及端口。

例: nmap -sS -sU -p T:80,U:445 10.96.10.246 以半連接的TCP SYN方式掃描目標主機的80端口,以UDP方式掃描目標主機的445端口

探測N個最有可能開放的端口

例:nmap -sS -sU --top-ports 100 10.96.10.246

參數-sS表示使用TCP SYN方式掃描TCP端口;-sU表示掃描UDP端口;--top-ports 100表示掃描最有可能開放的100個端口(TCP和UDP分別100個端口)。

四:版本偵測

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

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多種不同的協議。

版本偵測原理

版本偵測主要分為以下幾個步驟:

首先檢查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進一步探測具體服務。

版本偵測用法

比如目標主機把SSH的22號端口改成了2222端口,那麼如果使用普通掃描只會發現2222端口是開啟的,並不能知道2222號端口上運行的程序,通過加參數 -sV 進行版本掃描,可以探測到目標主機上2222端口運行的是SSH服務

-sV: 指定讓Nmap進行版本偵測

--version-intensity <level>: 指定版本偵測強度(0-9),默認為7。數值越高,探測出的服務越準確,但是運行時間會比較長。

--version-light: 指定使用輕量偵測方式 (intensity 2)

--version-all:嘗試使用所有的probes進行偵測 (intensity 9)

--version-trace: 顯示出詳細的版本偵測過程信息

例: nmap -sV 10.96.10.246

五:OS偵測

操作系統偵測用於檢測目標主機運行的操作系統類型及設備類型等信息。

Nmap擁有豐富的系統數據庫nmap-os-db,目前可以識別2600多種操作系統與設備類型。

OS偵測原理

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

具體實現方式如下:

Nmap內部包含了2600多已知系統的指紋特徵(在文件nmap-os-db文件中)。將此指紋數據庫作為進行指紋對比的樣本庫。

分別挑選一個open和closed的端口,向其發送經過精心設計的TCP/UDP/ICMP數據包,根據返回的數據包生成一份系統指紋。

將探測生成的指紋與nmap-os-db中指紋進行對比,查找匹配的系統。如果無法匹配,以概率形式列舉出可能的系統。

OS偵測用法

-O: 指定Nmap進行OS偵測。

--osscan-limit: 限制Nmap只對確定的主機的進行OS探測(至少需確知該主機分別有一個open和closed的端口)。

--osscan-guess: 大膽猜測對方的主機的系統類型。由此準確性會下降不少,但會盡可能多為用戶提供潛在的操作系統

例: nmap -O 10.96.10.246

六:Nmap高級用法

防火牆/IDS規避

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

分片

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

IP誘騙(IP decoys)

在進行掃描時,將真實IP地址在和其他主機的IP地址混合使用(其他主機需要在線,否則目標主機將回復大量數據包到不存在的數主機,從而實質構成了DOS攻擊),以此讓目標主機的防火牆或IDS追蹤大量的不同IP地址的數據包,降低其追查到自身的概率。但是,某些高級的IDS系統通過統計分析仍然可以追蹤出掃描者真實的IP地址

IP偽裝

IP偽裝就是將自己發送的數據包中的IP地址偽裝成其他主機的地址,從而目標機認為是其他主機與之通信。需要注意的是,如果希望接收到目標主機的回覆包,那麼偽裝的IP需要位於統一局域網內。另外,如果既希望隱蔽自己的IP地址,又希望收到目標主機的回覆包,那麼可以嘗試使用idle scan 或匿名代理等網絡技術

指定源端口

某些目標主機只允許來自特定端口的數據包通過防火牆。例如,FTP服務器的配置為允許源端口為21號的TCP包通過防火牆與FTP服務器通信,但是源端口為其他的數據包被屏蔽。所以,在此類情況下,可以指定數據包的源端口

掃描延時

某些防火牆針對發送過於頻繁的數據包會進行嚴格的偵查,而且某些系統限制錯誤報文產生的頻率。所以,我們可以降低發包的頻率和發包延時以此降低目標主機的審查強度

其他技術

nmap還提供其他多種規避技巧,比如指定使用某個網絡接口來發送數據包、指定發送包的最小長度、指定發包的MTU、指定TTL、指定偽裝的MAC地址,使用錯誤檢查。

-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 -F -Pn -D 10.96.10.100,10.96.10.110,ME -e eth0 -g 5555 202.207.236.3

-F參數表示快速掃描100個端口,-Pn不進行ping掃描,-D表示使用ip誘騙方式掩飾真實ip,使用的是10.96.10.100和10.96.10.110,ME表示自己真實的ip,這裡是10.96.10.234,-e 參數指定eth0網卡發送數據包,-g參數指定發送的端口號

NSE腳本引擎

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

nmap的腳本庫的路徑:/usr/share/nmap/scripts ,該目錄下的文件都是nse腳本

NSE使用Lua腳本語言,並且默認提供了豐富的腳本庫,目前已經包含了14個類別的350多個腳本。NSE的設計初衷主要考慮以下幾個方面

網絡發現(Network Discovery)

更加複雜的版本偵測(例如 skype 軟件)

漏洞偵測(Vulnerability Detection)

後門偵測(Backdoor Detection)

漏洞利用(Vulnerability Exploitation)

例如:

nmap -script smb-vuln-ms17-010 192.168.10.34 #可以探測該主機是否存在ms17_010漏洞

nmap --max-parallelism 800--script http-slowloris scanme.nmap.org #可以探測該主機是否存在http拒絕服務攻擊漏洞

nmap -script http-iis-short-name-brute 192.168.10.34 #探測是否存在IIS短文件名漏洞

nmap -script mysql-empty-password 192.168.10.34 #驗證mysql匿名訪問

nmap -p 443 -script ssl-ccs-injection 192.168.10.34 #驗證是否存在openssl CCS注入漏洞

"

相關推薦

推薦中...