天天看點

網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援

一.Nmap

Nmap 是一個網絡連接配接端掃描軟體,用來掃描網上電腦開放的網絡連接配接端。确定哪些服務運作在哪些連接配接端,并且推斷計算機運作哪個作業系統(這是亦稱 fingerprinting)。它是網絡管理者必用的軟體之一,以及用以評估網絡系統安全。它不局限于僅僅收集資訊和枚舉,同時可以用來作為一個漏洞探測器或安全掃描器。

1.1. 編譯安裝

1.1.1. Linux系統

1.1.1.1. 下載下傳源碼包

下載下傳位址:

https://nmap.org/download.html https://nmap.org/dist/nmap-7.92.tar.bz2 https://nmap.org/dist/nmap-7.92.tgz

1.1.1.2. 解壓

bzip2 -cd nmap-.tar.bz2 | tar xvf -

tar xvjf nmap-.tar.bz2

1.1.1.3. 配置建構系統

建構指令:./configure

常用參數:

a) --prefix=

此選項決定Nmap及其元件的安裝位置。預設情況下,字首/usr/local,即意味着NMA安裝在/usr/local/bin,nmap.1被安裝在/usr/local/man/man1,和資料檔案(nmap-os-db, nmap-services,nmap-service-probes等)下安裝/usr/local/share/nmap。如果你隻是想改變某些元件的路徑,可使用的選項--bindir、--datadir和--mandir。

b) --without-zenmap

此選項可防止安裝 Zenmap 圖形前端。

c) --with-openssl=

版本檢測系統和 Nmap 腳本引擎能夠使用免費的 OpenSSL 庫探測 SSL 加密服務。通常,Nmap 建構系統會在您的系統上查找這些庫,如果找到,則包含此功能。如果它們位于編譯器預設不搜尋的位置,但您仍希望使用它們,可使用此選項指定。

d) --with-libpcap=

Nmap 使用Libpcap庫來捕獲原始 IP 資料包。Nmap通常會在您的系統上查找 Libpcap的現有副本,并在版本号和平台合适時使用該副本。否則 Nmap 擷取 Libpcap副本(libpcap/NMAP_MODIFICATIONS在Nmap源目錄中描述了一些本地修改)。如果您希望強制Nmap與您自己的Libpcap連結,可使用此選項傳遞給configure。

e) --with-libpcre=

PCRE 是一個與 Perl 相容的正規表達式庫,可從

http://www.pcre.org

獲得。Nmap 通常會在你的系統上尋找一個副本,如果失敗,然後回退到它自己的副本。如果您的 PCRE 庫不在編譯器的标準搜尋路徑中,Nmap 可能找不到它。在這種情況下,您可以通過指定此選項。

f) --with-libdnet=

Libdnet 是一個優秀的網絡庫,Nmap 使用它來發送原始以太網幀。Nmap 樹中的版本被大量修改(特别是 Windows 代碼),是以預設是使用包含的版本。如果您希望改用系統上已安裝的版本,可使用此選項傳遞給configure。

g) --with-localdirs

此選項告訴Nmap的預設使用/usr/local/lib和/usr/local/include重要的庫和頭檔案。

1.1.1.4. 編譯安裝

編譯安裝指令:make & make install

1.1.2. Windows系統

1.1.2.1. 依賴下載下傳

1.1.2.2. 下載下傳源碼包

1.1.2.3. 解壓

1.1.2.4. 配置建構系統

1.1.2.5. 編譯安裝

備注:

Windows運作nmap需要安裝winpcap(https://nmap.org/npcap/dist/npcap-1.50.exe)

1.1.3. 主要依賴庫說明

1.1.3.1. Libpcap(Packet Capture Library)

Libpcap是Unix/Linux平台下的網絡資料包捕獲函數庫,它是一個獨立于系統的使用者層包捕獲的API接口,為底層網絡監測提供了一個可移植的架構。主要功能如下:

a. 資料包捕獲:捕獲流經網卡的原始資料包

b. 自定義資料包發送:任何構造格式的原始資料包

c. 流量采集與統計:網絡采集的中流量資訊

d.  規則過濾:提供自帶規則過濾功能,按需要選擇過濾規則

1.1.3.2. Libpcap工作原理

Libpcap庫主要有兩部分組成:網絡分接口(Network Tap)和資料過濾器(Packet Filter)。

網絡分接口從網絡裝置驅動程式中收集資料拷貝(旁路機制),過濾器決定是否接收該資料包。Libpcap利用BSD Packet Filter(BPF)算法對網卡接收到的鍊路層資料包進行過濾。BPF算法的基本思想是在有BPF監聽的網絡中,網卡驅動将接收到的資料包複制一份交給BPF過濾器,過濾器根據使用者定義的規則決定是否接收此資料包以及需要拷貝該資料包的那些内容,然後将過濾後的資料給與過濾器相關聯的上層應用程式。如果沒有定義規則,則把全部資料交給上層應用程式。

網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援

如圖所示一個資料包的捕捉分為三個主要部分:

- 面向底層包捕獲、

- 面向中間層的資料包過濾

- 面向應用層的使用者接口

Libpcap的包捕獲機制就是在資料鍊路層加一個旁路處理。當一個資料包到達網絡接口時,libpcap首先利用鍊路層PF_PACKET原始套接字從鍊路層驅動程式中獲得該資料包的拷貝,再通過Tap函數将資料包發給BPF過濾器。BPF過濾器根據使用者已經定義好的過濾規則對資料包進行逐一比對,比對成功則放入核心緩沖區,并傳遞給使用者緩沖區,比對失敗則直接丢棄。如果沒有設定過濾規則,所有資料包都将放入核心緩沖區,并傳遞給使用者層緩沖區。是以整個過程并不幹擾系統自身的網路協定棧的處理。

1.1.3.3. Libpcap使用流程

1) 決定對那一個接口進行嗅探,如eth0。我們也可以用一個字元串來定義這個裝置。

2) 初始化pcap。使用檔案句柄傳入需要嗅探的裝置。同時支援多個裝置的嗅探。

3) 設定BPF. 建立一個規則集合,編譯并且使用它。這個過程分為三個階段:

a. 規則集合被置于一個字元串内,并且被轉換成能被pcap讀的格式。

b. 編譯該規則(就是調用一個不被外部程式使用的函數)。

c. 告訴pcap使用它來過濾資料包。

4) pcap進入它的主循環。在這個階段内pcap一直工作到它接收了所有我們想要的包為止。每當它收到一個包(或者多個資料包)就調用另一個已經定義好的函數,這個函數可以做我們想要的任何工作,比如它可以剖析包的上層協定資訊并給使用者列印出結果,它可以将結果儲存為一個檔案,或者什麼也不作。

5) 在嗅探到所需的資料後,我們要關閉會話并結束。

1.1.3.4. Libpcre(Perl Compatible Regular Expressions)

Libpcre是一個Perl庫,包括 perl 相容的用C語言編寫的正規表達式庫。

1.1.3.5. Libdnet()

Libnet是一個小型的接口函數庫,主要用C語言寫成,提供了低層網絡資料包的構造、處理和發送功能。主要特點如下:

a) 資料包構造:libnet提供了一系列的TCP/IP資料封包的構造函數以友善使用者使用。

b) 資料包的處理:libnet提供了一系列的輔助函數,利用這些輔助函數,幫助使用者簡化那些煩瑣的事務性的程式設計工作。

c) 資料包發送:libnet允許使用者在兩種不同的資料包發送方法中選擇。

d) 可移植性:libnet可以在Linux、FreeBSD、Solaris、WindowsNT等作業系統上運作,并且提供了統一的接口。

1.1.3.6. Openssl(Secure Sockets Layer)

OpenSSL是一個開放源代碼的軟體庫包,應用程式可以使用這個包來進行安全通信,避免竊聽,同時确認另一端連接配接者的身份。主要特點如下:

a) 資料保密性:資訊加密就是把明碼的輸入檔案用加密算法轉換成加密的檔案以實作資料的保密。加密的過程需要用到密鑰來加密資料然後再解密。沒有了密鑰,就無法解開加密的資料。資料加密之後,隻有密鑰要用一個安全的方法傳送。加密過的資料可以公開地傳送。

b) 資料完整性:加密也能保證資料的一緻性。例如:消息驗證碼(MAC),能夠校驗使用者提供的加密資訊,接收者可以用MAC來校驗加密資料,保證資料在傳輸過程中沒有被篡改過。

c) 安全驗證:加密的另外一個用途是用來作為個人的辨別,使用者的密鑰可以作為他的安全驗證的辨別。SSL是利用公開密鑰的加密技術(RSA)來作為使用者端與伺服器端在傳送機密資料時的加密通訊協定。

1.2. 核心功能

1.2.1. 主機發現

