Nmap 漏洞掃描與服務指紋識別

Nmap Vulnerability Scanning and Service Fingerprinting

前言

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. 注意影響:某些腳本可能對目標系統造成影響,使用前請詳閱說明

完整掃描範例

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 腳本引擎,我們可以有效地識別目標系統的弱點。然而,請務必在合法授權的範圍內使用這些工具,並遵守相關法律法規。

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy