nmap終極使用指南

信安之路發表於2017-10-26

本文作者:hl0rey

首發:微信公眾號【信安之路】

一、目標指定


  1. CIDR標誌位 192.168.1.0/24
    1. 指定範圍 192.168.1.1-255192.168.1-255.1(任意位置)
  2. IPv6 地址只能用規範的 IPv6 地址或主機名指定。 CIDR 和八位位元組範圍不支援 IPv6 ,因為它們對於 IPv6 幾乎沒什麼用。

-iL <檔名>

 

主機名或者 ip 地址列表列表中的項可以是 Nmap 在命令列上接受的任何格式( IP 地址,主機名,CIDR,IPv6,或者八位位元組範圍)。 每一項必須以一個或多個空格,製表符或換行符分開。 如果您希望 Nmap 從標準輸入而不是實際檔案讀取列表, 您可以用一個連字元 (-) 作為檔名。

-iR <數量>

 

隨機選擇一定數量的目標

--exclude <主機名/地址>

 

不包含的主機

--excludefile <檔名>

 

不包含的主機的列表

二、主機發現


  1. 如果沒有給出主機發現的選項,Nmap 就傳送一個 TCP ACK 報文到 80 埠和一個 ICMP 回聲請求到每臺目標機器。

  2. 一個例外是ARP掃描用於區域網上的任何目標機器。對於非特權 UNIX shell 使用者,使用 connect() 系統呼叫會傳送一個 SYN 報文而不是 ACK 這些預設行為和使用 -PA -PE 選項的效果相同。

  3. 另外要注意的是即使您指定了其它 -P* 選項,ARP 發現 ( -PR ) 對於區域網上的 目標而言是預設行為,因為它總是更快更有效。

-sL(列表掃描)

 

列出給出目標的具體內容,預設會對地址進行反向解析,顯示主機名。

-sn(不進行埠掃描)

 

與 -sn 一起完成的預設主機發現包括一個 ICMP 響應請求、 TCP SYN 到埠 443、TCP ACK 到埠 80 ,以及一個 ICMP 的時間戳請求。

 

在以前的 Nmap 中,-sn 被稱為 -sP 。 -sP ( Ping 掃描)選項在預設情況下,傳送一個 ICMP 回聲請求和一個 TCP 報文到 80 埠。如果非特權使用者執行,就傳送一個 SYN 報文 ( 用 connect() 系統呼叫 ) 到目標機的 80 埠。 當特權使用者掃描區域網上的目標機時,會傳送 ARP 請求 (-PR) ,除非使用了 --send-ip 選項。 -sP 選項可以和除 -P0 之外的任何發現探測型別 -P* 選項結合使用以達到更大的靈活性。 一旦使用了任何探測型別和埠選項,預設的探測 ( ACK 和回應請求) 就被覆蓋了。

-Pn(無ping)

 

跳過主機發現階段,把每個都 IP 當成存活主機。

-P0 <協議號列表>(IP 協議 ping)

 

一個較新的主機發現選項是 IP 協議 ping ,它將 IP 資料包傳送到IP報頭中指定的協議號。協議列表的格式與前面討論的 TCP、UDP 和 SCTP 主機發現選項的埠列表相同。如果沒有指定協議,預設的是為 ICMP (協議 1 )、IGMP ( 協議 2 ) 和 ipin-IP ( 協議 4 ) 傳送多個 IP 資料包。預設的協議可以在編譯時通過更改 nmap.h 中的預設 proat 探測埠規範來配置。注意,對於 ICMP、IGMP、TCP ( 協議 6 )、UDP( 協議17 )和 SCTP ( 協議 132 ) ,資料包是用適當的協議標頭髮送的,而其他協議被髮送時,除了 IP 報頭之外沒有附加的資料(除非有任何資料——資料字串,或者——資料長度選項被指定)。

-PS<埠列表>(TCP SYN Ping)

  1. 該選項傳送一個設定了 SYN 標誌位的空 TCP 報文,預設埠為 80 。不同的埠可以作為選項制定(如 -PS22,23,25,80,113,1050,3500)
  2. SYN 標誌位告訴對方您正試圖建立一個連線。 通常目標埠是關閉的,一個 RST (復位) 包會發回來。 如果碰巧埠是開放的,目標會進行 TCP 三步握手的第二步,回應 一個 SYN/ACK TCP 報文。
  3. 無論 RST 還是 SYN/ACK 響應都告訴 Nmap 該主機正在執行。然後執行 Nmap 的機器則會扼殺這個正在建立的連線, 傳送一個 RST 而非 ACK 報文, ST 報文是執行 Nmap 的機器而不是 Nmap 本身響應的,因為它對收到 的 SYN/ACK 感到很意外。

-PA<埠列表>(TCP ACK Ping)

  1. ACK 報文表示確認一個建立連線的嘗試,但該連線尚未完全建立。 所以遠端主機應該總是回應一個 RST 報文, 因為它們並沒有發出過連線請求到執行 Nmap 的機器,如果它們正在執行的話。
  2. 如果非特權使用者嘗試該功能, 或者指定的是 IPv6 目標,前面說過的 connect() 方法將被使用。 這個方法並不完美,因為它實際上傳送的是 SYN 報文,而不是 ACK 報文。
  3. 他的預設埠和修改方法跟 -PS 一致 4.SYN 探測更有可能用於這樣的系統,由於沒頭沒腦的 ACK 報文 通常會被識別成偽造的而丟棄。解決這個兩難的方法是通過即指定 -PS 又指定 -PA 來即傳送 SYN 又傳送 ACK 。

