1. 程式人生 > >你不可不知的 Nmap 使用技巧

你不可不知的 Nmap 使用技巧

Nmap 是一款網路掃描和主機偵測的非常有用的工具。合理使用,不僅可以用來資訊收集和列舉,同時也可以用來作為一個漏洞探測器或安全掃描器。另外 Nmap 還跨平臺,適用於 Windows、Linux 和 Macintosh 等主流作業系統,功能強大,乃居家旅行之必備良品。

總的來說,Nmap 具有四大功能。

  • 主機發現

  • 埠掃描

  • 服務版本偵測

  • 作業系統偵測

這四大應用乃 Nmap 之精髓,同時它們之間具有邏輯上的順序關係。首先進行主機判斷,發現在指定通道上存活的主機,然後對這些存活的主機進行埠掃描,接著記錄這些執行服務的版本號,最後針對不同作業系統我們還可以有不同的具體應對方案,順手便把對方的作業系統給偵測了。

在這四大基本應用之上,Nmap 還有一些用來規避、繞過防火牆的組合技巧。最後本文將介紹 Nmap 的一個強大的應用模組,名曰 Nmap 指令碼引擎(Nmap Script Engine),簡稱 NSE。在本文中,我們將學習使用 NSE 來幹一些本來看起來繁瑣的事情,也就是說實現了自動化。

基本掃描策略

掌握以下幾點基本操作,熟練後敲命令就像背書一樣。排名不分先後。

0x01:無任何附加引數

nmap IP地址

分情況。如果是超級使用者,無引數掃描等價於 sS 引數掃描(SYN,半連線);否則,無引數掃描等價於 sT 引數掃描(TCP,完整連線)。

0x02:冗餘

nmap -vv IP地址

按照基本法,v 引數通常表示冗餘。我們使用兩個 v 引數表示將偵測過程原原本本的列印輸出出來。

0x03:指定埠號

nmap -p埠號 IP地址

這裡 p 引數表示埠,標準寫法後面跟的埠號之間沒有空格。但是如果寫一個空格也並無妨。

0x04:作業系統偵測

nmap -O IP地址
nmap -A IP地址

作業系統偵測有兩個引數選項,其一是引數 O,其二是引數 A,後者乃前者的冗餘版本。我更多的使用 A 引數,以得到更多的資訊。

0x05:只進行主機發現

nmap -sn IP地址

主機發現的手段不下幾十種,但是最常用的卻是 sn 引數,它表示 “使用 ping 掃描來偵測存活的主機,而不進行埠掃描”。

0x06:跳過主機發現

nmap -Pn IP地址

有時候對方主機開啟了防火牆(這是很自然的事情),可能過濾掉了你傳送的 ICMP 協議資料包,這樣如果想要使用 sn 引數來進行主機發現就不管用了,產生的結果也不可靠。於是你不得不使用 Pn 引數,它假設所有的目標 IP 均為存活,並一個一個主機的進行埠掃描,你懂的這樣會犧牲一些時間作為代價。

0x07:掃描和版本號偵測

nmap -sV IP地址

該選項通過偵測開放的埠來判斷開放的服務,並試圖檢測它的版本。雖然 A 選項也能做到,但是要檢測開放的服務版本,sV 一定是最合適的。

0x08:UDP 掃描

nmap -sU IP地址

之前我們的掃描都是針對 TCP 的,而有些服務卻是建立在 UDP 協議上的。比如 NTP(123埠)、SNMP(161埠)等服務,就必須使用 UDP 協議進行掃描。

繞過防火牆

前面講的 Pn 選項就可以看成是 sn 選項的逃脫策略。所謂逃脫,就是不讓別人發現自己,否則要乾的偵測工作還沒搞完,就被迫中止豈不讓人笑話。同樣的,排名不分先後。

0x01:利用掩體

namp -D IP地址1,IP地址2... IP地址

