跳到主內容

【PortScan】nmap

常用語法

## nmap 預設會scan ip (主機探測) 與 port (服務探測)

## 列出網段內機器的ip (主機探測)
# -sn (no service scan) 不掃描port (與 -Pn 互斥 )
# -n 不使用dns解析
# -oG console ouput 配合 - 輸出 原輸出 Host: 192.168.202.255 ()        Status: Up => 使用awk 取出ip
nmap -sn -n 192.168.202.0/24
# -oG console ouput , 才能搭配 | 做後續處理
# awk '{prin $2}' 使用awk 取出ip
# > ip.txt 輸出成文字檔 
nmap -sn -n 192.168.202.0/24 -oG - | grep Up |awk '{prin $2}' > ips.txt
# cut -d ‘ ‘ -f2 => 使用 cut 切出 ip
nmap -sn -n 192.168.202.0/24 -oG - | grep Up |cut -d ‘ ‘ -f2 > ips.txt
# -oN {filename} 輸出到檔案
nmap -sn -n 192.168.202.0/24 -oN namp_192.168.202.log
# -Pn (no ping)掃描之前不需要用ping命令,有些防火牆禁止ping命令。可以使用此選項 ... 穿透防火牆進行掃描 
nmap -Pn -nsn -sVCn 192.168.202.130/24 

## port 掃描(服務探測)
# namp 預設掃描,常用 1000 port(/usr/share/nmap/nmap-servicese)
namp 192.168.203.151 -p 1-65535 
# 等於 namp 192.168.203.151 -p -
# 1- : 1以後
# 等於 namp 192.168.203.151 -p 1-
# -65535: 65535 以前
# 等於 namp 192.168.203.151 -p -65535

## 列出ips.txt 主機有開 tcp/25 的主機 
# -p port
# -sS syn 掃描
# -iL 從檔案讀取要掃描的主機 (-sL 列出要掃描的ip,只列出不掃描)
# --open 只列出開啟(up)的結果
sudo nmap -p 25 -sS --open 192.168.202.255 -iL ips.txt -oG -
# result
Host: 192.168.202.23 () Status: Up
Host: 192.168.202.23 () Ports: 25/filtered/tcp//smtp///

## ip 掃描
# -sn 只掃ip 不掃port
# -oG:  output can grep
# -: console out put
# namp 192.168.203.151 等於 namp 192.168.203.151 —top 1000
# sudo + nmap => 多 ICMP type:8, type:13
nmap 192.168.203.* -sn -oG - | grep Up | cut -d  ‘ ’ -f2 > ip_list.txt (ip清單)

## port 完全掃描
# namp 預設掃描,常用 1000 port(/usr/share/nmap/nmap-servicese)
namp 192.168.203.151 -p 1-65535 
# 等於 namp 192.168.203.151 -p -
# 1- : 1以後
# 等於 namp 192.168.203.151 -p 1-
# -65535: 65535 以前
# 等於 namp 192.168.203.151 -p -65535

主機(Ping)(-PX)掃描

# host scan
# ARP掃描				  sudo nmap -PR -sn MACHINE_IP/24
# ICMP echo掃描		  sudo nmap -PE -sn MACHINE_IP/24
# ICMP 時間戳掃描		sudo nmap -PP -sn MACHINE_IP/24
# ICMP 位址遮罩掃描	  	sudo nmap -PM -sn MACHINE_IP/24
# TCP SYN Ping 掃描	sudo nmap -PS22,80,443 -sn MACHINE_IP/30
# TCP ACK Ping 掃描	sudo nmap -PA22,80,443 -sn MACHINE_IP/30
# UDP Ping 掃描		sudo nmap -PU53,161,162 -sn MACHINE_IP/30
# -n	沒有DNS查找
# -R	所有主機的反向 DNS 查找
# -sn	僅主機發現(不掃描port)
# -Pn 	停用主機發現(no ping scan)