-PU <埠列表>(UDP Ping)

  1. 傳送一個空的 ( 除非指定了 --data-length UDP 報文到給定的埠。埠列表的格式和前面討論過的 -PS 和 -PA 選項還是一樣。 如果不指定埠,預設是 31338 。修改方法和 -PA -PS 一致
  2. 如果目標機器的埠是關閉的,UDP 探測應該馬上得到一個 ICMP 埠無法到達的回應報文。 這對於 Nmap 意味著該機器正在執行。 許多其它型別的 ICMP 錯誤,像主機/網路無法到達或者 TTL 超時則表示 down 掉的或者不可到達的主機。 沒有回應也被這樣解釋。如果到達一個開放的埠,大部分服務僅僅忽略這個 空報文而不做任何回應。這就是為什麼預設探測埠是 31338 這樣一個 極不可能被使用的埠。少數服務如 chargen 會響應一個空的 UDP 報文, 從而向 Nmap 表明該機器正在執行。

-PR(ARP Ping)

 

如果 Nmap 發現目標主機就在它所在的區域網上,它會進行 ARP 掃描。 即使指定了不同的 ping 型別 (如 -PI 或者 -PS ) , Nmap 也會對任何相同區域網上的目標機使用 ARP 。 如果您真的不想要 ARP 掃描,指定 --send-ip 。對於 IPv6 ( -6 選項),-PR 使用 ICMPv6 的鄰居發現而不是 ARP 。在 RFC 4861 中定義的鄰居發現可以看作是 IPv6 等效的。

--disable-arp-ping (No ARP or ND Ping)

 

不使用 ARP 發現和 ICMPv6 鄰居發現

-PY <埠列表> (SCTP INIT Ping)

  1. 一個 SCTP INIT 資料包,預設埠是 80 ,如果要改變埠可以用如下形式: -PY22、-PY22,80,179,5060。注意 PY 和埠列表之間沒有空格。
  2. SCTP INIT 資料包表示本機想跟目標主機關聯。一般情況下,目標主機的埠是關閉的,就會返回一個 SCTP 資料包。如果目標主機埠是開放的,它就會回覆一個 SCTP INIT-ACK 資料包。如果執行 nmap 的本機支援 SCTP 協議棧的話,本機會給目標主機回覆一個 SCTP ABORT 資料包,而不是 SCTP COOKIE-ECHO 資料包,這個資料包是由系統核心傳送的,因為他沒有去向目標主機發起關聯請求。
  3. 本技術用於主機發現,所以不必關心埠是否開放,只要收到回覆就可認為主機是存活的。
  4. 在 linux 系統中,特權使用者傳送和接收 raw SCTP 資料包,非特權使用者不支援這個掃描技術。

-PE; -PP; -PM(ICMP Ping Types)

 

-PE 是 ICMP echo 請求時間戳和地址掩碼查詢可以分別用 -PP 和 -PM 選項傳送。 時間戳響應 ( ICMP 程式碼 14 ) 或者地址掩碼響應 ( 程式碼 18 ) 表示主機在執行。

-n 不域名解析

-R 所有IP做反向域名解析

--system-dns 使用本機的dns伺服器

--dns-servers <server1,server2> (使用指定的dns伺服器)

 

如果指定 dns 伺服器無法使用,則會轉向使用本機配置的 dns 伺服器

三、埠狀態


open ( 開放的 )

 

應用程式正在該埠接收 TCP 連線或者 UDP 報文。

closed ( 關閉的 )

 

關閉的埠對於 Nmap 也是可訪問的 ( 它接受 Nmap 的探測報文並作出響應 ), 但沒有應用程式在其上監聽。

filtered ( 被過濾的 )

 

由於包過濾阻止探測報文到達埠,Nmap 無法確定該埠是否開放。

unfiltered ( 未被過濾的 )

 

未被過濾狀態意味著埠可訪問,但 Nmap 不能確定它是開放還是關閉。

open|filtered ( 開放或者被過濾的 )

 

當無法確定埠是開放還是被過濾的,Nmap 就把該埠劃分成 這種狀態。開放的埠不響應就是一個例子。

closed|filtered ( 關閉或者被過濾的 )

 

該狀態用於 Nmap 不能確定埠是關閉的還是被過濾的。 它只可能出現在 IPID Idle 掃描中

四、埠掃描技術


-sS( TCP SYN 掃描 )

 

半開放掃描,不開啟一個完整的TCP連結它傳送一個 SYN 報文,然後等待響應。 SYN/ACK 表示埠在監聽 (開放),而 RST (復位)表示沒有監聽者。如果數次重發後仍沒響應,該埠就被標記為被過濾。如果收到 ICMP 不可到達錯誤 ( 型別 3,程式碼 1,2,3,9,10,或者 13 ),該埠也被標記為被過濾。

-sT( TCP connect() 掃描 )

 

Nmap 通過建立 connect() 系統呼叫要求作業系統和目標機以及埠建立連線,而不像其它掃描型別直接傳送原始報文。 這是和 Web 瀏覽器,P2P 客戶端以及大多數其它網路應用程式用以建立連線一樣的 高層系統呼叫。當 Nmap 連線,然後不傳送資料又關閉連線, 許多普通 UNIX 系統上的服務會在 syslog 留下記錄,有時候是一條加密的錯誤訊息。

-sU( UDP 掃描 )

 

1.UDP 掃描用 -sU 選項啟用。它可以和 TCP 掃描如 SYN 掃描 ( -sS ) 結合使用來同時檢查兩種協議。

 

2.UDP 掃描傳送空的(沒有資料) UDP 報頭到每個目標埠。 如果返回 ICMP 埠不可到達錯誤 ( 型別 3,程式碼 3 ), 該埠是 closed ( 關閉的 ) 。 其它 ICMP 不可到達錯誤 ( 型別 3 , 程式碼 1,2,9,10,或者 13 ) 表明該埠是 filtered ( 被過濾的 )。 偶爾地,某服務會響應一個 UDP 報文,證明該埠是 open ( 開放的 )。 如果幾次重試後還沒有響應,該埠就被認為是 open|filtered ( 開放 | 被過濾的 ) 。 這意味著該埠可能是開放的,也可能包過濾器正在封鎖通訊。 可以用版本掃描 ( -sV ) 幫助區分真正的開放埠和被過濾的埠。

-sY(SCTP INIT scan)

 

SCTP INIT 掃描類似 TCP SYN 掃描,他也是開啟一個半開的連線,而不是建立一個完整的 SCTP 關聯。如果目標埠回覆一個 INIT-ACK 資料包,則說明埠是開放的,如果回覆一個 ABORT 資料包,埠是關閉的,如果沒有回覆,埠會被標記標記為被過濾,當然如果收到了 ICMP 不可達的訊息( type 3, code 0, 1, 2, 3, 9, 10, or 13 )也會被標記為被過濾。

-sN; -sF; -sX ( TCP Null,FIN,Xmas 掃描 )

 

1.如果掃描系統遵循該 RFC ,當埠關閉時,任何不包含 SYN,RST ,或者 ACK 位的報文會導致 一個 RST 返回,而當埠開放時,應該沒有任何響應。只要不包含 SYN,RST,或者 ACK, 任何其它三種 ( FIN,PSH,and URG ) 的組合都行。 Nmap 有三種掃描型別利用這一點:Null 掃描 (-sN)

不設定任何標誌位 ( tcp 標誌頭是 0 )

 

FIN 掃描 ( -sF )

只設定 TCP FIN 標誌位。

 

Xmas 掃描 ( -sX )

設定 FIN,PSH,和 URG 標誌位,就像點亮聖誕樹上所有的燈一樣。

 

2.除了探測報文的標誌位不同,這三種掃描在行為上完全一致。 如果收到一個 RST 報文,該埠被認為是 closed ( 關閉的 ),而沒有響應則意味著 埠是 open|filtered ( 開放或者被過濾的 )。 如果收到 ICMP 不可到達錯誤( 型別 3,代號 1,2,3,9,10,或者 13 ),該埠就被標記為 被過濾的。

-sA ( TCP ACK 掃描 )

  1. 這種掃描與目前為止討論的其它掃描的不同之處在於 它不能確定 open ( 開放的 ) 或者 open|filtered ( 開放或者過濾的 )埠。 它用於發現防火牆規則,確定它們是有狀態的還是無狀態的,哪些埠是被過濾的。
  2. ACK 掃描探測報文只設定ACK標誌位 ( 除非您使用 --scanflags ) 。當掃描未被過濾的系統時, open ( 開放的 ) 和 closed ( 關閉的 ) 埠 都會返回 RST 報文。Nmap 把它們標記為 unfiltered ( 未被過濾的 ),意思是 ACK 報文不能到達,但至於它們是 open ( 開放的 ) 或者 closed ( 關閉的 ) 無法確定。不響應的埠 或者傳送特定的ICMP錯誤訊息 ( 型別 3,代號 1,2,3,9,10, 或者 13 ) 的埠,標記為 filtered ( 被過濾的 ) 。

-sW(TCP視窗掃描)

 

在某些系統上,開放埠用正數表示視窗大小 ( 甚至對於 RST 報文 ) 而關閉埠的視窗大小為 0 。因此,當收到RST時,視窗掃描不總是把埠標記為 unfiltered, 而是根據TCP視窗值是正數還是 0 ,分別把埠標記為 open 或者 closed

-sM(TCP Maimon掃描)

 

探測報文是 FIN/ACK。 根據 RFC 793 (TCP) ,無論埠開放或者關閉,都應該對這樣的探測響應 RST 報文。 然而,Uriel 注意到如果埠開放,許多基於 BSD 的系統只是丟棄該探測報文。

--scanflags ( 定製的 TCP 掃描 )

 

--scanflags 選項可以是一個數字標記值如 9 ( PSH 和 FIN ) , 但使用字元名更容易些。 只要是 URG, ACK,PSH, RST,SYN,and FIN 的任何組合就行。例如,--scanflags URGACKPSHRSTSYNFIN 設定了所有標誌位,但是這對掃描沒有太大用處。 標誌位的順序不重要。

-sZ(SCTP COOKIE ECHO 掃描 )

 

如果目標埠開放,則會丟棄之前沒有發起關聯請求的 SCTP COOKIE ECHO 資料包,如果埠是關閉的則會返回一個 SCTP ABORT 資料包。所以這個掃描技術,無法分辨過濾和開放,只能分辨出關閉的埠。

--sI < 殭屍主機地址:埠 >( idlescan )

  1. 這種高階的掃描方法允許對目標進行真正的 TCP 埠盲掃描 (意味著沒有報文從您的真實IP地址傳送到目標)。相反,side-channel 攻擊 利用 zombie 主機上已知的IP分段ID序列生成演算法來窺探目標上開放埠的資訊。
  2. 如果您由於 IPID 改變希望探測 zombie 上的特定埠, 您可以在 zombie 主機後加上一個冒號和埠號。 否則 Nmap 會使用預設埠 ( 80 )。

-sO(IP協議掃描)

 

IP 協議掃描可以讓您確定目標機支援哪些 IP 協議 ( TCP,ICMP,IGMP,等等 ) 。從技術上說,這不是埠掃描 ,既然它遍歷的是 IP 協議號而不是 TCP 或者 UDP 埠號。 但是它仍使用 -p 選項選擇要掃描的協議號, 用正常的埠表格式報告結果,甚至用和真正的埠掃描一樣 的掃描引擎。因此它和埠掃描非常接近,也被放在這裡討論。

-b <ftp relay host>(FTP彈跳掃描)

  1. FTP 協議的一個有趣特徵 ( RFC 959 ) 是支援所謂代理 ftp 連線。
  2. 它允許使用者連線到一臺 FTP 伺服器,然後要求檔案送到一臺第三方伺服器。 這個特性在很多層次上被濫用,所以許多伺服器已經停止支援它了。其中一種就是導致 FTP 伺服器對其它主機埠掃描。 只要請求 FTP 伺服器輪流傳送一個檔案到目標主機上的所感興趣的埠。 錯誤訊息會描述埠是開放還是關閉的。
  3. 這是繞過防火牆的好方法,因為 FTP 伺服器常常被置於可以訪問比 Web 主機更多其它內部主機的位置。
  4. Nmap 用 -b 選項支援 ftp 彈跳掃描。引數格式是 <username>:<password>@<server>:<port><Server> 是某個脆弱的 FTP 伺服器的名字或者 IP 地址。 您也許可以省略 <username>:<password>, 如果伺服器上開放了匿名使用者 ( user:anonymous password:-wwwuser@ ) 。 埠號 ( 以及前面的冒號 ) 也可以省略,如果 <server> 使用預設的 FTP 埠 ( 21 ) 。

五、埠掃描設定


 

預設情況下,Nmap 用指定的協議對埠 1 到 1024 以及 nmap-services 檔案中列出的更高的埠在掃描。

-p < 埠號,埠列表 >

  1. 制定掃描某個或某些埠用逗號分隔,或者用連結符號表示範圍也可。
  2. 對於 -sO IP 協議掃描,該選項用來指定協議號( 0-255 )。

--exclede-ports < 埠列表 >( 排除的埠 )

 

指定排除的埠,如果是指定排除的協議號的話,他的值在 0-255 之間

-F( 快速掃描 )

 

在 nmap 的 nmap-services 檔案中 ( 對於 -sO ,是協議檔案)指定您想要掃描的埠。 這比掃描所有 65535 個埠快得多。 因為該列表包含如此多的TCP埠( 1200 多),這和預設的 TCP 掃描 scan ( 大約 1600 個埠)速度差別不是很大。如果用 --datadir 選項指定小的 nmap-services 檔案 ,差別會很大。

-r(順序掃描埠)

 

預設情況下,Nmap 按隨機順序掃描埠 ( 除了出於效率的考慮,常用的埠前移 )。可以指定 -r 來順序埠掃描。

--port-ratio <ratio>

 

掃描 nmap-services 中給出的目標的一定比例,這個值在 1.0-0.0 之間。

--top-ports

 

掃描 nmap-services 中的前多少個埠。

六.服務和版本掃描


-sV( 版本掃描 )

 

掃描服務版本,也可以用 -A 同時進行作業系統探測和版本掃描。

--allports(版本掃描時,不排除任何埠)

  1. 預設情況下,Nmap 版本探測會跳過 9100 TCP 埠,因為一些印表機簡單地列印送到該埠的 任何資料,這回導致數十頁 HTTP get 請求,二進位制 SSL 會話請求等等被列印出來。
  2. 這一行為可以通過修改或刪除 nmap-service-probes 中的 Exclude 指示符改變

--version-intensity <強度>(版本掃描強度)

 

強度在 1 到 9 之間,一般來說,強度越大,服務越有可能被正確識別

--version-light

 

相當於 --version-intensity 2

--vension-all

 

相當於 --version-intensity 9

--version-trace

 

列印出正在進行的版本掃描的詳細資訊

七、作業系統探測


-O (啟用作業系統檢測)

 

也可以使用 -A 來同時啟用作業系統檢測和版本掃描。

--osscan-limit

 

只對至少知曉一個埠開放或者關閉的主機進行作業系統探測

--osscan-guess;--fuzzy

 

無法確定作業系統型別的時候,預設進行推測。但是使用這兩項,會讓猜測更加準確。

--max-os-tries(作業系統識別重試次數)

 

預設重試五次,

八、掃描效能設定


--min-hostgroup <milliseconds>; --max-hostgroup <milliseconds> (調整並行掃描組的大小)

  1. Nmap 具有並行掃描多主機埠或版本的能力,Nmap 將多個目標IP地址 空間分成組,然後在同一時間對一個組進行掃描。通常,大的組更有效。缺點是隻有當整個組掃描結束後才會提供主機的掃描結果。如果組的大小定義為 50 ,則只有當前 50 個主機掃描結束後才能得到報告 ( 詳細模式中的補充資訊 除外 )。
  2. 預設方式下,Nmap 採取折衷的方法。開始掃描時的組較小,最小為 5 ,這樣便於儘快產生結果;隨後增長組的大小,最大為 1024 。確切的 大小依賴於所給定的選項。為保證效率,針對 UDP 或少量埠的 TCP 掃描,Nmap 使用大的組。--max-hostgroup 選項用於說明使用最大的組,Nmap 不會超出這個大小。--min-hostgroup 選項說明最小的組,Nmap 會保持組大於這個值。如果在指定的介面上沒有足夠的目標主機來滿足所指定的最小值,Nmap 可能會採用比所指定的值小的組。這兩個引數雖然很少使用, 但都用於保持組的大小在一個指定的範圍之內。
  3. 這些選項的主要用途是說明一個最小組的大小,使得整個掃描更加快速。通常選擇 256 來掃描C類網段。對於埠數較多的掃描,超出該值沒有意義。對於埠數較少的掃描,2048 或更大的組大小是有幫助的。

--min-parallelism <milliseconds>; --max-parallelism <milliseconds> ( 調整探測報文的並行度 )

 

這些選項控制用於主機組的探測報文數量,可用於埠掃描和主機發現。預設狀態下,Nmap 基於網路效能計算一個理想的並行度,這個值經常改變。如果報文被丟棄,Nmap 降低速度,探測報文數量減少。隨著網路效能的改善,理想的探測報文數量會緩慢增加。這些選項確定這個變數的大小範圍。預設狀態下,當網路不可靠時,理想的並行度值 可能為 1 ,在好的條件下,可能會增長至幾百。最常見的應用是 --min-parallelism 值大於 1 ,以加快 效能不佳的主機或網路的掃描。這個選項具有風險,如果過高則影響準確度,同時也會降低 Nmap 基於網路條件動態控制並行度的能力。這個值設為 10 較為合適, 這個值的調整往往作為最後的手段。

--max-parallelism選項通常設為1,以防止Nmap在同一時間 向主機傳送多個探測報文,和選擇--scan-delay同時使用非常有用。

--min-rtt-timeout <milliseconds>, --max-rtt-timeout <milliseconds>, --initial-rtt-timeout <milliseconds> (調整探測報文超時)

 

Nmap 使用一個執行超時值來確定等待探測報文響應的時間,隨後會放棄或重新 傳送探測報文。Nmap 基於上一個探測報文的響應時間來計算超時值,如果網路延遲比較顯著 和不定,這個超時值會增加幾秒。初始值的比較保守 ( 高 ) ,而當 Nmap 掃描無響應 的主機時,這個保守值會保持一段時間。這些選項以毫秒為單位,採用小的 --max-rtt-timeout 值,使 --initial-rtt-timeout 值大於預設值可以明顯減少掃描時間,特別 是對不能 ping 通的掃描 ( -P0 ) 以及具有嚴格過濾的網路。如果使用太 小的值,使得很多探測報文超時從而重新傳送,而此時可能響應訊息正在傳送,這使得整個掃描的時 間會增加。如果所有的主機都在本地網路,對於--max-rtt-timeout值來 說,100 毫秒比較合適。如果存在路由,首先使用ICMP ping 工具 ping 主機,或使用其 它報文工具如 hpings ,可以更好地穿透防火牆。檢視大約 10 個包的最大往返時間,然後將 --initial-rtt-timeout 設成這個時間的2倍,--max-rtt-timeout 可設成這個時間值的3倍或4倍。通常,不管 ping 的時間是多少,最大的 rtt 值不得小於 100ms , 不能超過 1000ms 。--min-rtt-timeout 這個選項很少使用,當網路不可靠時, Nmap 的預設值也顯得過於強烈,這時這個選項可起作用。當網路看起來不可靠時,Nmap 僅將 超時時間降至最小值,這個情況是不正常的,需要向 nmap-dev 郵件列表報告 bug 。

--host-timeout <milliseconds> ( 放棄低速目標主機 )

 

由於效能較差或不可靠的網路硬體或軟體、頻寬限制、嚴格的防火牆等原因, 一些主機需要很長的時間掃描。這些極少數的主機掃描往往佔 據了大部分的掃描時間。因此,最好的辦法是減少時間消耗並且忽略這些主機,使用 --host-timeout 選項來說明等待的時間(毫秒)。通常使用 1800000 來保證 Nmap 不會在單個主機上使用超過半小時的時間。需要注意的是,Nmap 在這半小時中可以 同時掃描其它主機,因此並不是完全放棄掃描。超時的主機被忽略,因此也沒有針對該主機的 埠表、作業系統檢測或版本檢測結果的輸出。

--scan-delay <milliseconds>; --max-scan-delay <milliseconds> ( 調整探測報文的時間間隔 )

 

這個選項用於 Nmap 控制針對一個主機傳送探測報文的等待時間(毫秒),在頻寬 控制的情況下這個選項非常有效。Solaris 主機在響應 UDP 掃描探測報文報文時,每秒 只傳送一個 ICMP 訊息,因此 Nmap 傳送的很多數探測報文是浪費的。--scan-delay 設為 1000,使 Nmap 低速執行。Nmap 嘗試檢測頻寬控制並相應地調整掃描的延遲,但並不影響明確說明何種速度工作最佳。--scan-delay 的另一個用途是躲閉基於閾值的入侵檢測和預防 系統 ( IDS/IPS )。

-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> ( 設定時間模板 )

 

上述優化時間控制選項的功能很強大也很有效,但有些使用者會被迷惑。此外, 往往選擇合適引數的時間超過了所需優化的掃描時間。因此,Nmap 提供了一些簡單的 方法,使用 6 個時間模板,使用時採用 -T 選項及數字 ( 0 - 5 ) 或名稱。模板名稱有 paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4) 和 insane (5)。前兩種模式用於 IDS 躲避,Polite 模式降低了掃描 速度以使用更少的頻寬和目標主機資源。預設模式為 Normal,因此 -T3 實際上是未做任何優化。Aggressive 模式假設使用者具有合適及可靠的網路從而加速 掃描。Insane 模式假設使用者具有特別快的網路或者願意為獲得速度而犧牲準確性。使用者可以根據自己的需要選擇不同的模板,由 Nmap 負責選擇實際的時間值。 模板也會針對其它的優化控制選項進行速度微調。例如,-T4 針對 TCP 埠禁止動態掃描延遲超過 10ms ,-T5 對應的值為 5ms 。 模板可以和優化調整控制選項組合使用,但模板必須首先指定,否則模板的標準值 會覆蓋使用者指定的值。建議在掃描可靠的網路時使用 -T4 ,即使 在自己要增加優化控制選項時也使用 ( 在命令列的開始 ) ,從而從這些額外的較小的優化 中獲益。如果用於有足夠的頻寬或乙太網連線,仍然建議使用 -T4 選項。 有些使用者喜歡 -T5 選項,但這個過於強烈。有時使用者考慮到避免使主機 崩潰或者希望更禮貌一些會採用 -T2 選項。他們並沒意識到 -T Polite 選項是如何的慢,這種模式的掃描比預設方式實際上要多花 10 倍的時間。預設時間 選項 ( -T3 ) 很少有主機崩潰和頻寬問題,比較適合於謹慎的使用者。不進行 版本檢測比進行時間調整能更有效地解決這些問題。雖然 -T0 和 -T1 選項可能有助於避免 IDS 告警,但在進行上千個主機或埠掃描時,會顯著增加時間。對於這種長時間的掃描,寧可設定確切的時間值,而不要去依賴封裝的 -T0 和 -T1 選項。T0 選項的主要影響是對於連續掃描,在一個時間只能掃描一個埠, 每個探測報文的傳送間隔為 5 分鐘。T1 和 T2 選項比較類似, 探測報文間隔分別為 15 秒和 0.4 秒。 T3 是 Nmap 的預設選項,包含了並行掃描。 T4 選項與 --max-rtt-timeout 1250 --initial-rtt-timeout 500 等價,最大 TCP 掃描延遲為 10ms 。T5 等價於 --max-rtt-timeout 300 --min-rtt-timeout 50 --initial-rtt-timeout 250 --host-timeout 900000,最大 TCP 掃描延遲為 5ms。