Nmap發現主機的4種方式:ICMP-echo請求(ping)、向443端口發送TCP-SYN包、向80端口發送TCP-ACK包和ICMP-時間戳請求。

1.2.2. 端口掃描

用于确定目标主機的TCP/UDP端口的開放情況。端口狀态如下:

1.2.2.1. 開放(Open)

應用程式正在該端口接收 TCP 連接配接或者 UDP 封包,發現這一點常常是端口掃描的主要目的,安全意識強的人知道每個開放的端口都是攻擊的入口,攻擊者或者入侵者想要發現開放的端口,而管理者則試圖關閉它們或者用防火牆保護它們以免阻礙了合法使用者,非安全檢測性質的掃描可能對開放的端口也感興趣,因為它們顯示了網絡上那些服務可供使用。

1.2.2.2. 關閉(Closed)

關閉的端口對于 Nmap 來說是可到達的(它接受 Nmap 的探測封包并作出響應),但沒有應用程式在監聽,它們表明該 IP 位址上的主機是存活的,例如進行主機發現或者 ping 掃描的時候,同時也是進行作業系統探測的一部分,因為關閉的端口代表主機是可到達的,也許值得再掃描一下,可能等一下這個端口就開放了,系統管理者可能會考慮用防火牆封鎖這樣的端口,那樣他們就會被顯示為被過濾的狀态。

1.2.2.3. 過濾(Filtered)

由于包過濾阻止了探測封包到達端口,是以 Nmap 無法确定該端口是否開放,過濾可能來自專業的防火牆裝置、路由器規則或者主機上的軟體防火牆,這樣的端口幾乎不提供任何資訊,有時候它們響應 ICMP 錯誤消息如類型 3 代碼 13(destination unreachable: communication administratively prohibited),但更普遍的是過濾器隻是丢棄探測幀,不做任何響應,這迫使 Nmap 重試若幹次以訪萬一探測包是由于網絡阻塞丢棄的,這會使得掃描速度明顯變慢。

1.2.2.4. 未被過濾(Unfiltered)

未被過濾的狀态意味着端口可到達,但 Nmap 不能确定它是開放還是關閉,隻有 ACK 掃描才會把端口分類到這種狀态,用其它類型的掃描方式如視窗掃描,SYN 掃描,或者 FIN 掃描,來掃描這種未被過濾的端口可以幫助确定端口是否開放。

1.2.2.5. 開放或被過濾(Open|Filtered)

當無法确定端口是開放還是被過濾時,Nmap 就把端口劃分成這種狀态,開放的端口不響應就是一個例子,沒有響應也可能意味着封包過濾器丢棄了探測封包或者由它引發的任何回應,是以 Nmap 無法确定該端口是開放的還是被過濾的,UDP、IP 協定、FIN、NULL 和 Xmas 掃描都可能把端口歸為此類。

1.2.2.6. 關閉或被過濾(Closed|Filtered)

該狀态用于 Nmap 不能确定端口是關閉的還是被過濾時,它隻可能出現于 IPID Idle 掃描中。

1.2.3. 服務與版本探測

在發現開放端口後,Nmap可進一步檢查目标主機的檢測服務協定、應用程式名稱、版本号等資訊。

1.2.4. 作業系統探測

Nmap向遠端主機發送一系列資料包,并能夠将遠端主機的響應與作業系統指紋資料庫進行比較。如果發現了比對結果,它就會顯示比對的作業系統。它确實可能無法識别目标主機的作業系統;在這種情況下,如果您知道目标系統上使用的何種作業系統,可在它提供的從URL裡送出有關資訊,更新它的作業系統指紋資料庫。

1.3. 常用指令

1.3.1. 目标規格(Target Specification)

1.3.1.1. -iL (Input from list)

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

1.3.1.2. -iR (Choose random targets)

随機選擇一定數量的目标

1.3.1.3. --exclude [,[,...]] (Exclude hosts/networks)

不包含的主機

1.3.1.4. --excludefile (Exclude list from file)

不包含的主機的清單

1.3.2. 主機發現(Host Discovery)

a) 如果沒有給出主機發現的選項,Nmap 就發送一個TCP ACK封包到80端口和一個ICMP回聲請求到每台目标機器。

b) 一個例外是ARP掃描用于區域網路上的任何目标機器。對于非特權UNIX shell使用者,使用connect()系統調用會發送一個SYN封包而不是ACK 這些預設行為和使用-PA -PE選項的效果相同。

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

1.3.2.1. -sL (List Scan)

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

1.3.2.2. -sn (No port scan)

與-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和回應請求)就被覆寫了。

1.3.2.3. -Pn (No ping)

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

1.3.2.4. -PS (TCP SYN 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報頭之外沒有附加的資料(除非有任何資料——資料字元串,或者——資料長度選項被指定)。

1.3.2.5. -PA (TCP ACK Ping)

a) 該選項發送一個設定了SYN标志位的空TCP封包,預設端口為80。不同的端口可以作為選項制定(如 -PS22,23,25,80,113,1050,3500)

b) SYN标志位告訴對方您正試圖建立一個連接配接。 通常目标端口是關閉的,一個RST (複位) 包會發回來。 如果碰巧端口是開放的,目标會進行TCP三步握手的第二步,回應 一個SYN/ACK TCP封包。

c) 無論RST還是SYN/ACK響應都告訴Nmap該主機正在運作。然後運作Nmap的機器則會扼殺這個正在建立的連接配接, 發送一個RST而非ACK封包,ST封包是運作Nmap的機器而不是Nmap本身響應的,因為它對收到 的SYN/ACK感到很意外。

1.3.2.6. -PU (UDP Ping)

1.3.2.7. -PY  (SCTP INIT Ping)

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

1.3.2.9. -PO  (IP Protocol Ping)

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

1.3.2.11. --discovery-ignore-rst

1.3.2.12. --traceroute (Trace path to host)

1.3.2.13. -n (No DNS resolution)

1.3.2.14. -R (DNS resolution for all targets)

1.3.2.15. --resolve-all (Scan each resolved address)

1.3.2.16. --system-dns (Use system DNS resolver)

1.3.2.17. --dns-servers [,[,...]] (Servers to use for reverse DNS queries)

1.3.3. 掃描技術(Scan Techniques)

1.3.3.1. -sS (TCP SYN scan)

1.3.3.2. -sT (TCP connect scan)

1.3.3.3. -sU (UDP scans)

1.3.3.4. -sY (SCTP INIT scan)

1.3.3.5. -sN; -sF; -sX (TCP NULL, FIN, and Xmas scans)

1.3.3.6. -sA (TCP ACK scan)

1.3.3.7. -sW (TCP Window scan)

1.3.3.8. -sM (TCP Maimon scan)

1.3.3.9. --scanflags (Custom TCP scan)

1.3.3.10. -sZ (SCTP COOKIE ECHO scan)

1.3.3.11. -sI [:] (idle scan)

1.3.3.12. -sO (IP protocol scan)

1.3.3.13. -b  (FTP bounce scan)

1.3.4. 端口規格和掃描順序(Port Specification and Scan Order)

1.3.4.1. -p (Only scan specified ports)

a) 制定掃描某個或某些端口用逗号分隔,或者用連結符号表示範圍也可

b) 對于-sO IP協定掃描,該選項用來指定協定号(0-255)

1.3.4.2. --exclude-ports  (Exclude the specified ports from scanning)

排除的端口,指定排除的端口,如果是指定排除的協定号的話,他的值在0-255之間

1.3.4.3. -F (Fast (limited port) scan)

快速掃描,在nmap的nmap-services 檔案中(對于-sO,是協定檔案)指定您想要掃描的端口。 這比掃描所有65535個端口快得多。