# port 相關option
-p-	所有連接埠
-p1-1023	掃描埠1至1023
-F	100 個最常用端口
-r	按連續順序掃描端口
-T<0-5>	-T0最慢,T5最快
--max-rate 50	速率 <= 50 資料包/秒
--min-rate 15	速率 >= 15 資料包/秒
--min-parallelism 100	至少 100 個平行探頭
# -sL 只列出要掃描的主機(不掃描)
# -n 不進行dns反解
#nmap -n -sL 10.10.12.13/29

Starting Nmap 7.60 ( https://nmap.org ) at 2024-02-28 10:39 GMT
Nmap scan report for 10.10.12.8
Nmap scan report for 10.10.12.9
Nmap scan report for 10.10.12.10
Nmap scan report for 10.10.12.11
Nmap scan report for 10.10.12.12
Nmap scan report for 10.10.12.13
Nmap scan report for 10.10.12.14
Nmap scan report for 10.10.12.15
Nmap done: 8 IP addresses (0 hosts up) scanned in 0.00 seconds

arp scan

arp-scan wiki https://www.royhills.co.uk/wiki/index.php/Arp-scan_Documentation

image-1709144999650.png

# -PR 使用arp掃描
# -sn 只掃描ip,不掃描port
$ sudo nmap -PR -sn 10.10.210.6/24

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 07:12 BST
Nmap scan report for ip-10-10-210-75.eu-west-1.compute.internal (10.10.210.75)
Host is up (0.00013s latency).
MAC Address: 02:83:75:3A:F2:89 (Unknown)
Nmap scan report for ip-10-10-210-100.eu-west-1.compute.internal (10.10.210.100)
Host is up (-0.100s latency).
MAC Address: 02:63:D0:1B:2D:CD (Unknown)
Nmap scan report for ip-10-10-210-165.eu-west-1.compute.internal (10.10.210.165)
Host is up (0.00025s latency).
MAC Address: 02:59:79:4F:17:B7 (Unknown)
Nmap scan report for ip-10-10-210-6.eu-west-1.compute.internal (10.10.210.6)
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 3.12 seconds

# arp-scan
$ sudo arp-scan 10.10.210.6/24
Interface: eth0, datalink type: EN10MB (Ethernet)
WARNING: host part of 10.10.210.6/24 is non-zero
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.10.210.75	02:83:75:3a:f2:89	(Unknown)
10.10.210.100	02:63:d0:1b:2d:cd	(Unknown)
10.10.210.165	02:59:79:4f:17:b7	(Unknown)

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 2.726 seconds (93.91 hosts/sec). 3 responded

icmp scan (-PE)(echo)

icmp 類型 https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml

image-1709145076833.png

# icmp 類型 https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml 

# -PE 使用icmp 掃描
# ICMP 類型 8 Echo -> ICMP 類型 0  Echo Reply 回應 
# -sn 不進行port掃描
$ sudo nmap -PE -sn 10.10.68.220/24

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 10:16 BST
Nmap scan report for ip-10-10-68-50.eu-west-1.compute.internal (10.10.68.50)
Host is up (0.00017s latency).
MAC Address: 02:95:36:71:5B:87 (Unknown)
...
Nmap done: 256 IP addresses (8 hosts up) scanned in 2.11 seconds

icmp scan (-PP)(timestamp)

image-1709145251010.png

# -PP 使用icmp 時間戳記掃描
# ICMP 類型 13 時間戳記請求 -> ICMP 類型 14 時間戳記請求回應
$ sudo nmap -PP -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:06 EEST
Nmap scan report for 10.10.68.50
Host is up (0.13s latency).
...
Nmap done: 256 IP addresses (8 hosts up) scanned in 10.93 seconds

icmp scan (-PM)(address mask)

image-1709145220475.png

# -PM 使用icmp 遮罩掃描
# 位址遮罩查詢Address Mask Request(ICMP 類型 17)並檢查是否獲得位址遮罩回覆Address Mask Reply(ICMP 類型 18)
$ sudo nmap -PM -sn 10.10.68.220/24

Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:13 EEST
Nmap done: 256 IP addresses (0 hosts up) scanned in 52.17 seconds

TCP SYN scan (-PS)

# TCP SYN 掃描
# -PS 使用tcp sync scan (預設80 port,可設定特殊port 如-PS22,80,8080)
# -sn 不執行port掃描
$ sudo nmap -PS -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 17.38 seconds

image-1709144904730.png

image-1709144956410.png

TCP ACK scan (-PA)

 

image-1709145968572.png

image-1709146109535.png

# TCP ACK scan
# -PA TCP ACK scan
# -sn 不執行port掃描
# 特權使用者(root 和 sudoers)才可以用 ack scan
$ sudo nmap -PA -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:46 EEST
Nmap scan report for 10.10.68.52
Host is up (0.11s latency).
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 29.89 seconds

UDP scan (-PU)

image-1709146285199.png

image-1709146304441.png

# -PU udp scan
# -sn 不執行port掃描
$ sudo nmap -PU -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 9.20 seconds

dns 反解

# -n 不使用dns反解(此選項與下面互斥)
$ sudo nmap -n -sn 192.168.100.10/24 

# -R 使用DNS查詢(一般不用加,會使用預設dns)
# --dns-servers {DNS_SERVER} 使用特定dns

服務(Service)(-sX) 掃描

我們可以將連接埠分為兩種狀態:

  1. 開啟連接埠表示有某個服務正在偵聽該連接埠。
  2. 關閉連接埠表示該連接埠沒有服務監聽。

Nmap 六種回應狀態

但在實際情況中,我們需要考慮防火牆的影響。例如,連接埠可能是開放的,但防火牆可能會阻止資料包。因此,Nmap考慮以下六種狀態:

  1. Open:表示有服務正在監聽指定連接埠。
  2. Closed:表示沒有服務正在偵聽指定端口,儘管該端口是可訪問的。可存取是指它是可存取的並且不會被防火牆或其他安全設備/程式阻止。
  3. Filtered :表示Nmap無法確定連接埠是開啟還是關閉,因為該連接埠無法存取。這種狀態通常是由於防火牆阻止 Nmap 到達該連接埠所造成的。Nmap 的封包可能會被阻止到達該連接埠;或者,回應被阻止到達 Nmap 的主機。
  4. Unfiltered :表示儘管連接埠可以訪問,但Nmap無法確定連接埠是開啟還是關閉。使用 ACK 掃描時會遇到此狀態-sA
  5. Open|Filtered :這意味著Nmap無法確定連接埠是開放的還是已過濾的。
  6. Closed|Filtered :這表示Nmap無法決定連接埠是關閉還是過濾。

Nmap支援不同類型的 TCP 連接埠掃描。要了解這些連接埠掃描之間的差異,我們需要查看 TCP 標頭。TCP 標頭是 TCP 段的前 24 個位元組。下圖顯示了RFC 793中定義的 TCP 標頭。這個人物乍看之下很精緻,但實際上卻很複雜。然而,它很容易理解。在第一行中,我們有來源 TCP 連接埠號碼和目標連接埠號碼。我們可以看到連接埠號碼分配了16位元(2個位元組)。在第二行和第三行中,我們有序號和確認號。每行分配 32 位元(4 位元組),總共 6 行,組成 24 位元組。

image-1709216387063.png

TCP 標誌

特別是,我們需要關注Nmap可以設定或取消設定的標誌。我們用紅色突出顯示了 TCP 標誌。設定標誌位意味著將其值設為1。從左到右,TCP頭標誌是:

  1. URG :緊急標誌表示提交的緊急指針是重要的。緊急指針指示傳入資料緊急,並且立即處理設定了 URG 標誌的TCP分段,而無需考慮必須等待先前發送的 TCP 分段。
  2. ACK :確認標誌表示確認號碼很重要。它用於確認TCP段的接收。
  3. PSH :推送標誌,要求TCP立即將資料傳遞給應用程式。
  4. RST :重設標誌用於重設連線。另一個裝置(例如防火牆)可能會發送它來斷開TCP 連線。當資料傳送到主機且接收端沒有服務來應答時,也會使用此標誌。
  5. SYN :同步標誌用於啟動TCP 3相交握並與其他主機同步序號。序號應在 TCP 連線建立期間隨機設定。
  6. FIN:發送方沒有更多資料要傳送。

TCP 連線 掃描 (-sT)

TCP 連線掃描透過完成 TCP 3 次握手來運作。在標準TCP連線建立中,用戶端發送一個設定了SYN標誌的TCP封包,如果連接埠打開,伺服器用SYN/ACK回應;最後,客戶端透過發送ACK完成3次握手。

image-1709219287209.png

我們感興趣的是了解 TCP 連接埠是否打開,而不是建立 TCP 連線。因此,一旦透過發送 RST/ACK 確認其狀態,連線就會被中斷。您可以選擇使用執行 TCP 連線掃描

image-1709219302396.png

請務必注意,如果您不是特權使用者(root 或 sudoer),則 TCP 連線掃描是發現開放 TCP 連接埠的唯一可能選項。

在下面的 Wireshark 封包擷取視窗中,我們看到 Nmap 會向各種連接埠(256、443、143 等)發送帶有 SYN 標誌的 TCP 封包。預設情況下,Nmap 將嘗試連接到 1000 個最常見的連接埠。關閉的 TCP 連接埠會以 RST/ACK 回應 SYN 封包,以表示它尚未開啟。當我們嘗試與所有關閉的連接埠啟動 TCP 3 向握手時,將重複此模式。

image-1709219344868.png

我們注意到連接埠 143 是開放的,因此它回復了 SYN/ACK,Nmap 透過發送 ACK 完成了 3 次握手。下圖顯示了我們的Nmap主機和目標系統的143埠之間交換的所有資料包。前三個資料包是正在完成的TCP 3次握手。然後,第四個資料包用 RST/ACK 資料包將其撕毀。

image-1709219375877.png

# -sT tcp連線 scan
# -F 預設是最常用的1000port,使用該參數則為快速掃瞄(top 100 port)
# -r 預設掃描為亂數取port,該參數可固定排序
$ nmap -sT -F -r 10.10.88.190

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:53 BST
Nmap scan report for 10.10.88.190
Host is up (0.0024s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.40 seconds

TCP SYN 掃描 (-sS)

非特權用戶僅限連線掃描。但是,預設掃描模式是SYN掃描,並且需要特權使用者(root或sudoer)才能運行它。SYN掃描不需要完成TCP 三向交握;相反,一旦收到伺服器的回應,它就會斷開連接。因為我們沒有建立 TCP 連接,所以這減少了記錄掃描的機會。我們可以透過使用選項來選擇這種掃描類型-sS

因為三向握手從未完成,所以信息不會傳遞到應用層,因此不會出現在任何應用程序日誌中。SYN掃描也更快速和高效,因為發送和接收的數據包更少。

下圖顯示了在未完成 TCP 三向交握 的情況下 TCP SYN 掃描的工作原理。

image-1709219845727.png

在下圖的上半部分,我們可以看到一個TCP連接掃描-sT流量。任何開啟的 TCP 連接埠都需要 Nmap 在關閉連線之前完成 TCP 3 次握手。在下圖的下半部分,我們看到一次SYN掃描如何-sS不需要完成TCP 3次握手;相反,一旦收到 SYN/ACK 封包,Nmap 就會發送 RST 封包。

image-1709219892490.pngTCP SYN 掃描是以特權使用者身分執行 Nmap、以 root 身分執行或使用 sudo 執行 Nmap 時的預設掃描模式

# -sS tcp ack掃描
$ sudo nmap -sS 10.10.88.190

Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:53 BST
Nmap scan report for 10.10.88.190
Host is up (0.0073s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
110/tcp open  pop3
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

掃描範圍與效能

# port清單:-p22,80,443 將掃描連接埠 22、80 和 443。
# port範圍:-p1-1023 將掃描 1 到 1023(含)之間的所有port
# 您可以使用 請求掃描所有端口-p-,這將掃描所有 65535 個端口。 或是 -p1-65535
# -F 掃描最常見的 100 個port 
# --top-ports 10 將檢查10個最常見的連接埠。

# 掃瞄速度 -T<0-5> (如果您不指定任何計時,Nmap 將使用 normal -T3。)
您可以使用 控制掃描時序-T<0-5>。-T0是最慢的, -T5而是最快的。根據Nmap手冊頁,有六個範本:
為了避免 IDS 警報,您可以考慮-T0或-T1。例如,-T0一次掃描一個端口,並在發送每個探測之間等待 5 分鐘,
因此您可以猜測掃描一個目標需要多長時間才能完成。
請注意,-T5 就速度而言,這是最具侵略性的;但是,由於丟包的可能性增加,這可能會影響掃描結果的準確性。
請注意,這-T4通常在 CTF 期間和學習掃描練習目標時使用,而-T1通常在隱密更重要的真實交戰中使用。

# 控制資料包速率
# 例如,--max-rate 10或--max-rate=10 確保您的掃描器每秒發送的資料包不超過十個。
--min-rate <number> 控制資料封包速率(最小)
--max-rate <number> 控制資料封包速率(最大)

# 並行
--min-parallelism <numprobes>此外,您可以使用和 控制探測並行化--max-parallelism <numprobes>。
Nmap 探測目標以發現哪些主機處於活動狀態以及哪些連接埠是開放的;探測並行化指定可以並行運行的此類探測的數量。
例如,--min-parallelism=512推動Nmap保持至少512個探針並行;這512個探測與主機發現和開放連接埠有關。

進階服務掃描

# TCP Null Scan			sudo nmap -sN 10.10.156.21
# TCP FIN Scan			sudo nmap -sF 10.10.156.21
# TCP Xmas Scan			sudo nmap -sX 10.10.156.21
# TCP Maimon Scan		sudo nmap -sM 10.10.156.21
# TCP ACK Scan			sudo nmap -sA 10.10.156.21
# TCP Window Scan		sudo nmap -sW 10.10.156.21
# Custom TCP Scan		sudo nmap --scanflags URGACKPSHRSTSYNFIN 10.10.156.21
# Spoofed Source IP		sudo nmap -S SPOOFED_IP 10.10.156.21
# Spoofed MAC Address	--spoof-mac SPOOFED_MAC
# Decoy Scan			nmap -D DECOY_IP,ME 10.10.156.21
# Idle (Zombie) Scan	sudo nmap -sI ZOMBIE_IP 10.10.156.21
# Fragment IP data into 8 bytes		-f
# Fragment IP data into 16 bytes	-ff

# 更多參數
--source-port PORT_NUM 指定來源連接埠號
--data-length NUM 附加隨機資料以達到給定長度
--reason	解釋 Nmap 如何得出結論
-v			冗長的
-vv			非常詳細
-d			偵錯
-dd			更多調試細節
# ip 清單
nmap 192.168.203.* -sn -oG - | grep Up | cut -d  ‘ ’ -f2 > ip_list.txt (ip清單)
-sn 只掃ip 不掃port
-oG:  output can grep
-: console out put

namp 預設 top 1000(/usr/share/nmap/nmap-servicese)
namp 192.168.203.151 
等於
namp 192.168.203.151 —top 1000
sudo + nmap =>多 ICMP type:8, type:13

# 全掃
namp 192.168.203.151 -p 1-65535 
等於 namp 192.168.203.151 -p -
等於 namp 192.168.203.151 -p 1-
1- : 1以後
等於 namp 192.168.203.151 -p -65535
-65535: 65535 以前

Nmap 參數說明

以下是Nmap 7.94的說明及參數翻譯:

Nmap 7.94(https://nmap.org)
用法:nmap [掃描類型] [選項] {目標指定}
目標指定:
  可傳遞主機名、IP地址、網絡等等。
  例如:scanme.nmap.org、microsoft.com/24、192.168.0.1; 10.0.0-255.1-254
  -iL <輸入文件名>:從主機/網絡列表輸入
  -iR <主機數量>:選擇隨機目標
  --exclude <主機1[,主機2][,主機3],...>:排除主機/網絡
  --excludefile <排除文件>:從文件排除列表
主機發現:
  -sL:列表掃描 - 簡單列出要掃描的目標
  -sn:Ping掃描 - 停用端口掃描
  -Pn:將所有主機視為在線 - 跳過主機發現
  -PS/PA/PU/PY<端口列表>:TCP SYN/ACK、UDP或SCTP發現到指定端口
  -PE/PP/PM:ICMP echo、timestamp和netmask請求發現探針
  -PO[協議列表]:IP協議Ping
  -n/-R:永不執行DNS解析/總是解析 [默認:有時]
  --dns-servers <伺服器1[,伺服器2],...>:指定自定義DNS伺服器
  --system-dns:使用作業系統的DNS解析器
  --traceroute:追蹤到每個主機的跳躍路徑
掃描技術:
  -sS/sT/sA/sW/sM:TCP SYN/Connect()/ACK/Window/Maimon掃描
  -sU:UDP掃描
  -sN/sF/sX:TCP Null、FIN和Xmas掃描
  --scanflags <標誌>:自定義TCP掃描標誌
  -sI <殭屍主機[:探針端口]>:閒置掃描
  -sY/sZ:SCTP INIT/COOKIE-ECHO掃描
  -sO:IP協議掃描
  -b <FTP中繼主機>:FTP彈跳掃描
端口指定和掃描順序:
  -p <端口範圍>:僅掃描指定的端口
    例如:-p22;-p1-65535;-p U:53,111,137,T:21-25,80,139,8080,S:9
  --exclude-ports <端口範圍>:排除掃描指定的端口
  -F:快速模式 - 掃描比默認更少的端口
  -r:按順序掃描端口 - 不隨機化
  --top-ports <數量>:掃描最常見的<數量>個端口
  --port-ratio <比率>:掃描比<比率>常見的端口
服務/版本檢測:
  -sV:探測打開的端口以確定服務/版本信息
  --version-intensity <級別>:設置從0(輕)到9(嘗試所有探針)的級別
  --version-light:限制最可能的探針(級別2)
  --version-all:嘗試每個單獨的探針(級別9)
  --version-trace:顯示詳細的版本掃描活動(用於調試)
腳本掃描:
  -sC:等同於 --script=default
  --script=<Lua腳本>: <Lua腳本> 是目錄、腳本文件或腳本類別的逗號分隔列表
  --script-args=<n1=v1,[

n2=v2,...]>:提供給腳本的參數
  --script-args-file=文件名:在文件中提供NSE腳本參數
  --script-trace:顯示發送和接收的所有數據
  --script-updatedb:更新腳本數據庫
  --script-help=<Lua腳本>:顯示有關腳本的幫助
          <Lua腳本> 是腳本文件或腳本類別的逗號分隔列表
OS檢測:
  -O:啟用OS檢測
  --osscan-limit:限制OS檢測對有希望的目標
  --osscan-guess:更積極地猜測OS
時間和性能:
  需要 <時間> 的選項以秒為單位,或在值后附加 'ms'(毫秒)、's'(秒)、'm'(分鐘)或'h'(小時)(例如 30m)。
  -T<0-5>:設置時間模板(較高表示更快)
  --min-hostgroup/max-hostgroup <大小>:平行主機掃描組大小
  --min-parallelism/max-parallelism <探針數量>:探針並行
  --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <時間>:指定探針往返時間
  --max-retries <嘗試次數>:限制端口掃描探針的重發次數
  --host-timeout <時間>:在此時間后放棄對目標的掃描
  --scan-delay/--max-scan-delay <時間>:調整探針之間的延遲
  --min-rate <數量>:每秒發送的封包數不低於<數量>
  --max-rate <數量>:每秒發送的封包數不高於<數量>
防火牆/入侵檢測和欺騙:
  -f; --mtu <值>:分段封包(可選附帶MTU)
  -D <欺騙主機1,欺騙主機2[,自己],...>:用欺騙主機偽裝掃描
  -S <IP地址>:偽造源地址
  -e <接口>:使用指定的接口
  -g/--source-port <端口號>:使用指定的端口號
  --proxies <URL1,[URL2],...>:通過HTTP/SOCKS4代理中繼連接
  --data <十六進制字符串>:附加自定義有效載荷到發送的封包
  --data-string <字符串>:附加自定義ASCII字符串到發送的封包
  --data-length <數量>:附加隨機數據到發送的封包
  --ip-options <選項>:發送指定IP選項的封包
  --ttl <值>:設置IP生存時間字段
  --spoof-mac <MAC地址/前綴/供應商名稱>:偽造MAC地址
  --badsum:發送具有虛偽的TCP/UDP/SCTP校驗和的封包
輸出:
  -oN/-oX/-oS/-oG <文件>:將掃描輸出到正常、XML、s|<rIpt kIddi3和Grepable格式,分別到指定的文件名
  -oA <基本名>:一次以三種主要格式輸出
  -v:增加詳細程度(使用 -vv 或更多以獲得更大效果)
  -d:增加調試程度(使用 -dd 或更多以獲得更大效果)
  --reason:顯示端口處於特定狀態的原因
  --open:僅顯示打開(或可能打開)的端口
  --packet-trace:顯示發送和接收的所有封包
  --iflist:打印主機接口和路由(用於調試)
  --append-output:附加到指定的輸出文件而不是覆蓋它
  --resume <文件名>:恢復中斷的掃描
  --noninteractive:禁用通過鍵盤的運行時交互
  --stylesheet <路徑/URL>:XSL樣式表以將XML輸出轉換為HTML
  --webxml:從Nmap.Org引用樣式表以實現更具可移植性的XML
  --no-stylesheet:防止將XSL樣式表與XML輸出關聯
其他:
  -6:啟用IPv6掃描
  -A:啟用OS檢測、版本檢測、腳本掃描和路由跟蹤
  --datadir <目錄名>:指定自定義Nmap數據文件位置
  --send-eth/--send-ip:使用原始以太網幀或IP封包發送
  --privileged:假定用戶具有完全特權
  --unprivileged:假定用戶缺乏原始套接字特權
  -V:打印版本號
  -h:打印此幫助摘要頁。
範例:
  nmap -v -A scanme.nmap.org
  nmap -v -sn 192.168.0.0/16 10.0.0.0/8
  nmap -v -iR 10000 -Pn -p 80

 

SMB 掃描

NetBIOS服務聽取TCP端口139,以及多個UDP端口。需要注意的是,SMB(TCP端口445)和NetBIOS是兩個獨立的協議。NetBIOS是一個獨立的會話層協議和服務,允許本地網絡上的計算機彼此通信。雖然現代SMB的實現可以在沒有NetBIOS的情況下運行,但為了向後兼容性,通常一起啟用NetBIOS over TCP(NBT)。這也意味著這兩個服務的列舉通常是相互關聯的。可以使用類似以下語法的工具,如nmap,來掃描這些服務:

kali@kali:~$ nmap -v -p 139,445 -oG smb.txt 192.168.50.1-254

kali@kali:~$ cat smb.txt
# Nmap 7.92 scan initiated Thu Mar 17 06:03:12 2022 as: nmap -v -p 139,445 -oG smb.txt 192.168.50.1-254
# Ports scanned: TCP(2;139,445) UDP(0;) SCTP(0;) PROTOCOLS(0;)
Host: 192.168.50.1 ()	Status: Down
...
Host: 192.168.50.21 ()	Status: Up
Host: 192.168.50.21 ()	Ports: 139/closed/tcp//netbios-ssn///, 445/closed/tcp//microsoft-ds///
...
Host: 192.168.50.217 ()	Status: Up
Host: 192.168.50.217 ()	Ports: 139/closed/tcp//netbios-ssn///, 445/closed/tcp//microsoft-ds///
# Nmap done at Thu Mar 17 06:03:18 2022 -- 254 IP addresses (15 hosts up) scanned in 6.17 seconds

Nmap還提供了許多有用的NSE腳本,我們可以使用它們來發現和列舉SMB服務。這些腳本位於/usr/share/nmap/scripts目錄中。

kali@kali:~$ ls -1 /usr/share/nmap/scripts/smb*
/usr/share/nmap/scripts/smb2-capabilities.nse
/usr/share/nmap/scripts/smb2-security-mode.nse
/usr/share/nmap/scripts/smb2-time.nse
/usr/share/nmap/scripts/smb2-vuln-uptime.nse
/usr/share/nmap/scripts/smb-brute.nse
/usr/share/nmap/scripts/smb-double-pulsar-backdoor.nse
/usr/share/nmap/scripts/smb-enum-domains.nse
/usr/share/nmap/scripts/smb-enum-groups.nse
/usr/share/nmap/scripts/smb-enum-processes.nse
/usr/share/nmap/scripts/smb-enum-sessions.nse
/usr/share/nmap/scripts/smb-enum-shares.nse
/usr/share/nmap/scripts/smb-enum-users.nse
/usr/share/nmap/scripts/smb-os-discovery.nse
...

我們找到了一些有趣的Nmap SMB NSE腳本,可以通過SMB執行各種任務,如OS發現和枚舉。

SMB發現腳本僅在目標上啟用了SMBv1時才能工作,這在現代Windows版本中不是默認情況。然而,仍然有很多遺留系統運行著SMBv1,我們已經在Windows主機上啟用了這個特定版本,以模擬這種情況。

讓我們在Windows 11客戶端上嘗試smb-os-discovery模塊。

kali@kali:~$ nmap -v -p 139,445 --script smb-os-discovery 192.168.50.152
...
PORT    STATE SERVICE      REASON
139/tcp open  netbios-ssn  syn-ack
445/tcp open  microsoft-ds syn-ack

Host script results:
| smb-os-discovery:
|   OS: Windows 10 Pro 22000 (Windows 10 Pro 6.3)
|   OS CPE: cpe:/o:microsoft:windows_10::-
|   Computer name: client01
|   NetBIOS computer name: CLIENT01\x00
|   Domain name: megacorptwo.com
|   Forest name: megacorptwo.com
|   FQDN: client01.megacorptwo.com
|_  System time: 2022-03-17T11:54:20-07:00
...

 

SNMP 掃描

要掃描開放的SNMP端口,我們可以運行nmap,使用-sU選項進行UDP掃描,並使用--open選項限制輸出,僅顯示已打開的端口。這將幫助我們識別正在運行SNMP服務的設備。

kali@kali:~$ sudo nmap -sU --open -p 161 192.168.50.1-254 -oG open-snmp.txt
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-14 06:02 EDT
Nmap scan report for 192.168.50.151
Host is up (0.10s latency).

PORT    STATE SERVICE
161/udp open  snmp

Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds
...