--max-retries < 次數 >

 

沒有響應後的重試次數

--script-timeout <time> ( 設定指令碼超時時間 )

 

預防指令碼的bug導致影響效率

--min-rate <number>; --max-rate <number> ( 發包速度控制 )

 

最少每秒發多少,最多每秒發多少。如果 0.1 的話就是 10 秒一個包的意思

--defeat-rst-ratelimit

 

忽略系統 reset 包的速率限制

--defeat-icmp-ratelimit

 

忽略系統 ICMP 錯誤訊息速率限制

--nsock-engine epoll|kqueue|poll|select

 

選擇系統 IO 模型,nmap -V 可以檢視支援哪些

九、防火牆繞過/ IDS 躲避

-f ( 報文分段 ); --mtu ( 使用指定的MTU )

  1. -f 選項要求掃描時 ( 包挺 ping 掃描)使用小的 IP 包分段。其思路是將 TCP 頭分段在幾個包中,使得包過濾器、IDS 以及其它工具的檢測更加困難。必須小心使用這個選項,有些系統在處理這些小包時存在問題,例如舊的網路嗅探器 Sniffit 在接收到第一個分段時會立刻出現分段錯誤。該選項使用一次, Nmap 在 IP 頭後將包分成 8 個位元組或更小。因此,一個 20 位元組的 TCP 頭會被分成 3 個包,其中 2 個包分別有TCP頭的 8 個位元組,另 1 個包有 TCP 頭的剩下 4 個位元組。當然,每個包都有一個 IP 頭。再次使用 -f 可使用 16 位元組的分段 ( 減少分段數量 ) 。
  2. 使用 --mtu 選項可以自定義偏移的大小,使用時不需要 -f ,偏移量必須是 8 的倍數。包過濾器和防火牆對所有的 IP 分段排隊,如 Linux 核心中的 CONFIG-IP-ALWAYS-DEFRAG 配置項,分段包不會直接使用。一些網路無法 承受這樣所帶來的效能衝擊,會將這個配置禁止。其它禁止的原因有分段 包會通過不同的路由進入網路。一些源系統在核心中對傳送的報文進行分段,使用 iptables 連線跟蹤模組的 Linux 就是一個例子。當使用類似 Ethereal 的嗅探器時,掃描必須保證傳送的報文要分段。如果主機作業系統會產生問題,嘗試使用 --send-eth 選項以避開 IP 層而直接傳送原始的乙太網幀。