1.3.4.4. -r (Don't randomize ports)

順序掃描端口,預設情況下,Nmap按随機順序掃描端口。

1.3.4.5. --port-ratio 

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

1.3.4.6. --top-ports 

掃描nmap-services中的前多少個端口

1.3.5. 服務/版本檢測(Service/Version Detection)

1.3.5.1. -sV (Version detection)

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

1.3.5.2. --allports (Don't exclude any ports from version detection)

1.3.5.3. --version-intensity  (Set version scan intensity)

版本掃描強度,強度在1到9之間,一般來說,強度越大,服務越有可能被正确識别

1.3.5.4. --version-light (Enable light mode)

相當于 --version-intensity 2

1.3.5.5. --version-all (Try every single probe)

相當于 --version-intensity 9

1.3.5.6. --version-trace (Trace version scan activity)

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

1.3.6. 腳本掃描(Script Scan)

1.3.6.1. -sC

1.3.6.2. --script ||/|[,...]

1.3.6.3. --script-args =,={=},={,}

指定腳本參數,裡面不能有‘{’, ‘}’, ‘=’, or ‘,’,如果要用就用\轉義

1.3.6.4. --script-args-file 

從一個檔案擷取腳本參數

1.3.6.5. --script-help ||||all[,...]

列印腳本中的幫助資訊

1.3.6.6. --script-trace

列印出腳本執行的具體資訊

1.3.6.7. --script-updatedb

更新腳本庫

1.3.7. 作業系統檢測(OS Detection)

1.3.7.1. -O (Enable OS detection)

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

1.3.7.2. --osscan-limit (Limit OS detection to promising targets)

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

1.3.7.3. --osscan-guess; --fuzzy (Guess OS detection results)

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

1.3.7.4. --max-os-tries (Set the maximum number of OS detection tries against a target)

作業系統識别重試次數,預設重試五次

1.3.8. 時間與性能(Timing and Performance)

1.3.8.1. --min-hostgroup ; --max-hostgroup (Adjust parallel scan group sizes)

1.3.8.2. --min-parallelism ; --max-parallelism  (Adjust probe parallelization)

1.3.8.3. --min-rtt-timeout , --max-rtt-timeout , --initial-rtt-timeout  (Adjust probe timeouts)

1.3.8.4. --max-retries  (Specify the maximum number of port scan probe retransmissions)

沒有響應後的重試次數

1.3.8.5. --host-timeout  (Give up on slow target hosts)

1.3.8.6. --script-timeout 

設定腳本逾時時間,預防腳本的bug導緻影響效率

1.3.8.7. --scan-delay ; --max-scan-delay  (Adjust delay between probes)

1.3.8.8. --min-rate ; --max-rate  (Directly control the scanning rate)

控制發包速度,最少每秒發多少,最多每秒發多少。如果0.1的話就是10秒發送一個包

1.3.8.9. --defeat-rst-ratelimit

忽略系統reset包的速率限制

1.3.8.10. --defeat-icmp-ratelimit

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

1.3.8.11. --nsock-engine iocp|epoll|kqueue|poll|select

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

1.3.8.12. -T paranoid|sneaky|polite|normal|aggressive|insane (Set a timing template)

1.3.9. 防火牆/IDS 逃避和欺騙(Firewall/Ids Evasion and Spoofing)

1.3.9.1. -f (fragment packets); --mtu (using the specified MTU)

1.3.9.2. -D [,][,ME][,...] (Cloak a scan with decoys)

1.3.9.3. -S  (Spoof source address)

1.3.9.4. -e  (Use specified interface)

指定nmap使用哪個網絡接口收發封包

1.3.9.5. --source-port ; -g  (Spoof source port number)

1.3.9.6. --data  (Append custom binary data to sent packets)

1.3.9.7. --data-string  (Append custom string to sent packets)

1.3.9.8. --data-length  (Append random data to sent packets)

1.3.9.9. --ip-options ; --ip-options  (Send packets with specified ip options)

指定IP頭

1.3.9.10. --ttl  (Set IP time-to-live field)

為IPv4封包的time-to-live域設定指定的值

1.3.9.11. --randomize-hosts (Randomize target host order)

1.3.9.12. --spoof-mac  (Spoof MAC address)

1.3.9.13. --proxies  (Relay TCP connections through a chain of proxies)

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

1.3.9.14. --badsum (Send packets with bogus TCP/UDP checksums)

1.3.9.15. --adler32 (Use deprecated Adler32 instead of CRC32C for SCTP checksums)

從舊版的SCTP協定裝置獲得響應

1.3.10. 輸出(Output Options)

1~5項為格式輸出選項,6~12項為調試選項,13~18項為其他輸出選項。

1.3.10.1. -oN (normal output)

将結果輸入指定檔案

1.3.10.2. -oX  (XML output)

将XML輸出寫入指定檔案

1.3.10.3. -oS  (ScRipT KIdd|3 oUTpuT)

1.3.10.4. -oG  (grepable output)

1.3.10.5. -oA  (Output to all formats)

1.3.10.6. -v (Increase verbosity level) , -v (Set verbosity level)

1.3.10.7. -d (Increase debugging level) , -d (Set debugging level)

1.3.10.8. --reason (Host and port state reasons)

列印主機和端口狀态的原因

1.3.10.9. --stats-every  (Print periodic timing stats)

周期性的輸出統計資料

1.3.10.10. --packet-trace (Trace packets and data sent and received)

1.3.10.11. --open (Show only open (or possibly open) ports)

隻顯示開放或者可能開放的端口

1.3.10.12. --iflist (List interfaces and routes)

1.3.10.13. --append-output (Append to rather than clobber output files)

1.3.10.14. --resume  (Resume aborted scan)

1.3.10.15. --noninteractive (Disable runtime interactions)

1.3.10.16. --stylesheet  (Set XSL stylesheet to transform XML output)

1.3.10.17. --webxml (Load stylesheet from Nmap.Org)

1.3.10.18. --no-stylesheet (Omit XSL stylesheet declaration from XML)

1.3.11. 雜項(Misc)

1.3.11.1. -6 (Enable IPv6 scanning)

啟用IPv6掃描

1.3.11.2. -A (Aggressive scan options)

強力掃描模式

1.3.11.3. --datadir  (Specify custom Nmap data file location)

1.3.11.4. --servicedb  (Specify custom services file)

1.3.11.5. --versiondb  (Specify custom service probes file)

1.3.11.6. --send-eth (Use raw ethernet sending)

使用raw ethernet包來發包

1.3.11.7. --send-ip (Send at raw IP level)

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

1.3.11.8. --privileged (Assume that the user is fully privileged)

1.3.11.9. --unprivileged (Assume that the user lacks raw socket privileges)

1.3.11.10. --release-memory (Release memory before quitting)

1.3.11.11. -V; --version (Print version number)

1.3.11.12. -h; --help (Print help summary page)

1.4. 應用示例

1.4.1. 掃描機器上所有保留的 TCP 端口

nmap -v scanme.nmap.org

1.4.2. 隐形 SYN 掃描

nmap -sS -O scanme.nmap.org/24

對scanme.nmap.org所在/24網絡上256個IP中的每台機器進行隐形SYN掃描。由于 SYN 掃描和作業系統檢測,這需要 root 權限。

1.4.3. 主機枚舉和 TCP 掃描

nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127

在 198.116.0.0/16 位址空間中 255 個可能的 8 位子網的每個子網的前半部分啟動主機枚舉和 TCP 掃描。這會測試系統是在其标準端口上運作 SSH、DNS、POP3 或 IMAP,還是在端口 4564 上運作任何内容。

1.4.4. 随機選擇10000個主機掃描

nmap -v -iR 100000 -Pn -p 80

随機選擇 100,000 個主機并掃描它們以查找 Web 伺服器(端口 80)。

1.4.5. 掃描任何 Web 伺服器的 4096 個 IP

nmap -Pn -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20

掃描任何 Web 伺服器的 4096 個 IP(不 ping 它們)并将輸出儲存為 grepable 和 XML 格式。

1.4.6. 加載屬于預設類或者安全類或者入侵類的但是名字開頭不是http-的腳本

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

二.Nping

Nping 是一個用于網絡資料包生成、響應分析和響應時間測量的開源工具。Nping 可以為各種協定生成網絡資料包,允許使用者完全控制協定頭。雖然 Nping 可以用作簡單ping來檢測活動主機的實用程式,但它也可以用作網絡堆棧壓力測試、ARP中毒、拒絕服務攻擊、路由跟蹤和其他目的的原始資料包生成器。

Nping的回聲模式讓使用者檢視資料包在源主機和目标主機之間的傳輸過程中的變化。這為了解防火牆規則、檢測資料包損壞等的提供方法。

Nping 有一個非常靈活和強大的指令行界面,允許使用者完全控制生成的資料包。Nping的特點包括:

· 自定義 TCP、UDP、ICMP 和 ARP 資料包生成。

· 支援多目标主機規範。

· 支援多目标端口規範。

· 非 root 使用者的非特權模式。

· 用于進階故障排除和發現的回聲模式。

· 支援以太網幀生成。

· 支援 IPv6(目前處于試驗階段)。

· 在 Linux、Mac OS 和 MS Windows 上運作。

· 路由跟蹤功能。

· 高度可定制。

· 免費和開源。

2.1. 編譯

Nping是Nmap的子目錄,在編譯Nmap的時候會随之編譯,具體方法參考:編譯安裝

2.2. 協定說明

2.2.1. TCP協定

2.2.1.1. 簡述

傳輸控制協定(Transmission Control Protocol,TCP)是一種面向連接配接的、可靠的、基于位元組流的傳輸層通信協定。在 TCP 協定中,通過三次握手建立連接配接。通信結束後,還需要斷開連接配接。如果在發送資料包時,沒有正确被發送到目的地時,将會重新發送資料包。

2.2.1.2. 工作機制

TCP 協定的資料包進行傳輸采用的是伺服器端和用戶端模式。發送 TCP 資料請求方為用戶端,另一方則為伺服器端。用戶端要與伺服器端進行通信,伺服器端必須開啟監聽的端口,用戶端才能通過端口連接配接到伺服器,然後進行通信。

2.2.1.3. 作用

TCP 協定使用的是面向連接配接的方法進行通信的,其作用如下:

a) 面向流的處理:TCP 以流的方式處理資料。換句話說,TCP 可以一個位元組一個位元組地接收資料,而不是一次接收一個預訂格式的資料塊。TCP 把接收到的資料組成長度不等的段,再傳遞到網際層。

b) 重新排序:如果資料以錯誤的順序到達目的地,TCP 子產品能夠對資料重新排序,來恢複原始資料。

