---
# System prepended metadata

title: NMAP 使用教學
tags: [Penetration Test, linux]

---

# NMAP 使用教學

### **<span style="font-size: 25px;">Nmap 可以使用多種不同的方法來執行</span>**


- **多目標掃描**: 
  ```nmap google.com cloudflare.com microsoft.com``` 可一次輸入多個目標進行掃描。
- **IP 範圍掃描**: 
  ```nmap 10.11.12.15-20``` 將會掃描從 `10.11.12.15` 到 `10.11.12.20`。
- **子網路掃描**: 
  ```nmap 10.10.10.10/30``` 將會掃描該子網中的 4 個 IP。
------------

### **<span style="font-size: 25px;">TCP Flags</span>**


| 標誌 | 說明 |
|------|------|
| **URG** | 緊急標誌，設置了 URG 標誌的 TCP 段會立即處理，而不需等待之前發送的 TCP 段。 |
| **ACK** | 確認標誌用於確認接收的 TCP 段。 |
| **PSH** | 推送標誌，要求 TCP 立即將數據傳遞給應用程式。 |
| **RST** | 重置標誌，用於重置連接。另一個設備（例如防火牆）可能會發送此標誌以終止 TCP 連接。當數據發送到主機時，如果接收端沒有服務來響應，這個標誌也會被使用。 |
| **SYN** | 同步標誌，用於啟動 TCP 三次握手，並與其他主機同步序列號。序列號應在 TCP 連接建立期間隨機設置。 |
| **FIN** | 結束標誌，告訴對方它已經沒有更多的數據要發送了。這是正常的 TCP 連接關閉過程的一部分。|



### **<span style="font-size: 25px;">nmap 端口狀態</span>**

| 狀態                   | 說明
|-|-|
| **Open (開啟)**| 表示在指定端口上有服務在監聽。此狀態通常表明該服務可以接收並處理請求。|
| **Closed（關閉）**         | 表示指定端口上沒有服務在監聽，但端口是可訪問的。 |
| **Filtered（過濾）**       | 表示 Nmap 無法確定端口是開放還是關閉，因為端口不可訪問。通常是因為防火牆阻止了 Nmap 的探測包，或者是回應包被阻止。      |
| **Unfiltered（未過濾）**   | 表示 Nmap 無法確定端口是開放還是關閉，但端口是可訪問的。這種狀態通常在使用 ACK 掃描（-sA）時遇到。       |
| **Open\|Filtered（開放\|過濾）**   | 表示 Nmap 無法確定端口是開放還是過濾。|
| **Closed\|Filtered（關閉\|過濾）** | 表示 Nmap 無法確定端口是關閉還是過濾。|



----
> **<span style="color: red;font-size: 30px;">NMAP 重要參數 (大小寫有差)</span>**


### **<span style="font-size: 25px;">NMAP 初期掃描大範圍主機參數</span>**
* ``-sL`` : 僅顯示掃描範圍而不會執行真正的掃描，可拿來查看子網路範圍等等
* ``-PR`` : 使用 **ARP** 協定進行掃描，只有在同一個子網才能使用
* ``-PS`` : 為 **SYN PING** 掃描，傳送 **SYN** 封包來檢查機器是否存活，若存活則會繼續掃描端口
* ``-PA`` : 傳送 **ACK** 來檢查機器是否存活，若回傳 **RST** 表示機器存活，不會進行三方交握，僅特權用戶能執行
* ``-PU`` : 傳送 **UDP** 封包至特定端口來檢查機器是否存活，若端口不存在且機器存活會回傳 
  "Port  Unreachable"（ICMP Type 3, Code 3) 即可確認機器狀態

**<span style="font-size: 20px;">特殊參數</span>**
* ``-sn`` : 僅執行主機掃描，而不進行端口掃描
* ``-n `` : 跳過 DNS 查詢，不會查詢主機名稱，可增加掃描速度與隱蔽性



-----
### **<span style="font-size: 25px;">NMAP 中期掃描主機開放端口參數</span>**

* ``-sT`` : 為 **TCP** 連線，透過完成標準的 **TCP** 三向交握來確定 **TCP** 端口是否開放，在確認端口開放後即斷開
* ``-sS`` : 為 **TCP SYN** 掃描，與 **-sT** 相比，它是一種更快、更隱蔽的掃描方法，不會建立完整三向溝通
* ``-sU`` : 為 **UDP** 掃描，完整的 **UDP** 端口掃描，用來確定每個端口的具體狀態
* ``-sA`` : 為 **TCP ACK** 掃描，可查看哪些端口未被防火牆阻擋，在目標環境有防火牆時很好用

**<span style="font-size: 20px;">其他掃描方法</span>**
以下掃描方法的共同點是它們都不包含 **SYN** 標誌，因此無狀態防火牆不會將這些封包識別為 TCP 連線請求，讓這些封包有機會通過防火牆並到達目標系統，**這些掃描方式通常用於繞過簡單的防火牆或檢測系統**：

