Nmap在實戰中的高階用法(詳解)

Sumarua發表於2020-08-18

@

Nmap在實戰中的高階用法(詳解)

Nmap提供了四項基本功能(主機發現、埠掃描、服務與版本偵測、OS偵測)及豐富的指令碼庫。Nmap既能應用於簡單的網路資訊掃描,也能用在高階、複雜、特定的環境中:例如掃描網際網路上大量的主機;繞開防火牆/IDS/IPS;掃描Web站點;掃描路由器等等。

Nmap簡單的掃描方式:

全面掃描:nmap -T4 -A ip  

主機發現:nmap -T4 -sn ip 

埠掃描:nmap -T4 ip  

服務掃描:nmap -T4 -sV ip  

作業系統掃描:nmap -T4 -O ip

上述的掃描方式能滿足一般的資訊蒐集需求。而若想利用Nmap探索出特定的場景中更詳細的資訊,則需仔細地設計Nmap命令列引數,以便精確地控制Nmap的掃描行為。

下面列舉比較實用的高階應用場景和技巧。

一、Nmap高階選項

1、檢視本地路由與介面

Nmap中提供了–iflist選項來檢視本地主機的介面資訊與路由資訊。當遇到無法達到目標主機或想選擇從多塊網路卡中某一特定網路卡訪問目標主機時,可以檢視nmap –iflist中提供的網路介面資訊。

nmap –iflist

nmap檢視本地路由與介面

2、指定網口與IP地址

在Nmap可指定用哪個網口傳送資料,-e 選項。介面的詳細資訊可以參考–iflist選項輸出結果。

示例:

nmap -e eth0 targetip

Nmap也可以顯式地指定傳送的源端IP地址。使用-S 選項,nmap將用指定的spoofip作為源端IP來傳送探測包。

另外可以使用Decoy(誘騙)方式來掩蓋真實的掃描地址,例如-D ip1,ip2,ip3,ip4,ME,這樣就會產生多個虛假的ip同時對目標機進行探測,其中ME代表本機的真實地址,這樣對方的防火牆不容易識別出是掃描者的身份。

nmap -T4 -F -n -Pn -D192.168.1.100,192.168.1.101,192.168.1.102,ME 192.168.1.1

3、定製探測包

Nmap提供–scanflags選項,使用者可以對需要傳送的TCP探測包的標誌位進行完全的控制。可以使用數字或符號指定TCP標誌位:URG, ACK, PSH,RST, SYN,and FIN。

例如:

nmap -sX -T4 –scanflags URGACKPSHRSTSYNFINtargetip

此命令設定全部的TCP標誌位為1,可以用於某些特殊場景的探測。

另外使用–ip-options可以定製IP包的options欄位。

使用-S指定虛假的IP地址,-D指定一組誘騙IP地址(ME代表真實地址)。-e指定傳送探測包的網路介面,-g(–source- port)指定源埠,-f指定使用IP分片方式傳送探測包,–spoof-mac指定使用欺騙的MAC地址。–ttl指定生存時間。

二、Nmap掃描防火牆

防火牆在今天網路安全中扮演著重要的角色,如果能對防火牆系統進行詳細的探測,那麼繞開防火牆或滲透防火牆就更加容易。所以,此處講解利用Nmap獲取防火牆基本資訊典型的用法。

為了獲取防火牆全面的資訊,需儘可能多地結合不同掃描方式來探測其狀態。在設計命令列引數時,可以綜合網路環境來微調時序引數,以便加快掃描速度。

1、SYN掃描

首先可以利用基本的SYN掃描方式探測其埠開放狀態。

nmap -sS -T4 www.fujieace.com

掃描輸出結果為:

All 997 ports are filtered  
PORT    STATE  SERVICE  
80/tcp  open   http  
113/tcp closed auth  
507/tcp open   crs

我們可以看到SYN方式探測到3個埠開放,而有997個埠被過濾。Nmap預設掃描只掃描1000個最可能開放的埠,如果想掃描全部的埠,命令如下:

nmap -sS -T4-p- www.fujieace.com

2、FIN掃描

然後可以利用FIN掃描方式探測防火牆狀態。FIN掃描方式用於識別埠是否關閉,收到RST回覆說明該埠關閉,否則說明是open或filtered狀態。

nmap -sF -T4 www.fujieace.com

掃描輸出結果為:

PORT      STATE         SERVICE  
7/tcp     open|filtered echo  
9/tcp     open|filtered discard  
11/tcp    open|filtered systat  
13/tcp    open|filtered daytime  
23/tcp    open|filtered telnet  
25/tcp    open|filtered smtp  
37/tcp    open|filtered time  
79/tcp    open|filtered finger  
80/tcp    open|filtered http  
更多埠,此處省略.......