你可以使用 D 選項(英文 decoy)跟一些 IP 地址,IP 和 IP 之間用逗號隔開。這樣看起來用來偵測而傳送的資料包不僅來自於你的 IP 地址,還來自於這些掩體 IP。這就叫做 “混入其中”。

0x02:禁用 ping

nmap -P0 IP地址

在 2010 年之後,該選項和 PN 選項被一起合併到 Pn 選項之中。但是如果你願意,你仍然可以使用 P0 選項(P 後面跟的是零)。

0x03:IP 地址偽裝

sudo proxychains nmap ...

偽裝 IP 地址的方法也有很多,比如你可以使用 prxychains 這款工具來實現匿名代理。

0x04:空閒掃描

nmap -sI 殭屍IP地址[:開放的殭屍埠] IP地址

和 D 選線不同的是,sI 根本不使用你自己的 IP 地址,而是使用空閒的網路資源。這樣隱蔽性就更強了。開放的殭屍埠為選填,預設等於 80 埠。具體原理請參考 Nmap 文件。根據這個理論,你不能使用空閒掃描來掃描你自己的主機 IP。在 msfconsole 中,你可以使用 auxiliary/scanner/ip/ipidseq 來完成這個工作。

0x05:指定網絡卡進行掃描

nmap -e 網絡卡 IP地址

當你擁有不止一個網絡卡的時候,這很有用。

0x06:限制掃描時間

nmap --host-timeout 時間 IP地址

限制每個 IP 地址的掃描時間(單位為秒),當要掃描大量的主機 IP 時這很有用。

0x07:指定源 IP 地址

nmap -S 源IP地址 IP地址

使用冒充的 IP 地址進行掃描以增強隱蔽性。這裡偽裝成的 IP 也可以來自於下線狀態的主機地址。

0x08:指定源主機埠

nmap -g 53 IP地址

使用 g 引數,或者 source-port 引數,來手動設定用來掃描的埠。常用的,如 20、53、67 埠。

0x09:資料包分片技術

nmap -f IP地址
nmap --mtu mtu單元大小 IP地址

上面兩種方法都可以利用資料包分片技術,某些防火牆為了加快處理速度而不會進行重組處理,這樣從而逃脫防火牆或闖入檢測系統的檢測。注意,mtu 的值必須是 8 的倍數(如 8、16、24、32 等)。

0x10:新增垃圾資料

nmap --data-length 垃圾資料長度 IP地址

一些常見的掃描之資料包是有特定的資料長度的,通過在傳送的資料包末尾新增隨機的垃圾資料,以達到混淆視聽的作效果。

0x11:隨機選擇掃描物件

nmap --randomize-hosts IP地址

如果你要掃描大量的,比如成百上千的主機 IP,這很有效。它會打亂掃描順序,以規避檢測系統的檢測。

0x12:偽裝 MAC 地址

nmap --spoof-mac 偽造MAC IP地址

你可以通過指定供應商的名字來偽裝 MAC 地址。可選的名字有 Dell、Apple、3Com。當然也可以手動指定 MAC 地址的值。或者為了簡單起見,可以在上面 “偽造IP” 的地方填寫數字 0,這將生成一個隨機的 MAC 地址。

0x13:偽造檢驗值

nmap --badsum IP地址

這將使用偽造的 TCP / UDP / SCTP 校驗和傳送資料。

0x14:掃描速度

nmap -T0 IP地址

T後面跟的數字代表掃描速度,數字越大則速度越快。0~5分別表示:妄想症、鬼鬼祟祟、彬彬有禮、正常、好鬥、精神病。

Nmap 指令碼引擎

Nmap 指令碼引擎內建在 Nmap 中,使用 script 引數進行呼叫。它的英文名是 Nmap Script Engine,簡稱 NSE。

Nmap 內建了一些已經寫好的指令碼,在 Kali 等主流滲透系統中被儲存在 /usr/share/nmap/scripts/ 資料夾下。檔案字尾名是 .nse。使用 sC(等價於 script=default)或者 script 引數對 Nmap 指令碼進行呼叫。