-D <肉雞1 ,肉雞2,...>( 結合肉雞干擾進行掃描 )

 

首先必須讓目標主機認為是肉雞在掃描它,IDS 雖然能夠捕捉到掃描的 IP ,但是並知道哪個是真實的攻擊者,使用逗號來分隔每個肉雞,如果使用了ME 選項,nmap 將不會使用本機地址,否則 nmap 將會把本機地址放在一個隨機位置。注意,太多的欺騙包甚至可能造成 DDoS 的效果,而且很多多 IPS 會過濾欺騙包

-S <IP地址>( 源地址欺騙 )

 

偽造掃描請求源地址。在某些情況下,Nmap 可能無法確定你的源地址 ( 如果這樣,Nmap 會給出 提示 )。此時,使用 -S 選項並說明所需傳送包的介面 IP 地址。-e 選項常在這種情況下使用,也可採用 -P0 選項。

-e <interface>( 指定使用的網路介面 )

 

告訴 nmap 使用哪個網路介面收發報文

--source-port <portnumber>; -g <portnumber> ( 源埠欺騙 )

 

只需要提供一個埠號,Nmap 就可以從這些 埠傳送資料。為使特定的作業系統正常工作,Nmap 必須使用不同的埠號。 DNS 請求會忽略 --source-port 選項,這是因為 Nmap 依靠系 統庫來處理。大部分 TCP 掃描,包括 SYN 掃描,可以完全支援這些選項,UDP 掃描同樣如此。