c) 流量控制:TCP 能夠確定資料傳輸不會超過目的計算機接收資料的能力。

d) 優先級與安全:為 TCP 連接配接設定可選的優先級和安全級别。

e) 适當的關閉:以確定所有的資料被發送或接收以後,再進行關閉連接配接。

2.2.1.4. 封包結構

TCP 封包是 TCP 層傳輸的資料單元,也稱為封包段。TCP 封包中每個字段如圖所示。

網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援

TCP 封包中每個字段的含義:

a) 源端口和目的端口字段

i. TCP源端口(Source Port):源計算機上的應用程式的端口号,占 16 位。

ii. TCP目的端口(Destination Port):目标計算機的應用程式端口号,占 16 位。

b) 序列号字段

CP序列号(Sequence Number):占 32 位。它表示本封包段所發送資料的第一個位元組的編号。在 TCP 連接配接中,所傳送的位元組流的每一個位元組都會按順序編号。當SYN标記不為1時,這是目前資料分段第一個字母的序列号;如果SYN的值是1時,這個字段的值就是初始序列值(ISN),用于對序列号進行同步。這時,第一個位元組的序列号比這個字段的值大1,也就是ISN加1。

c) 确認号字段

TCP 确認号(Acknowledgment Number,ACK Number):占 32 位。它表示接收方期望收到發送方下一個封包段的第一個位元組資料的編号。其值是接收計算機即将接收到的下一個序列号,也就是下一個接收到的位元組的序列号加1。

d) 資料偏移字段

TCP 首部長度(Header Length):資料偏移是指資料段中的“資料”部分起始處距離 TCP 資料段起始處的位元組偏移量,占 4 位。其實這裡的“資料偏移”也是在确定 TCP 資料段頭部分的長度,告訴接收端的應用程式,資料從何處開始。

e) 保留字段

保留(Reserved):占 4 位。為 TCP 将來的發展預留白間,目前必須全部為 0。

f) 标志位字段

i. CWR(Congestion Window Reduce):擁塞視窗減少标志,用來表明它接收到了設定 ECE 标志的 TCP 包。并且,發送方收到消息之後,通過減小發送視窗的大小來降低發送速率。

ii. ECE(ECN Echo):用來在 TCP 三次握手時表明一個 TCP 端是具備 ECN 功能的。在資料傳輸過程中,它也用來表明接收到的 TCP 包的 IP 頭部的 ECN 被設定為 11,即網絡線路擁堵。

iii. URG(Urgent):表示本封包段中發送的資料是否包含緊急資料。URG=1 時表示有緊急資料。當 URG=1 時,後面的緊急指針字段才有效。

iv. ACK:表示前面的确認号字段是否有效。ACK=1 時表示有效。隻有當 ACK=1 時,前面的确認号字段才有效。TCP 規定,連接配接建立後,ACK 必須為 1。

v. PSH(Push):告訴對方收到該封包段後是否立即把資料推送給上層。如果值為 1,表示應當立即把資料送出給上層,而不是緩存起來。

vi. RST:表示是否重置連接配接。如果 RST=1,說明 TCP 連接配接出現了嚴重錯誤(如主機崩潰),必須釋放連接配接,然後再重建立立連接配接。

vii. SYN:在建立連接配接時使用,用來同步序号。當 SYN=1,ACK=0 時,表示這是一個請求建立連接配接的封包段;當 SYN=1,ACK=1 時,表示對方同意建立連接配接。SYN=1 時,說明這是一個請求建立連接配接或同意建立連接配接的封包。隻有在前兩次握手中 SYN 才為 1。

viii. FIN:标記資料是否發送完畢。如果 FIN=1,表示資料已經發送完成,可以釋放連接配接。

g) 視窗大小字段

視窗大小(Window Size):占 16 位。它表示從 Ack Number 開始還可以接收多少位元組的資料量,也表示目前接收端的接收視窗還有多少剩餘空間。該字段可以用于 TCP 的流量控制。

h) TCP 校驗和字段

校驗位(TCP Checksum):占 16 位。它用于确認傳輸的資料是否有損壞。發送端基于資料内容校驗生成一個數值,接收端根據接收的資料校驗生成一個值。兩個值必須相同,才能證明資料是有效的。如果兩個值不同,則丢掉這個資料包。Checksum 是根據僞頭 + TCP 頭 + TCP 資料三部分進行計算的。

i) 緊急指針字段

緊急指針(Urgent Pointer):僅目前面的 URG 控制位為 1 時才有意義。它指出本資料段中為緊急資料的位元組數,占 16 位。當所有緊急資料處理完後,TCP 就會告訴應用程式恢複到正常操作。即使目前視窗大小為 0,也是可以發送緊急資料的,因為緊急資料無須緩存。

j) 可選項字段

選項(Option):長度不定,但長度必須是 32bits 的整數倍。

2.2.2. UDP協定

2.2.2.1. 簡述

使用者資料報協定(User Datagram Protocol,UDP)是一種傳輸層協定。在 TCP/IP 網絡中,它與 TCP 協定一樣用于處理資料包,是一種無連接配接的協定。

2.2.2.2. 工作機制

使用UDP傳輸資料時,由應用程式根據需要提供封包到達确認、排序、流量控制等功能。

通常情況下,UDP采用實時傳輸機制和時間戳來傳輸語音和視訊資料。

2.2.2.3. 作用

TCP 協定在進行資料傳輸時,需要建立連接配接,并且每次傳輸的資料都需要進行确認。當不再進行傳輸資料時,還需要斷開連接配接。這樣做雖然安全,但是效率較低。而 UDP 協定正好避免了這些過程,它是一種沒有複雜控制,提供面向無連接配接的通信服務協定。

2.2.2.4. 封包結構

UDP 封包分為 UDP 報頭和 UDP 資料區兩部分。報頭由 4 個 16 位長(2 位元組)字段組成,分别說明該封包的源端口、目的端口、封包長度和校驗值。UDP 封包格式如圖所示:

網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援

UDP 封包中每個字段的含義如下:

a) 源端口:這個字段占據 UDP 封包頭的前 16 位,通常包含發送資料報的應用程式所使用的 UDP 端口。接收端的應用程式利用這個字段的值作為發送響應的目的位址。這個字段是可選的,是以發送端的應用程式不一定會把自己的端口号寫入該字段中。如果不寫入端口号,則把這個字段設定為 0。這樣,接收端的應用程式就不能發送響應了。

b) 目的端口:接收端計算機上 UDP 軟體使用的端口,占據 16 位。

c) 長度:該字段占據 16 位,表示 UDP 資料報長度,包含 UDP 封包頭和 UDP 資料長度。因為 UDP 封包頭長度是 8 個位元組,是以這個值最小為 8。

d) 校驗值:該字段占據 16 位,可以檢驗資料在傳輸過程中是否被損壞。

2.2.3. ICMP協定

2.2.3.1. 簡述

控制封包協定(Internet Control Message Protocol,ICMP)是 TCP/IP 協定族的一個子協定。ICMP 協定用于在 IP 主機和路由器之間傳遞控制消息,描述網絡是否通暢、主機是否可達、路由器是否可用等網絡狀态。

2.2.3.2. 工作機制

2.2.3.3. 作用

資料包在發送到目标主機的過程中,通常會經過一個或多個路由器。而資料包在通過這些路由進行傳輸時,可能會遇到各種問題,導緻資料包無法發送到目标主機上。為了了解資料包在傳輸的過程中在哪個環節出現了問題,就需要用到 ICMP 協定。它可以跟蹤消息,把問題回報給源主機。

2.2.3.4. 封包結構

ICMP 封包一般為 8 個位元組,包括類型、代碼、校驗和擴充内容字段。ICMP 封包基本結構如圖所示。

網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援

其中,類型表示 ICMP 的消息類型,代碼表示對類型的進一步說明,校驗和表示對整個封包的封包資訊的校驗。

2.2.4. ARP協定

2.2.4.1. 簡述

ARP 是“Address Resolution Protocol”的縮寫,譯為“位址解析協定”,它是根據 IP 位址擷取實體位址的一個 TCP/IP 協定。

