前言
Nmap(Network Mapper)是滲透測試中最常用的網路掃描工具之一。除了基本的埠掃描功能外,Nmap 還提供了強大的服務版本偵測、作業系統識別以及漏洞掃描能力。本文將深入介紹如何使用 Nmap 進行漏洞掃描與服務指紋識別。
服務版本偵測概述
服務版本偵測是滲透測試的重要環節,透過識別目標主機上運行的服務及其版本,我們可以:
- 確定目標系統的攻擊面
- 尋找已知的漏洞和弱點
- 制定更精確的滲透測試策略
- 評估系統的安全風險等級
Nmap 提供了多種偵測機制來實現這些目標,包括服務指紋識別、作業系統偵測以及 NSE 腳本引擎。
服務指紋識別(-sV)
基本用法
使用 -sV 參數可以啟用服務版本偵測:
1
2
3
4
5
6
7
8
| # 基本服務版本偵測
nmap -sV 192.168.1.1
# 指定掃描特定埠
nmap -sV -p 22,80,443 192.168.1.1
# 掃描整個網段
nmap -sV 192.168.1.0/24
|
偵測強度調整
透過 --version-intensity 參數可以調整偵測強度(0-9):
1
2
3
4
5
6
7
8
9
10
11
| # 輕量級偵測(較快但可能遺漏資訊)
nmap -sV --version-intensity 0 192.168.1.1
# 標準偵測
nmap -sV --version-intensity 5 192.168.1.1
# 完整偵測(較慢但更準確)
nmap -sV --version-intensity 9 192.168.1.1
# 使用 --version-all 等同於強度 9
nmap -sV --version-all 192.168.1.1
|
輸出範例
1
2
3
4
5
| PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5
80/tcp open http Apache httpd 2.4.41
443/tcp open ssl/http nginx 1.18.0
3306/tcp open mysql MySQL 8.0.28
|
作業系統偵測(-O)
基本用法
使用 -O 參數可以啟用作業系統偵測:
1
2
3
4
5
6
7
8
| # 基本 OS 偵測
nmap -O 192.168.1.1
# 結合服務版本偵測
nmap -O -sV 192.168.1.1
# 提高偵測準確度
nmap -O --osscan-guess 192.168.1.1
|
進階選項
1
2
3
4
5
| # 限制 OS 偵測嘗試次數
nmap -O --max-os-tries 1 192.168.1.1
# 僅對確定開放和關閉埠的主機進行 OS 偵測
nmap -O --osscan-limit 192.168.1.0/24
|
NSE 腳本引擎介紹
Nmap Scripting Engine(NSE)是 Nmap 最強大的功能之一,提供了數百個預設腳本用於:
腳本分類
NSE 腳本分為多個類別:
| 類別 | 說明 |
|---|
| auth | 身份驗證相關 |
| broadcast | 廣播探測 |
| brute | 暴力破解 |
| default | 預設腳本 |
| discovery | 服務發現 |
| dos | 阻斷服務測試 |
| exploit | 漏洞利用 |
| external | 外部服務查詢 |
| fuzzer | 模糊測試 |
| intrusive | 侵入性掃描 |
| malware | 惡意軟體偵測 |
| safe | 安全腳本 |
| version | 版本偵測 |
| vuln | 漏洞掃描 |
基本使用方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 執行預設腳本
nmap -sC 192.168.1.1
# 執行特定腳本
nmap --script=http-title 192.168.1.1
# 執行多個腳本
nmap --script=http-title,http-headers 192.168.1.1
# 執行特定類別的所有腳本
nmap --script=vuln 192.168.1.1
# 結合萬用字元
nmap --script="http-*" 192.168.1.1
|
常用漏洞掃描腳本
vuln 類別腳本
執行所有漏洞掃描腳本:
1
2
3
4
5
6
7
8
| # 執行所有 vuln 類別腳本
nmap --script=vuln 192.168.1.1
# 結合服務偵測
nmap -sV --script=vuln 192.168.1.1
# 針對特定埠
nmap -sV --script=vuln -p 80,443,8080 192.168.1.1
|
HTTP 相關漏洞掃描
1
2
3
4
5
6
7
8
9
10
11
| # 檢測常見 Web 漏洞
nmap --script=http-vuln* 192.168.1.1
# SQL 注入檢測
nmap --script=http-sql-injection 192.168.1.1
# 跨站腳本(XSS)檢測
nmap --script=http-stored-xss,http-dombased-xss 192.168.1.1
# 目錄遍歷
nmap --script=http-enum 192.168.1.1
|
SMB 相關漏洞掃描
1
2
3
4
5
6
7
8
| # SMB 漏洞掃描
nmap --script=smb-vuln* -p 445 192.168.1.1
# SMB 安全性評估
nmap --script=smb-security-mode -p 445 192.168.1.1
# SMB 版本偵測
nmap --script=smb-protocols -p 445 192.168.1.1
|
特定漏洞檢測
EternalBlue(MS17-010)
EternalBlue 是影響 Windows SMB 服務的嚴重漏洞,曾被用於 WannaCry 勒索軟體攻擊:
1
2
3
4
5
6
7
8
| # 檢測 EternalBlue 漏洞
nmap --script=smb-vuln-ms17-010 -p 445 192.168.1.1
# 掃描整個網段
nmap --script=smb-vuln-ms17-010 -p 445 192.168.1.0/24
# 結合其他 SMB 漏洞掃描
nmap --script="smb-vuln-ms17-010 or smb-vuln-ms08-067" -p 445 192.168.1.1
|
Heartbleed(CVE-2014-0160)
Heartbleed 是 OpenSSL 的嚴重漏洞,可能導致敏感資訊洩露:
1
2
3
4
5
| # 檢測 Heartbleed 漏洞
nmap --script=ssl-heartbleed -p 443 192.168.1.1
# 掃描多個 SSL 埠
nmap --script=ssl-heartbleed -p 443,8443,465,993,995 192.168.1.1
|
其他常見漏洞
1
2
3
4
5
6
7
8
| # Shellshock 漏洞
nmap --script=http-shellshock --script-args uri=/cgi-bin/test.cgi 192.168.1.1
# POODLE 漏洞
nmap --script=ssl-poodle -p 443 192.168.1.1
# DROWN 漏洞
nmap --script=sslv2-drown -p 443 192.168.1.1
|
輸出報告格式
標準輸出格式
1
2
3
4
5
6
7
8
9
10
11
| # 標準輸出
nmap -sV --script=vuln 192.168.1.1 -oN scan_result.txt
# XML 格式(適合自動化處理)
nmap -sV --script=vuln 192.168.1.1 -oX scan_result.xml
# Grepable 格式
nmap -sV --script=vuln 192.168.1.1 -oG scan_result.gnmap
# 所有格式同時輸出
nmap -sV --script=vuln 192.168.1.1 -oA scan_result
|
進階輸出選項
1
2
3
4
5
6
7
8
| # 詳細輸出模式
nmap -sV --script=vuln -v 192.168.1.1
# 除錯模式(更詳細)
nmap -sV --script=vuln -d 192.168.1.1
# 顯示腳本執行追蹤
nmap --script=vuln --script-trace 192.168.1.1
|
掃描最佳實踐
效能優化
1
2
3
4
5
6
7
8
| # 調整時序模板(T0-T5)
nmap -sV --script=vuln -T4 192.168.1.1
# 設定最小主機群組大小
nmap -sV --script=vuln --min-hostgroup 64 192.168.1.0/24
# 限制並行探測數量
nmap -sV --script=vuln --max-parallelism 10 192.168.1.1
|
規避偵測
1
2
3
4
5
6
7
8
| # 分段掃描
nmap -sV --script=vuln -f 192.168.1.1
# 使用誘餌
nmap -sV --script=vuln -D RND:10 192.168.1.1
# 隨機化掃描順序
nmap -sV --script=vuln --randomize-hosts 192.168.1.0/24
|
安全注意事項
- 取得授權:在進行任何掃描之前,務必取得目標系統擁有者的書面授權
- 控制掃描範圍:避免掃描未授權的系統
- 記錄日誌:保存所有掃描記錄以供稽核
- 注意影響:某些腳本可能對目標系統造成影響,使用前請詳閱說明
完整掃描範例
1
2
3
4
5
6
7
8
| # 全面漏洞掃描(建議用於授權測試環境)
nmap -sV -sC -O --script=vuln -p- -T4 -oA full_scan 192.168.1.1
# 快速漏洞掃描
nmap -sV --script=vuln --top-ports 1000 -T4 -oA quick_scan 192.168.1.1
# 針對 Web 伺服器的掃描
nmap -sV --script="http-vuln* or ssl-*" -p 80,443,8080,8443 -oA web_scan 192.168.1.1
|
參考資料
總結
Nmap 的漏洞掃描與服務指紋識別功能是滲透測試人員的必備技能。透過熟練運用 -sV、-O 以及 NSE 腳本引擎,我們可以有效地識別目標系統的弱點。然而,請務必在合法授權的範圍內使用這些工具,並遵守相關法律法規。