--date <hex string>

 

可以用這樣的格式指定值 --data 0xdeadbeef --data \xCA\xFE\x09 如果指定 0x00ff 這個的數字,將不會做位元組序轉換。確保你的位元組序,對方可以接受

--data-string <string>

 

例如,--data-string "Scan conducted by Security Ops, extension 7192" or --data-string "Ph34r my l33t skills"

--data-length <number> ( 傳送報文時 附加隨機資料 )

 

這個選項告訴 Nmap 在傳送的報文上 附加指定數量的隨機位元組。作業系統檢測 ( -O )包不受影響。

--ip-options <S|R [route]|L [route]|T|U ... >;

--ip-options <hex string> (Send packets with specified ip options)

 

指定IP頭

--proxies <Comma-separated list of proxy URLs>

 

設定代理,支援 http 代理和 socks4 代理

--badsum( 讓 nmap 使用一個偽造的不合法的 checksum )

 

這樣的資料包一般都會丟棄,如果收到任何回覆,這個回覆一定來自防火牆

--adler32( 使用棄用的 Adler32 來代替 CRC32C 做 SCTP 的 checksum )

 

這是為了從舊版的 SCTP 協議裝置獲得響應

--ttl <value> ( 設定 IP time-to-live 域)

 

設定 IPv4 報文的 time-to-live 域為指定的值。