ARP 協定通過 IP 位址向 MAC 位址的轉換,解決網際層和網絡通路層的銜接問題。

由于 IP 位址和 MAC 位址定位方式不同,ARP 協定成為資料傳輸的必備協定。主機發送資訊前,必須通過 ARP 協定擷取目标 IP 位址對應的 MAC 位址,才能正确地發送資料包。

2.2.4.2. 工作機制

ARP 工作流程分為兩個階段,一個是 ARP 請求過程,另一個是 ARP 響應過程。工作流程如下所示。

網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援
網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援

在上面圖檔中,主機 A 的 IP 位址為 192.168.1.1,主機 B 的 IP 位址為 192.168.1.2。

主機 A 與主機 B 進行通信,需要擷取其 MAC 位址,基本流程如下:

a) 主機 A 以廣播形式向網絡中所有主機發送 ARP 請求,請求包中包含了目标 IP 位址 192.168.1.2。

b) 主機 B 接收到請求,發現自己就是主機 A 要找的主機,傳回響應,響應包中包含自己的 MAC 位址。

2.2.4.3. 作用

2.2.4.4. 封包結構

ARP 協定是通過封包進行工作的,ARP 封包格式如圖所示。

網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援

ARP 封包總長度為 28 位元組,MAC 位址長度為 6 位元組,IP 位址長度為 4 位元組。字段的含義如下:

a) 硬體類型:指明了發送方想知道的硬體接口類型,以太網的值為 1。

b) 協定類型:表示要映射的協定位址類型。它的值為 0x0800,表示 IP 位址。

c) 硬體位址長度和協定長度:分别指出硬體位址和協定的長度,以位元組為機關。對于以太網上 IP 位址的ARP請求或應答來說,它們的值分别為 6 和 4。

d) 操作類型:用來表示這個封包的類型,ARP 請求為 1,ARP 響應為 2,RARP 請求為 3,RARP 響應為 4。

e) 發送方 MAC 位址:發送方裝置的硬體位址。

f) 發送方 IP 位址:發送方裝置的 IP 位址。

g) 目标 MAC 位址:接收方裝置的硬體位址。

h) 目标 IP 位址:接收方裝置的IP位址。

ARP 資料包分為請求包和響應包,對應封包中的某些字段值也有所不同:

a) ARP 請求包封包的操作類型(op)字段的值為 request(1),目标 MAC 位址字段的值為 Target 00:00:00_00:00:00(00:00:00:00:00:00)(廣播位址)。

b) ARP 響應包封包中操作類型(op)字段的值為 reply(2),目标 MAC 位址字段的值為目标主機的硬體位址。

2.3.  常用指令

2.3.1. 探頭模式(PROBE MODES)

2.3.1.1. --tcp-connect (TCP Connect mode)

無特權的tcp連接配接探測模式

2.3.1.2. --tcp (TCP mode)

tcp探測模式

2.3.1.3. --udp (UDP mode)

udp探測模式

2.3.1.4. --icmp (ICMP mode)

icmp 探測模式

2.3.1.5. --arp (ARP/RARP mode)

arp 探測模式

2.3.1.6. --traceroute (Traceroute mode)

traceroute 探測模式

2.3.2. TCP連接配接模式(TCP CONNECT MODE)

2.3.2.1. -p , --dest-port (Target ports)

設定目标端口

2.3.2.2. -g , --source-port  (Spoof source port)

嘗試使用常用源端口

2.3.3. TCP探測模式(TCP PROBE MODE)

2.3.3.1. -p , --dest-port (Target ports)

2.3.3.2. -g , --source-port  (Spoof source port)

設定源端口

2.3.3.3. --seq  (Sequence Number)

設定序列号

2.3.3.4. --flags  (TCP Flags)

設定tcp辨別(ACK,PSH,RST,SYN,FIN...)

2.3.3.5. --win  (Window Size)

設定window大小

2.3.3.6. --badsum (Invalid Checksum)

使用随機無效校驗和

2.3.4. UDP探測模式(UDP PROBE MODE)

2.3.4.1. -p , --dest-port (Target ports)

2.3.4.2. -g , --source-port  (Spoof source port)

2.3.4.3. --badsum (Invalid Checksum)

2.3.5. ICMP探測模式(ICMP PROBE MODE)

2.3.5.1. --icmp-type (ICMP type)

icmp類型

2.3.5.2. --icmp-code 

(ICMP code)

icmp代碼

2.3.5.3. --icmp-id  (ICMP identifier)

設定辨別

2.3.5.4. --icmp-seq  (ICMP sequence)

設定序列号

2.3.5.5. --icmp-redirect-addr  (ICMP Redirect address)

設定重定向位址

2.3.5.6. --icmp-param-pointer  (ICMP Parameter Problem pointer)

設定參數問題指針

2.3.5.7. --icmp-advert-lifetime  (ICMP Router Advertisement Lifetime)

設定路由生命時間

2.3.5.8. --icmp-advert-entry , (ICMP Router Advertisement Entry)

添加路由實體

2.3.5.9. --icmp-orig-time  (ICMP Originate Timestamp)

設定初始時間戳

2.3.5.10. --icmp-recv-time  (ICMP Receive Timestamp)

設定接收時間戳

2.3.5.11. --icmp-trans-time  (ICMP Transmit Timestamp)

設定傳輸時間戳

2.3.6. ARP/RARP探測模式(ARP/RARP PROBE MODE)

2.3.6.1. --arp-type (ICMP Type)

ARP,ARP-reply,RARP,RARP-reply

2.3.6.2. --arp-sender-mac  (Sender MAC address)

設定發送者MAC位址

2.3.6.3. --arp-sender-ip  (Sender IP address)

設定發送者IP位址

2.3.6.4. --arp-target-mac  (target MAC address)

設定目标MAC位址

2.3.6.5. --arp-target-ip  (target ip address)

設定目标IP位址

2.3.7. IPv4 選項(IPv4 OPTIONS)

2.3.7.1. -S , --source-ip (Source IP Address)

設定源IP位址

2.3.7.2. --dest-ip  (Destination IP Address)

設定目标IP位址(與{target specification}等效)

2.3.7.3. --tos  (Type of Service)

設定服務字段(8bit)

2.3.7.4. --id  (Identification)

設定辨別字段(16bit)