3、ACK掃描

然後利用ACK掃描判斷埠是否被過濾。針對ACK探測包,未被過濾的埠(無論開啟、關閉)會回覆RST包。

nmap -sA -T4 www.fujieace.com

掃描輸出結果為:

Not shown: 997 unfiltered ports  
PORT      STATE    SERVICE  
135/tcp   filtered msrpc  
1434/tcp  filtered ms-sql-m  
32777/tcp filtered sometimes-rpc17

從結果可以知道997個埠是未被過濾的(unfiltered),而3個(135/1434/32777)被過濾了。所以,將ACK與FIN掃描 的結果結合分析,我們可以找到很多開放的埠。例如7號埠,FIN中得出的狀態是:open或filtered,從ACK中得出的狀態是 unfiltered,那麼該埠只能是open的。

4、Window掃描

當然也可以利用Window掃描方式,得出一些埠資訊,可以與之前掃描分析的結果相互補充。Window掃描方式只對某些TCPIP協議棧才有效。

window掃描原理與ACK類似,傳送ACK包探測目標埠,對回覆的RST包中的Window size進行解析。在某些TCPIP協議棧實現中,關閉的埠在RST中會將Window size設定為0;而開放的埠將Window size設定成非0的值。

nmap -sW -p- -T4 www.fujieace.com

輸出結果:

PORT      STATE    SERVICE  
7/tcp     open     echo  
9/tcp     open     discard  
11/tcp    open     systat  
13/tcp    open     daytime  
更多埠,此處省略......

在採用多種方式獲取出防火牆狀態後,可以進一步進行應用程式與版本偵測及OS偵測。

此處不再贅述!

這裡有份關於使用nmap突破防火牆的文章推薦一下《Nmap繞過防火牆的使用方法》!

三、掃描路由器

Nmap內部維護了一份系統與裝置的資料庫(nmap-os-db),能夠識別數千種不同系統與裝置。所以,可以用來掃描主流的路由器裝置。

1、掃描思科路由器

nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16

思科路由器會在上述埠中執行了常見的服務。列舉出上述埠開放的主機,可以定位到路由器裝置可能的IP地址及埠狀態。

2、掃描路由器TFTP

nmap –sU –p69 –nvv target

大多數的路由器都支援TFTP協議(簡單檔案傳輸協議),該協議常用於備份和恢復路由器的配置檔案,執行在UDP 69埠上。使用上述命令可以探測出路由器是否開放TFTP。

3、掃描路由器作業系統

與通用PC掃描方式類似,使用-O選項掃描路由器的作業系統。-F用於快速掃描最可能開放的100個埠,並根據埠掃描結果進一步做OS的指紋分析。

nmap -O -F -n 192.168.1.1

nmap掃描路由器作業系統

四、掃描網際網路

Nmap內部的設計非常強大靈活,既能掃描單個主機、小型的區域網,也可以掃描成千上萬臺主機從中發掘使用者關注的資訊。掃描大量主機,需要對掃描時序等引數進行仔細的優化。

1、發現網際網路上web伺服器

nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt

隨機地產生10萬個IP地址,對其80埠進行掃描。將掃描結果以greppable(可用grep命令提取)格式輸出到nmap.txt檔案。

可以使用grep命令從輸出檔案提取關心的細節資訊。

2、統計網際網路主機基本資料

Nmap的創始人Fyodor在2008年的Black Hat大會發表一篇演講,講的是如何使用Nmap來掃描網際網路(Nmap: Scanning the Internet),資料地址:http://nmap.org/presentations/BHDC08/

Fyodor進行網際網路掃描的初衷是統計出網路經驗資料並用之優化Nmap的效能。例如,根據統計出每個埠開放的概率,優先掃描常見埠,以節省使用者的時間。

產生隨機IP地址

產生100萬個隨機的IP地址,並將之儲存到檔案中,方便後續掃描時作為引數輸入。

nmap -iR 1200000 -sL -n | grep “not scanned” | awk ‘{print $2}’ | sort -n | uniq >! tp; head -25000000 tp >! tcp-allports-1M-IPs; rm tp

上述命令含義:隨機生成1200000個IP地址(-iR 120000),並進行列表掃描(-sL,列舉出IP地址,不進行真正的掃描),不進行dns解析操作(-n),這樣將產生Nmap列表掃描的結果。在此 結果中搜出未掃描的行(grep “not scanned”),列印出每一行的第二列內容(awk ‘{print $2}’,也就是IP地址),然後對獲取到的IP地址進行排序(sort -n),然後剔除重複IP地址,將結果儲存到臨時檔案tp,再取出前1000000個IP地址儲存到tcp-allports-1M-IPs檔案中,刪除 臨時檔案。

總之,此處產生了1000000個隨機IP地址存放在tcp-allports-1M-IPs檔案中。