--randomize-hosts ( 對目標主機的順序隨機排列 )

 

告訴 Nmap 在掃描主機前對每個組中的主機隨機排列,最多可達 8096 個主機。

--spoof-mac <mac address,prefix,or vendor name> ( MAC 地址哄騙 )

 

要求 Nmap 在傳送原乙太網幀時使用指定的 MAC 地址,這個選項隱含了 --send-eth 選項,以保證 Nmap 真正傳送乙太網包。MAC 地址有幾種格式。如果簡單地使用字串“ 0 ”,Nmap 選擇一個完全隨機的 MAC 地址。如果給定的字元品是一個 16 進位制偶數 ( 使用 : 分隔 ),Nmap 將使用這個 MAC 地址。 如果是小於 12 的 16 進位制數字,Nmap 會隨機填充剩下的 6 個位元組。如果引數不是 0 或 16 進 制字串,Nmap 將通過 nmap-mac-prefixes 查詢 廠商的名稱 ( 大小寫區分 ) ,如果找到匹配,Nmap 將使用廠商的 OUI ( 3 位元組字首 ),然後 隨機填充剩餘的 3 個節字。正確的 --spoof-mac 引數有, Apple, 0,01:02:03:04:05:06, deadbeefcafe,0020F2, 和 Cisco。