2.3.7.5. --df (Don't Fragment)

設定不分段辨別

2.3.7.6. --mf (More Fragments)

設定多段辨別

2.3.7.7. --ttl  (Time To Live)

設定生存時間[0-255]

2.3.7.8. --badsum-ip (Invalid IP checksum)

使用随機無效校驗和

2.3.7.9. --ip-options , --ip-options  (IP Options)

設定IP選項

2.3.7.10. --mtu  (Maximum Transmission Unit)

設定最大傳輸單元

2.3.8. IPv6選項(IPv6 OPTIONS)

2.3.8.1. -6, --ipv6 (Use IPv6)

2.3.8.2. -S , --source-ip  (Source IP Address)

2.3.8.3. --dest-ip  (Destination IP Address)

2.3.8.4. --flow  (Flow Label)

2.3.8.5. --traffic-class  (Traffic Class)

2.3.8.6. --hop-limit  (Hop Limit)

2.3.9. 以太網選項(ETHERNET OPTIONS)

2.3.9.1. --dest-mac (Ethernet Destination MAC Address)

設定目标mac位址(ARP解析時不可使用)

2.3.9.2. --source-mac  (Ethernet Source MAC Address)

設定源mac位址

2.3.9.3. --ether-type  (Ethertype)

設定以太類型

2.3.10. 有效載荷選項(PAYLOAD OPTIONS)

2.3.10.1. --data (Append custom binary data to sent packets)

包含常用負載

2.3.10.2. --data-string  (Append custom string to sent packets)

包含常用ASCII文本

2.3.10.3. --data-length  (Append random data to sent packets)

包含len長度随機值作為負載

2.3.11. ECHO用戶端/伺服器(ECHO CLIENT/SERVER)

2.3.11.1. --ec , --echo-client (Run Echo client)

在客戶模式運作Nping

2.3.11.2. --es , --echo-server  (Run Echo server)

在伺服器模式運作Nping

2.3.11.3. --ep , --echo-port  (Set Echo TCP port number)

使用常用來監聽或連結

2.3.11.4. --nc, --no-crypto (Disable encryption and authentication)

關閉加密和驗證

2.3.11.5. --once (Serve one client and quit)

一次連接配接後停止伺服器

2.3.11.6. --safe-payloads (Zero application data before echoing a packet)

消除echoed包中的應用資料

2.3.12. 時間和性能(TIMING AND PERFORMANCE)

選項采用的機關'ms'(毫秒)、‘s’(秒)、‘m’(分)或者‘h’(小時),如30m、0.25h。

2.3.12.1. --delay (Delay between probes)

調節探測之間的延遲

2.3.12.2. --rate  (Send probes at a given rate)

每秒發送包的數量

2.3.13. 輸出(OUTPUT)

2.3.13.1. -v[], --verbose [] (Increase or set verbosity level)

設定備援等級,如:-v4

2.3.13.2. -q[], --reduce-verbosity [] (Decrease verbosity level)

設定備援和調試等級

2.3.13.3. -d[] (Increase or set debugging level)

設定調試等級,如:-d3

2.3.14. 雜項(MISC)

2.3.14.1. -h, --help (Display help)

顯示幫助資訊

2.3.14.2. -V, --version (Display version)

顯示目前版本

2.3.14.3. -c , --count  (Stop after a given number of rounds)

運作多次後停止

2.3.14.4. -e , --interface  (Set the network interface to be used)

2.3.14.5. --privileged (Assume that the user is fully privileged)

使用者全權限

2.3.14.6. --unprivileged (Assume that the user lacks raw socket privileges)

2.3.14.7. --send-eth (Use raw ethernet sending)

在原始以太網層發送包

2.3.14.8. --send-ip (Send at raw IP level)

使用原始IP接口發送包

2.3.14.9. --bpf-filter  --filter  (Set custom BPF filter)

描述通用BPF過濾器

2.3.14.10. -H, --hide-sent (Do not display sent packets)

不顯示發送的包

2.3.14.11. -N, --no-capture (Do not attempt to capture replies)

不抓獲回複包

2.4. 應用示例

2.4.1. TCP 探測模式掃描指定端口

nping -c 1 --tcp -p 80,433 scanme.nmap.org google.com

-c:指定目标每個主機的次數,--tcp:指定 TCP 探測模式, -p 80,433:指定目标端口

2.4.2. 

1個目标、3個端口、執行2次

nping --tcp -c 2 1.1.1.1 -p 100-102

2.4.3. 

3個目标、1個端口、執行2次

nping --tcp -c 2 1.1.1.1 2.2.2.2 3.3.3.3 -p 8080

2.4.4. 

1個目标、3個端口、執行1次、探測間延遲 500 毫秒

nping --tcp -c 1 --delay 500ms 1.1.1.1 2.2.2.2 3.3.3.3 -p 137-139

三.Ncat

它可以從指令行跨網絡讀取和寫入資料。Ncat 是為 Nmap 項目編寫的,是目前Netcat 家族中的巅峰之作。

它旨在成為一種可靠的後端工具,可立即為其他應用程式和使用者提供網絡連接配接。Ncat 不僅适用于 IPv4 和 IPv6,還為使用者提供了幾乎無限的潛在用途。

1. 将 TCP、UDP 和 SCTP 端口重定向到其他站點;

2. SSL 支援;

3. 通過 SOCKS4、SOCKS5 或 HTTP 代理的代理連接配接(以及可選的代理身份驗證)

3.1. 下載下傳

3.2. 編譯

3.2.1. Linux系統

3.2.2. Windows系統

參考:

https://secwiki.org/w/Nmap/Ncat_Portable#Building_Ncat_Portable_for_Windows

Windos環境依賴下載下傳如下表:

3.3. 運作模式

Ncat主要有兩種運作模式:連接配接模式和監聽模式;連接配接模式下,Ncat 作為用戶端工作。在偵聽模式下,它是一個伺服器。

3.3.1. 連接配接模式

在連接配接模式下, 和參數告訴要連接配接到什麼。是必需選項,可以是主機名或 IP 位址。 是可選項,它必須是十進制端口号;如果省略,則預設為 31337。

3.3.2. 監聽模式

在監聽模式下, 和控制伺服器将綁定的位址。該模式下,2個參數都是可選項。如果 省略,則預設偵聽 IPv4 和 IPv6 上的所有可用位址。如果省略,則預設為 31337。

3.4. 常用指令

3.4.1. 協定選項(Protocol Options)

3.4.1.1. -4 (IPv4 only)

僅強制使用 IPv4

3.4.1.2. -6 (IPv6 only)

僅強制使用 IPv6

3.4.1.3. -U, --unixsock (Use Unix domain sockets)

使用 Unix 域套接字而不是網絡套接字。此選項可以單獨用于流套接字,也可以與--udp資料報套接字結合使用。

該選項導緻 Ncat 使用 Unix 域套接字而不是網絡套接字。Unix 域套接字作為檔案系統中的一個條目存在。您必須提供要連接配接或偵聽的套接字的名稱。例如:

a) 要建立連接配接:ncat -U ~/unixsock 

b) 要偵聽套接字:ncat -l -U ~/unixsock

如果套接字不存在,偵聽模式将建立套接字。程式結束後套接字将繼續存在。

支援流和資料報域套接字。單獨 -U用于流套接字,或與--udp資料報套接字結合使用。資料報套接字需要一個源套接字來連接配接。預設情況下,将根據需要建立具有随機檔案名的源套接字,并在程式結束時删除。

3.4.1.4. -u, --udp (Use UDP)

使用 UDP 進行連接配接(預設為 TCP)

3.4.1.5. --sctp (Use SCTP)

使用 SCTP 進行連接配接(預設為 TCP)。SCTP 支援在 TCP 相容模式

3.4.1.6. --vsock (Use AF_VSOCK sockets)

使用 AF_VSOCK 套接字而不是預設的 TCP 套接字(僅限 Linux)。此選項可單獨用于流套接字或與--udp資料報套接字結合使用。

--vsock選項導緻 Ncat 使用 AF_VSOCK 套接字而不是網絡套接字。必須提供 CID 而不是主機名或 IP 位址。

a) 要連接配接到主機:ncat --vsock 2 1234

b) 要偵聽套接字:ncat -l --vsock 1234

流域和資料報域套接字均受支援,但套接字類型的可用性取決于管理程式。單獨 --vsock用于流套接字,或與--udp資料報套接字結合使用。

3.4.2. 連接配接模式選項(Connect Mode Options)

3.4.2.1. -g [,,...] (Loose source routing)

設定IPv4 松散源路由的hops,多個hops以逗号分割。

3.4.2.2. -G (Set source routing pointer)

設定 IPv4 源路由的pointer,pointer參數必須是 4 的倍數且不超過 28。

3.4.2.3. -p , --source-port (Specify source port)

設定 Ncat 綁定的端口号。

3.4.2.4. -s , --source (Specify source address)

設定 Ncat 綁定的位址。

3.4.3. 監聽模式選項(Listen Mode Options)

限制可能連接配接到偵聽 Ncat 程序的主機的資訊。

3.4.3.1. -l, --listen (Listen for connections)

偵聽連接配接而不是連接配接到遠端機器。

3.4.3.2. -m , --max-conns (Specify maximum number of connections)

Ncat 執行個體接受的最大同時連接配接數。預設值:100(Windows 上為 60)。

3.4.3.3. -k, --keep-open (Accept multiple connections)

通常,偵聽伺服器隻接受一個連接配接,然後在連接配接關閉時退出。該選項可支援同時有多個連接配接,并在它們全部關閉時退出。

它必須在--listen模式下,由于Ncat無法網絡輸入何時結束,是以它會一直運作直到中斷;意味這它不會關閉其輸出流,是以調用Ncat讀取并查找檔案結尾的程式會挂起。

3.4.3.4. --broker (Connection brokering)

允許多方連接配接到一個集中的 Ncat 伺服器并互相通信。Ncat 可以代理位于 NAT 後面或無法直接連接配接的系統之間的通信。

--broker結合--listen使用時,會導緻--listen端口啟用代理模式。

3.4.3.5. --chat (Ad-hoc “chat server”)

--chat選項啟用聊天模式,用于在多個使用者之間交換文本。在聊天模式下,連接配接代理處于打開狀态。Ncat 在将收到的每條消息中繼到其他連接配接之前,為收到的每條消息加上一個 ID 字首。ID 對于每個連接配接的用戶端都是唯一的。這有助于區分誰發送了什麼。此外,諸如控制字元之類的非列印字元會被轉義以防止它們對終端造成損害。

3.4.4. SSL選項(SSL Options)

3.4.4.1. --ssl (Use SSL)

a) 連接配接模式

此選項透明地與 SSL 伺服器協商 SSL 會話,以安全地加密連接配接。

b) 伺服器模式

此選項偵聽傳入的 SSL 連接配接,而不是普通的非隧道流量。

c) UDP 連接配接模式

此選項啟用資料報 TLS (DTLS)。在伺服器模式下不支援。

3.4.4.2. --ssl-verify (Verify server certificates)

在用戶端模式下,--ssl-verify需要驗證伺服器證書。Ncat 在檔案中帶有一組預設的可信證書 ca-bundle.crt。 某些作業系統提供受信任證書的預設清單;如果可用,這些也将被使用。