優化主機發現=

nmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 –source-port 53 -T4 -iL tcp-allports-1M-IPs

上述命令進行主機發現:使用產生的IP地址(-iL tcp-allports-1M-IPs),指定傳送包的源埠為53(–source-port 53,該埠是DNS查詢埠,一般的防火牆都允許來自此埠的資料包),時序級別為4(-T4,探測速度比較快),以TCP SYN包方式探測目標機的21,22,23,25,80,113,31339埠,以TCP ACK包方式探測對方80,113,443,10042埠,另外也傳送ICMP ECHO/ICMP TIMESTAMP包探測對方主機。只要上述的探測包中得到一個回覆,就可以證明目標主機線上。

完整的掃描命令

在準備了必要的IP地址檔案,並對主機發現引數優化後,我們就得到最終的掃描命令:

nmap -S [srcip] -d –max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs –max-retries 1–randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 –min-hostgroup 256 –min-rate175 –max-rate 300

上述命令用於掃描網際網路上100萬臺主機全部的TCP埠的開放情況。

使用包含100萬個IP地址的檔案(-iL tcp-allports-1M-IPs),源端IP地址設定為srcip(指定一個IP地址,保證該IP地址位於統一區域網中,否則無法收到目標機的回 復包),主機發現過程使用TCP SYN包探測目標機的21,22,23,25,53,80,443,掃描過程將隨機打亂主機順序(–randomize-hosts,因為檔案中的IP 已經排序,這裡將之打亂,避免被防火牆檢查出),埠掃描過程檢查全部的TCP埠(-p-,埠1到65535),使用時序級別為4(-T4,速度比較 快),將結果以XML/grepable/普通格式輸出到檔案中(-oA logs/tcp-allports-%T-%D,其中%T表示掃描時間,%D表示掃描日期)。

-d表示列印除錯出資訊。

–max-scan-delay 10表示發包最多延時10秒,防止特殊情景下等待過長的時間。

–max-retries 1,表示埠掃描探測包最多被重傳一次,防止Nmap在沒有收到回覆的情況下多次重傳探測包,當然這樣也會降低探測的準確性。

–min-host-group 256表示進行埠掃描與版本偵測時,同時進行探測的主機的數量,這裡至少256個主機一組來進行掃描,可以加快掃描速度。

–min-rate 175和–max-rate 300,表示發包速率介於175和300之間,保證掃描速度不會太慢,也不會因為速率過高引起目標機的警覺。

掃描結果

Fyodor組織的此次掃描得出很多重要結論,統計出了網際網路最有可能開放的10個TCP埠。

  • 80 (http)
  • 23 (telnet)
  • 22 (ssh)
  • 443 (https)
  • 3389 (ms-term-serv)
  • 445 (microsoft-ds)
  • 139 (netbios-ssn)
  • 21 (ftp)
  • 135 (msrpc)
  • 25 (smtp)

最有可能開放的10個UDP埠。

  • 137 (netbios-ns)
  • 161 (snmp)
  • 1434 (ms-sql-m)
  • 123 (ntp)
  • 138 (netbios-dgm)
  • 445 (microsoft-ds)
  • 135 (msrpc)
  • 67 (dhcps)
  • 139 (netbios-ssn)
  • 53 (domain)

五、掃描Web站點

Web是網際網路上最廣泛的應用,而且越來越多的服務傾向於以Web形式提供出來,所以對Web安全監管也越來越重要。目前安全領域有很多專門的 Web掃描軟體(如AppScan、WebInspect、W3AF),能夠提供埠掃描、漏洞掃描、漏洞利用、分析報表等諸多功能。而Nmap作為一款 開源的埠掃描器,對Web掃描方面支援也越來越強大,可以完成Web基本的資訊探測:伺服器版本、支援的Method、是否包含典型漏洞。功能已經遠遠 超過同領域的其他開源軟體,如HTTPrint、Httsquash。

目前Nmap中對Web的支援主要通過Lua指令碼來實現,NSE指令碼庫中共有50多個HTTP相關的指令碼。

掃描例項:

nmap -sV -p 80 -T4 --script http*,default scanme.nmap.org

nmap掃描Web站點

上面以掃描scanme.nmap.org的Web應用展示Nmap提供Web掃描能力,從圖中可以看到掃描結果中提供了比較豐富的資訊。

首先是應用程式及版本:Apachehttpd 2.2.14 (Ubuntu)

然後搜出了該站點的affiliate-id:該ID可用於識別同一擁有者的不同頁面。

然後輸出HTTP-headers資訊,從中檢視到基本配置資訊。

從http-title中,可以看到網頁標題。某些網頁標題可能會洩漏重要資訊,所以這裡也應對其檢查。

相關文章