十、輸出


-oN <filespec> (標準輸出)

 

將結果輸入制定檔案

-oX <filespec> (XML輸出)

 

將XML輸出寫入指定檔案

-oS <filespec> (ScRipT KIdd|3 oUTpuT)

 

指令碼小子輸出類似於互動工具輸出,這是一個事後處理,適合於 'l33t HaXXorZ, 由於原來全都是大寫的Nmap輸出。

-oG <filespec> (Grep輸出)

 

這種方式最後介紹,因為不建議使用。XML輸格式很強大,便於有經驗 的使用者使用。XML是一種標準,由許多解析器構成,而Grep輸屆更簡化。XML是可擴充套件的,以支援新發布的Nmap特點。使用Grep輸出的目的是忽略這些 特點,因為沒有足夠的空間。然而,Grep輸出仍然很常使用。它是一種簡單格式,每行一個主機,可以 通過UNIX工具(如grep、awk、cut、sed、diff)和Perl方便地查詢和分解。常可 用於在命令列上進行一次性測式。查詢ssh埠開啟或執行Sloaris的主機,只需要一個簡單的grep主機說明,使用通道並通過awk或cut命令列印所需的域。Grep輸出可以包含註釋(每行由#號開始)。每行由6個標記的域組成,由製表符及 冒號分隔。這些域有主機,埠, 協議,忽略狀態,作業系統,序列號, IPID和狀態。這些域中最重要的是Ports,它提供了所關注的埠的細節,埠項由逗號分隔。每個埠項代表一個所關注的埠,每個子域由/分隔。這些子域有:埠號, 狀態,協議, 擁有者,服務, SunRPCinfo 和版本資訊。對於XML輸出,本手冊無法列舉所有的格式,有關Nmap Grep輸出的更詳細資訊可 查閱http://www.unspecific.com/nmap-oG-output

-oA <basename> ( 輸出至所有格式 )

 

為使用方便,利用 -oA<basename> 選項 可將掃描結果以標準格式、 XML 格式和 Grep 格式一次性輸出。分別存放在 <basename>.nmap ,<basename>.xml 和 <basename>.gnmap 檔案中。也可以在檔名前 指定目錄名,如在UNIX中,使用 ~/nmaplogs/foocorp/, 在 Window 中,使用 c:\hacking\sco on Windows

-v( 提高輸出資訊的詳細程度 )

-d [level]( 設定除錯級別 )

--packet-trace( 跟蹤發出的報文 )

-iflist( 列舉埠和路由 )

--append-out( 在輸出檔案住追加 )

 

但對於 XML ( -oX )掃描輸出 檔案無效,無法正常解析,需要手工修改。

--resume <filename> ( 繼續中斷的掃描 )

 

如果標準掃描 ( -oN ) 或 Grep 掃描 ( -oG ) 日誌 被保留,使用者可以要求 Nmap 恢復終止的掃描,只需要簡單地使用選項 --resume 並說明標準 /Grep 掃描輸出檔案,不允許 使用其它引數,Nmap 會解析輸出檔案並使用原來的格式輸出。使用方式如 nmap --resume <logfilename>。Nmap 將把新地結果新增到檔案中,這種方式不支援 XML 輸出格式,原因是將兩次執行結果合併至一個XML檔案比較困難。

--stylesheet <path or URL> (設定XSL樣式表,轉換XML輸出)

--webxml

--stylesheet https://nmap.org/svn/docs/nmap.xsl 的簡寫。

--no-stylesheet (忽略 XML 宣告的 XSL 樣式表)

--open

 

只顯示開放或者可能開放的埠

--stats-every <time>(週期性的輸出統計資料)

--stats-every 10s 每 10 秒輸出一次,這個輸出會被輸出到標準輸出,和 XML 檔案

--reason(列印主機和埠狀態的原因)

十一、其他選項


-A(強力掃描模式)

 

個選項啟用了作業系統檢測 ( -O ) 和版本掃描 ( -sV ),以後會增加更多的功能。 目的是啟用一個全面的掃描選項集合,不需要使用者記憶大量的 選項。這個選項僅僅啟用功能,不包含用於可能所需要的 時間選項 ( 如 -T4 ) 或細節選項 ( -v )。

--datadir <資料夾名稱> ( 說明 nmap 使用者資料檔案的位置 )

 

Nmap 在執行時從檔案中獲得特殊的資料,這些檔案有 nmap-service-probes, nmap-services, nmap-protocols, nmap-rpc, nmap-mac-prefixes 和 nmap-os-fingerprints 。Nmap 首先 在 --datadir 選項說明的目錄中查詢這些檔案。 未找到的檔案,將在 BMAPDIR 環境變數說明的目錄中查詢。 接下來是用於真正和有效 UID 的 ~/.nmap 或 Nmap 可執行程式碼的位置 ( 僅 Win32 ) ;然後是是編譯位置,如 /usr/local/share/nmap/usr/share/nmap。 Nmap 查詢的最後一個位置是當前目錄。

--send-ip (在原IP層傳送)

 

要求 Nmap 通過原 IP 套接字傳送報文,而不是低層的以 太網幀。這是 --send-eth 選項的補充。

--send-eth

 

使用 raw ethernet 包來發包

--privileged (假定使用者具有全部許可權)

 

告訴 Nmap 假定其具有足夠的許可權進行源套接字包傳送、 報文捕獲和類似 UNIX 系統中根使用者操作的許可權。預設狀態下, 如果由 getuid() 請求的類似操作不為 0 ,Nmap 將退出。 --privileged 在具有 Linux 核心效能的類似 系統中使用非常有效,這些系統配置允許非特權使用者可以進行 原報文掃描。需要明確的是,在其它選項之前使用這些需要權 限的選項 ( SYN 掃描、作業系統檢測等 )。 Nmap-PRIVILEGED 變數 設定等價於 --privileged 選項。

--unprivileged( 假定使用者沒有特權 )

--interactive ( 在互動模式中啟動 )

 

在互動模式中啟動 Nmap ,提供互動式的 Nmap 提示,便於 進行多個掃描(同步或後臺方式)。對於從多使用者系統中掃描 的使用者非常有效,這些使用者常需要測試他們的安全性,但不希望 系統中的其它使用者知道他們掃描哪些系統。使用 --interactive 啟用這種方式,然後輸入 h 可 獲得幫助資訊。由於需要對正確的 shell 程式和整個功能非常熟悉, 這個選項很少使用。這個選項包含了一個!操作符,用於執行 shell 命令, 這是不安裝 Nmap setuid root 的多個原因之一。

--release-memory ( 退出後 namp 自己釋放記憶體)

--servicedb <services file>

 

nmap-service 檔案的路徑

--versiondb <service probes file>

 

nmap-service-probes 檔案路徑

-V;--version (檢視版本)

-h;--help(簡要的使用介紹)

十二、NSE指令碼引擎


 

https://nmap.org/nsedoc/ 具體指令碼的使用手冊

--script <指令碼名>

 

指令碼名字前面加 + 會讓指令碼強制執行指定名字的時候可以使用 shell 風格的萬用字元 "*"。

nmap --script "http-*"

 

載入所有的名字以 http- 開頭的指令碼,必須用引號包起來,讓萬用字元不受 shell 影響。

nmap --script "not intrusive"

 

載入所有非入侵型別的指令碼

nmap --script "default or safe"

 

在功能上等同於 nmap --script "default,safe" 載入了所有預設類或者安全類,或者是兩者都包含的。

nmap --script "default and safe"

 

載入在同屬於兩者的指令碼

nmap --script "(default or safe or intrusive) and not http-*"

 

載入屬於預設類或者安全類或者入侵類的但是名字開頭不是 http- 的指令碼

--script-args <n1>=<v1>,<n2>={<n3>=<v3>},<n4>={<v4>,<v5>}

 

指定指令碼引數,裡面不能有 ‘{’, ‘}’, ‘=’, or ‘,’,如果要用就用 \ 轉義

--script-args-file <filename>

 

從一個檔案獲取指令碼引數

--script-trace

 

列印出指令碼執行的具體資訊

--script-updatedb

 

更新指令碼庫

歡迎加群與我們一起交流

圖片描述

相關文章