Ncat 不檢查吊銷的證書。

此選項在伺服器模式下無效。

3.4.4.3. --ssl-cert (Specify SSL certificate)

此選項提供用于驗證伺服器(在偵聽模式下)或用戶端(在連接配接模式下)的 PEM 編碼證書檔案的位置。與--ssl-key結合使用。

3.4.4.4. --ssl-key (Specify SSL private key)

此選項提供 PEM 編碼的私鑰檔案的位置,該檔案與名為 --ssl-cert.

3.4.4.5. --ssl-trustfile (List trusted certificates)

此選項設定用于證書驗證的受信任證書清單。此選項的參數的PEM包含受信任證書的檔案。通常,該檔案将包含證書頒發機構的證書,但它也可能直接包含伺服器證書。使用此選項時,Ncat 不使用其預設證書。

3.4.4.6. --ssl-ciphers (Specify SSL ciphersuites)

此選項設定 Ncat 在連接配接到伺服器或接受來自用戶端的 SSL 連接配接時将使用的密碼套件清單。

3.4.4.7. --ssl-servername (Request distinct server name)

在用戶端模式下,此選項設定 TLS SNI(伺服器名稱訓示)擴充,它告訴伺服器 Ncat 正在聯系的邏輯伺服器的名稱。當目标伺服器在一個底層網絡位址托管多個虛拟伺服器時,這一點很重要。如果未提供該選項,則将使用目标伺服器主機名填充 TLS SNI 擴充。

3.4.4.8. --ssl-alpn (Specify ALPN protocol list)

此選項允許您指定要通過應用層協定協商 (ALPN) TLS 擴充發送的以逗号分隔的協定清單。并非所有版本的 OpenSSL 都支援。

3.4.5. 代理選項(Proxy Options)

3.4.5.1. --proxy [:] (Specify proxy address)

請求通過:,使用指定的協定--proxy-type。

如果未指定端口,則使用代理協定的已知端口(SOCKS 為 1080,HTTP 為 3128)。當使用 IP 位址而不是主機名指定 IPv6 HTTP 代理伺服器時,必須使用方括号表示法(例如 [2001:db8::1]:8080)将端口與 IPv6 位址分開。如果代理需要身份驗證,請使用--proxy-auth。

3.4.5.2. --proxy-type (Specify proxy protocol)

連接配接模式下,此選項請求協定 通過指定的代理主機進行連接配接--proxy。

偵聽模式下,此選項使 Ncat 充當使用指定協定的代理伺服器。

目前可用的連接配接模式協定有http (CONNECT)、socks4(SOCKSv4) 和 socks5(SOCKSv5)。目前唯一支援的伺服器是http。如果未使用此選項,則預設協定為http。

3.4.5.3. --proxy-auth [:] (Specify proxy credentials)

連接配接模式下,提供将用于連接配接到代理伺服器的憑據。

偵聽模式下,提供連接配接用戶端所需的憑據。

可以通過設定環境變量将這些憑據傳遞給 Ncat NCAT_PROXY_AUTH,這降低了憑據在程序日志中被捕獲的風險。

3.4.5.4. --proxy-dns (Specify where to resolve proxy destination)

連接配接模式下,它提供對代理目标主機名是由遠端代理伺服器解析還是由 Ncat 本身在本地解析的控制。可選的如下:

a) local- 主機名在 Ncat 主機上本地解析。如果無法解析主機名,Ncat 将退出并顯示錯誤。

b) remote- 主機名直接傳遞到遠端代理伺服器。這是預設行為。

c) both- 首先在 Ncat 主機上嘗試主機名解析。無法解析的主機名被傳遞到遠端代理伺服器。

d) none- 完全禁用主機名解析。隻能将文字 IPv4 或 IPv6 位址用作代理目标。

3.4.6. 指令執行選項(Command Execution Options)

執行exec選項,需要将以下變量添加到環境變量中:

a) NCAT_REMOTE_ADDR, NCAT_REMOTE_PORT

遠端主機的 IP 位址和端口号。在連接配接模式下,它是目标的位址;在偵聽模式下,它是用戶端的位址。

b) NCAT_LOCAL_ADDR, NCAT_LOCAL_PORT

連接配接本地端的 IP 位址和端口号。

c) NCAT_PROTO

使用的協定:TCP、UDP和SCTP。

3.4.6.1. -e , --exec (Execute command)

建立連接配接後執行指定的指令。該指令必須指定為完整路徑名。來自遠端用戶端的所有輸入都将發送到應用程式,并将響應通過套接字發送回遠端用戶端,進而使您的指令行應用程式通過套接字進行互動。

結合--keep-open,Ncat 将處理指定端口/應用程式(如 inetd)的多個連接配接。Ncat 将隻接受由-m選項控制的最大、可定義的同時連接配接數。預設設定值是 100(Windows 上為 60)。

3.4.6.2. -c , --sh-exec (Execute command via sh)

與-e相同,不必為指令指定完整路徑,并且可以使用諸如環境變量之類的 shell 工具。

3.4.6.3. --lua-exec (Execute a .lua script)

在建立連接配接後,使用内置解釋器将指定檔案作為 Lua 腳本運作。腳本的标準輸入和标準輸出都被重定向到連接配接資料流。

3.4.7. 通路控制選項(Access Control Options)

3.4.7.1. --allow [,,...] (Allow connections)

指定的主機清單将是唯一允許連接配接到 Ncat 程序的主機。所有其他嘗試連接配接将被斷開。在發生沖突的情況下, --allow和--deny, --allow優先。

3.4.7.2. --allowfile (Allow connections from file)

與--allow具有相同的功能。不同之處在于排除的主機以換行分隔的方式寫在拒絕檔案中,而不是直接在指令行上提供。

3.4.7.3. --deny [,,...] (Deny connections)

向 Ncat 發出不允許連接配接到偵聽 Ncat 程序的主機清單。如果指定的主機嘗試連接配接,它們的會話将被靜默終止。在發生沖突的情況下, --allow和--deny, --allow優先。

3.4.7.4. --denyfile (Deny connections from file)

與--deny具有相同的功能。不同之處在于排除的主機以換行分隔的方式寫在拒絕檔案中,而不是直接在指令行上提供。

3.4.8. 時間選項(Timing Options)

選項接受一個time參數。通過ms、s、m、或h來指定毫秒、秒、分鐘或小時值。

3.4.8.1. -d , --delay (Specify line delay)

設定發送行的延遲間隔。這有效地限制了 Ncat 在指定時間段内将發送的行數。這可能對低帶寬站點有用,或者有其他用途,例如處理煩人的iptables --limit選項。

3.4.8.2. -i , --idle-timeout (Specify idle timeout)

為空閑連接配接設定固定逾時。如果達到空閑逾時,則連接配接終止。

3.4.8.3. -w , --wait (Specify connect timeout)

為嘗試連接配接設定固定逾時。

3.4.9. 輸出選項(Output Options)

3.4.9.1. -o , --output (Save session data)

将會話資料轉儲到檔案

3.4.9.2. -x , --hex-dump (Save session data in hex)

将會話資料以十六進制轉儲到檔案中。

3.4.9.3. --append-output (Append output)

--append-ouput與-o一起使用,-x它将附加結果輸出而不是截斷指定的輸出檔案。

3.4.9.4. -v, --verbose (Be verbose)

發出 Ncat ,-v它将變得冗長并顯示各種有用的基于連接配接的資訊。多次使用 ( -vv, -vvv...) 以獲得更詳細的資訊。

3.4.10. 其他選項(Misc Options)

3.4.10.1. -C, --crlf (Use CRLF as EOL)

選項使Ncat從标準輸入擷取輸入時,将LF行尾轉換為CRLF。

3.4.10.2. -h, --help (Help screen)

顯示帶有常用選項和參數的簡短幫助資訊,然後退出。

3.4.10.3. --recv-only (Only receive data)

Ncat 将隻接收資料而不會嘗試發送任何内容。

3.4.10.4. --send-only (Only send data)

Ncat 将隻發送資料并忽略接收到的任何内容。此選項還會導緻 Ncat 關閉網絡連接配接并在标準輸入接收到 EOF 後終止。

3.4.10.5. --no-shutdown (Do not shutdown into half-duplex mode)

Ncat 将不會在 stdin 上看到 EOF 後在套接字上調用關閉。這是為了與 OpenBSD netcat 向後相容而提供的,當使用它的 '-d' 選項執行時,它表現出這種行為。

3.4.10.6. -n, --nodns (Do not resolve hostnames)

完全禁用所有 Ncat 選項的主機名解析,例如目的地、源位址、源路由躍點和代理。所有位址都必須以數字形式指定。

3.4.10.7. -t, --telnet (Answer Telnet negotiations)