* ``-sN`` : 為不帶任何標誌( **SYN、FIN** 等等) 掃描，透過目標回應 **RST** 來確認端口狀態
* ``-sF`` : 為 **TCP FIN** 掃描，與 **-sN** 類似，都是透過目標回傳 **RST** 確認端口狀態
* ``-sX`` : 在 **Xmas** 掃描中，發送的 **TCP** 封包會同時設定 **FIN、PSH、URG** 標誌，與 **-sN** 和 **-sF** 一樣，如果收到RST封包，則表示連接埠已關閉
* ``-Pn`` : ``-Pn`` 參數的作用是跳過 Ping 探測

然而，這類偽造封包的方法在有狀態防火牆面前通常會無效，因為有狀態防火牆幾乎會攔截所有這種非標準連線的封包。


**<span style="font-size: 20px;">常用特殊參數</span>**
* ``-F`` : 快速掃描，僅掃描一些常見的端口，這個參數適合在時間有限或僅需要快速檢查常見服務的情況下使用"
* ``-p`` : 指定範圍，例如: ``-p1-100`` 指定掃描端口 1 到 100 的範圍 、``-p22,23,80 ``指定特定端口，```-p-```則為掃描所有端口
* ``-T`` : 決定掃描強度，由T0~T5排序，T0最慢，T5最快，數字越高的話準確度與隱蔽性越差
* ``-S`` : 偽造來源IP，將來源 ip 更改成偽造的，例如 ``nmap -S Fake-IP target-IP``
* ``-D`` : 偽裝掃描，一次偽裝好幾個 ip 來掩蓋真實來源，例如
    ``nmap -D 10.10.0.1,10.10.0.2,ME target-IP``：此指令讓掃描看起來是來自三個不同的來源 IP
* ``-f`` : 分段資料包，將我們的封包進行分段的選項，IP資料包被分為8位元組或更少，若 **TCP** 資料包大小為 32，則 ``-f`` 可分成四個資料包，能降低被防火牆或是 IDS 偵查到的機會，使用 -ff 會以 16 字節為單位進行分段"

**<span style="font-size: 20px;">更多詳細內容參數</span>**
* ``--reason`` : 提供有關 Nmap 為何判斷系統狀態或端口狀態的具體原因
* ``-v``或``-vv`` : 提供更多的掃描過程細節，例如掃描進度和步驟等等，``-vv`` 比 ``-v`` 有著更多細節
* ``-d``或``-dd`` : 是 Nmap 的調試（debugging）模式，用來顯示非常詳細的輸出，``-dd`` 比 ``-d`` 有著更多細節，內容非常多，建議輸出至文件查看



---
### **<span style="font-size: 25px;">nmap後期深入掃描細節參數</span>**
* ``-sV`` : 掃描端口版本訊息，可使用``--version-intensity (0~9)`` 來控制掃描強度，0為最弱，9最強，特別注意的是使用 -sV 指令的話，必定會進行 TCP 三向交握，隱蔽性較差。
因此在使用上，**可以先使用 ``-sS`` 等等有較高隱蔽性的參數來掃描有開放的端口，再使用 ``-sV``配合 ``-p``(指定端口) 對已開放的端口進行進一步的掃描**
* ``-O`` : 掃描目標作業系統資訊
* ``-A`` : 全方面掃描模式，會有更高強度的掃描，會執行多種不同的掃描方法或參數，隱蔽性差
* ``--traceroute`` : 查看路由
* ``-script`` : Nmap NSE（Nmap Scripting Engine）是一個強大的工具，允許用戶使用腳本來自動執行偵測、漏洞掃描和其他網路安全測試，內容非常多，可上網自行查閱。
* `-sC` : 使用預設腳本集執行腳本掃描。


----
### **<span style="font-size: 25px;">nmap 儲存輸出內容</span>**
* ``-oN`` : 將輸出的內容，以完整標準檔案的方式儲存成檔案，使用方法: ``nmap -oN filename target-IP``
<a href="https://hackmd.io/_uploads/By155V7lye.png" target="_blank"><img src="https://hackmd.io/_uploads/By155V7lye.png" ></a>
* ``-oG`` : 將輸出的內容，以過濾的方式儲存成檔案，它可以有效率地過濾掃描輸出中的特定關鍵字
使用方法: ``nmap -oG filename target-IP``
也可以搭配 **grep** 指令 ``grep KEYWORD filename``，來快速搜尋大範圍開放的服務等等
<a href="https://hackmd.io/_uploads/H1L5dBQe1g.png" target="_blank"><img src="https://hackmd.io/_uploads/H1L5dBQe1g.png" ></a>
<a href="https://hackmd.io/_uploads/SyZ6OBme1l.png" target="_blank"><img src="https://hackmd.io/_uploads/SyZ6OBme1l.png" ></a>



### **<span style="font-size: 25px;">若想了解更詳細的部分，可以查看官方文檔</span>**
**https://nmap.org/man/zh/index.html**