0x01:按類別掃描

nmap --script=類別 IP地址

Nmap 的指令碼類別分為以下幾類。

  • auth:負責處理鑑權證書、繞開鑑權的指令碼。

  • broadcast:處理在區域網內探查更多服務開啟的狀況,如 dhcp / dns / sqlserver 等服務。

  • brute:提供暴力破解方式,針對常見的應用如 http / snmp 等。

  • default:使用 sC 或 A 選項時預設的指令碼,提供基本指令碼掃描能力。

  • discovery:挖掘更多的網路服務資訊,如 smb 列舉、snmp 查詢等。

  • dos:用於進行拒絕服務攻擊。

  • exploit:利用已知的漏洞入侵系統。

  • external:利用第三方的資料庫或資源,如進行 whois 解析。

  • fuzzer:模糊測試指令碼,傳送異常的包到目標主機,探測出潛在的漏洞。

  • malware:探測目標是否感染了病毒,是否開啟了後門。

  • safe:與 fuzzer 功能相反,屬於安全性指令碼。

  • version:負責增強信性服務與版本掃描功能的指令碼。

  • vuln:負責檢查目標主機是否有常見的漏洞,如 ms08_067。

你可以使用 vuln 指令碼對目標主機進行簡單的漏洞勘查。

在這裡插入圖片描述

可以看到,就這麼輕而易舉的掃描出來靶機的兩個漏洞,ms08_067ms17_010 漏洞。對漏洞熟悉的同學知道,ms17_010 漏洞,它有一個名字好聽的衍生版本,曰之 “永恆之藍(externalblue)”。該攻擊手段便是利用了這個漏洞。經檢驗,這兩個靶機上的漏洞都可以被直接利用。

在這裡插入圖片描述

在這裡插入圖片描述

0x02:使用特定的指令碼進行掃描

nmap --script=特定的指令碼名字 IP地址

所謂 Nmap 指令碼的名字,就是 /usr/share/nmap/scripts/ 資料夾下的那些檔案,去掉字尾後的東西。

在這裡插入圖片描述

0x03:增強和個性化定製指令碼

CVE(Common Vulnerablities and Exposures)是安全界的一個規範。一個較著名的,Exploit-DB 資料庫以 CVE 規範為基礎,對確定披露的漏洞進行了分類。我們將使用下面的指令碼直接訪問 Exploit-DB 資料庫並匯入 Nmap。這是 Exploit-DB 資料庫的線上搜尋介面。當然漏洞庫多了去了,但我之所以將它列出,因為該地址預設是儲存在 Kali 的收藏欄裡面的。

在這裡插入圖片描述

這裡提供兩個別人已經寫好的指令碼。(可以自己在 Github 尋找)

想要安裝這些 Nmap 指令碼,很簡單。

cd /usr/share/nmap/scripts
接著將連結提供的指令碼複製貼上到該路徑即可。
具體細節或有不同,如 vulscan 還需要將漏洞資料庫的相關資訊儲存到本地。
呼叫時以 scripts/ 為根目錄,對字尾名為 nse 的指令碼進行呼叫。

我已經安裝好了,以下是一個使用示範。相比於普通的漏洞掃描,通常它會更多有價值的資訊。

nmap --script 指令碼之間用逗號隔開 --script-args 引數之間用逗號隔開 IP地址

GitHub 上說了,要使用這兩個指令碼,必須和 sV 引數一起呼叫。

nmap -sV --script 指令碼名 --script-args 引數 IP地址

使用 vulners.nse

在這裡插入圖片描述

使用 vulscan.nse

在這裡插入圖片描述

將二者整合到一條命令

在這裡插入圖片描述

除此之外你還可以編寫自己的 Nmap 指令碼,這裡是一個較為基礎的入門指南。