處理 DO/DONT WILL/WONT Telnet 協商。這使得使用 Ncat 編寫 Telnet 會話腳本成為可能。

3.4.10.8. --version (Display version)

顯示 Ncat 版本号并退出。

3.5. 應用示例

3.5.1. 在 TCP 端口 8080 上連接配接到 example.org

ncat example.org 8080

3.5.2. 偵聽 TCP 端口 8080 上的連接配接

ncat -l 8080

3.5.3. 将本地機器上的 TCP 端口 8080 重定向到端口 80 上的主機

ncat --sh-exec "ncat example.org 80" -l 8080 --keep-open

3.5.4. 綁定TCP 8081端口,連接配接/bin/bash,自由通路

ncat --exec "/bin/bash" -l 8081 --keep-open

3.5.5. 綁定一個shell到TCP 8081端口,限制通路本地網絡上的主機,同時連接配接的最大數量限制為3

ncat --exec "/bin/bash" --max-conns 3 --allow 192.168.0.0/24 -l 8081 --keep-open

3.5.6. 通過端口 1080 上的 SOCKS4 伺服器連接配接到 smtphost:25

ncat --proxy socks4host --proxy-type socks4 --proxy-auth joe smtphost 25

3.5.7. 通過端口 1080 上的 SOCKS5 伺服器連接配接到 smtphost:25

ncat --proxy socks5host --proxy-type socks5 --proxy-auth joe:secret smtphost 25

3.5.8. 在本地主機端口 8888 上建立 HTTP 代理伺服器

ncat -l --proxy-type http localhost 8888

3.5.9. 檔案拷貝

通過 TCP 端口 9899 将檔案從用戶端NODE發送到伺服器SERVER

SERVER$ ncat -l 9899 > outputfile

NODE$ ncat SERVER 9899 < inputfile

3.5.10. 檔案伺服器,下發檔案

通過TCP端口 9899 将檔案從伺服器SERVER發送到用戶端NODE

SERVER$ ncat -l 9899 < inputfile

NODE$ ncat SERVER 9899 > outputfile

3.5.11. 将Ncat作為聊天工具

伺服器SERVER監聽TCP端口8080,用戶端NODE掃描8080

SERVER$ ncat -l 8080

NODE$ ncat SERVER 8080

NODE$ ncat -w 10 SERVER 8080 #連接配接10s後終止

3.5.12. 将Ncat作為代理

所有發往到伺服器8080端口的連接配接都會自動轉發到192.168.1.1上的 80 端口

ncat -l 8080 | ncat 192.168.1.1 80

3.5.13. 通過Ncat進行端口轉發

ncat -u -l 80 -c ‘ncat -u -l 8080’

3.5.14. 系統建立後門

黑客技術,一般不使用

ncat -l 10000 -e /bin/bash

四.Ndiff

一個幫助比較 Nmap 掃描的工具。它需要兩個 Nmap XML 輸出檔案并列印它們之間的差異。主要比較的差異是:

A) 主機狀态

B) 端口狀态

C) 服務版本(-sV)

D) 作業系統比對(-o)

E) 腳本輸出

4.1.常用指令

4.1.1. -h, --help

顯示幫助資訊并退出。

4.1.2.-v, --verbose

包括輸出中的所有主機和端口,而不僅僅是那些已更改的主機和端口。

4.1.3.--text

以可讀的text文本格式寫入輸出

4.1.4.--xml

以機器可讀的 XML 格式寫入輸出。

4.2.應用示例

4.2.1.發送分段資料包掃描,并将掃描結果寫入檔案

nmap -F scanme.nmap.org -oX scanme-1.xml

4.2.2.使用腳本掃描,并将掃描結果寫入檔案

nmap --script=html-title scanme.nmap.org -oX scanme-2.xml

4.2.3.比較差異

ndiff -v scanme-1.xml scanme-2.xml

4.2.4.定時掃描

#!/bin/sh
TARGETS="<targets>"
OPTIONS="-v -T4 -F -sV"
date=`date +%F`
cd /root/scans
nmap $OPTIONS $TARGETS -oA scan-$date > /dev/null
if [ -e scan-prev.xml ]; then
        ndiff scan-prev.xml scan-$date.xml > diff-$date
        echo "*** NDIFF RESULTS ***"
        cat diff-$date
        echo
fi
echo "*** NMAP RESULTS ***"
cat scan-$date.nmap
ln -sf scan-$date.xml scan-prev.xml


0 12 * * * /root/scan-ndiff.sh      

五.作業系統支援

5.1. 送出官方更新指紋

5.1.1. 送出作業系統或服務指紋

通過nmap -O <目标主機>或nmap -sV <目标主機> 檢測國産作業系統目标主機;如果nmap無法确定目标機器的作業系統或服務的詳細版本資訊,則需要送出作業系統指紋。

網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援

送出位址如下表:

另一種方式,可通過nmap指紋庫來檢視是否存在所需作業系統資訊。查詢位址:

https://svn.nmap.org/nmap/nmap-os-db

5.1.2. 擷取最新指紋資料庫

等待郵件通知,從SVN庫(

https://svn.nmap.org/nmap/nmap-os-db

)下載下傳最新的資料庫檔案。

5.1.3. 更新安裝資料庫并測試

備份并替換最新的資料庫檔案,驗證測試。

5.2. 自己修改指紋庫

5.2.1. 生成指紋

指令:nmap -O -sV -T4 -d <主機IP>

網絡安全之Nmap一.Nmap二.Nping三.Ncat四.Ndiff五.作業系統支援

5.2.2. 指紋SCAN對象解碼

SCAN行是指紋的主要特性,具體說明如下:

a) Nmap 版本号 (V)

b) D以月/日形式顯示的掃描日期 (D)

c) 打開和關閉(在目标上)用于掃描的TCP端口(OT和CT)

d) 關閉UDP端口(CU)

e) 私有IP空間(PV)。Y:目标上是專有網絡,否則是N

f) 網絡距離(DS)是與目标的網絡跳距。0:目标是本地主機;1:以太網網絡

g) 距離計算方法(DC) 表示網絡距離(DS)的計算方式

h) 好的結果(G)。Y:條件和結果看起來足夠好,N:其他

i) 目标MAC字首(M)是目标MAC位址的前六位十六進制數字,對應于供應商名稱。

j) OS掃描時間( TM)以Unix time_t格式(十六進制)

附錄一:參考文檔

附錄二:源碼

備注:

nmap4j執行指令傳回成功結果為xml文本,需要做特定xml内容解析擷取需要資訊

附錄三:競品比較

Zmap Masscan IPScan
核心功能

1. 主機發現

2. 端口掃描

3. 服務與版本探測

4. 作業系統探測

掃描發現主機的開放端口 海量 IP 端口掃描

3. Web 伺服器檢測

4. NetBIOS 資訊

掃描模式 TCP SYN scan、TCP connectscan、UDP scan、No Ping scan TCPSYN、ICMP echo、UDP FTP、HTTP、IMAP4、POP3、SMTP、SSH、SSL、SMBv1、SMBv2、Telnet、RDP、VNC TCP、UDP、ICMP、Java Built-in
輸出結果 txt、xml csv、redis、json、api xml、binary、json、list csv、txt、xml、IP-Port 清單
開發語言 Lua、C、C++、Python、Shell C、CMake、Python、Roff、Shell C Java、C、NSIS

社群活躍度

(Github Star)

(Gihub URL)

最新版本

5.4k 3.9k 15.7k 2.4k
2018.8.31暫停營運,2021開始版本持續釋出
https://github.com/nmap/nmap https://github.com/zmap/zmap https://github.com/robertdavidgraham/masscan https://github.com/angryip/ipscan
7.92 3.0.0-beta1、2.1.1 1.3.2 3.7.6
Hping3 Fping
支援協定 TCP、UDP、ICMP、ARP TCP、UDP、ICMP、RAW-IP ICMP
C、Perl、Shell、M4
968 705
Gihub URL https://github.com/antirez/hping https://github.com/schweikert/fping
0.0.20051105 5.0
NetCat
從TCP/UDP連接配接中讀取或發送網絡資料
515
https://github.com/diegocr/netcat
1.217

附錄四:競品下載下傳

附錄五:主機發現

主機發現:

資料鍊路層 網絡層 傳輸層
優點

1. 速度快

2. 可靠性高

1. 可發現遠端主機和經過路由的主機

2. 速度相對較快

1. 可探測遠端主機

2. 比網絡層更可靠

缺點 無法掃描經過路由的主機

1. 經常被防火牆過濾

2. 速度較鍊路層慢

消耗時間更長
工具 arping ping
netdiscover fping
hping3

附錄六:Nmap誘發問題

nmap掃描端口導緻線上大量Java服務FullGC甚至OOM https://www.cnblogs.com/acbingo/p/13044153.html

繼續閱讀