Nmap原理02 - 版本探測介紹(上)
Nmap原理02 - 版本探測介紹(上)
1.介紹
本文將介紹如何通過修改或添加nmap-service-probes文件來實現對nmap中未知服務的探測,首先介紹服務和版本探測的相關信息,然後介紹服務和版本探測的原理以及nmap-service-probes的文件格式,最後通過一個例子演示修改nmap-service-probes文件識別自己的服務,本節介紹前半部分介紹+技術摘要。
轉載請註明出處:http://www.cnblogs.com/liun1994/
2. Service and Application Version Detection
在對應的官方文檔中https://nmap.org/book/vscan.html#vscan-intro屬於這一節的內容,使用nmap-services文件可以識別知名的2200個服務,nmap-services
下面是服務和版本探測的輸出:
#nmap -A -T4 localhost
Starting Nmap ( http://nmap.org ) Nmap scan report for felix (127.0.0.1) (The 1640 ports scanned but not shown below are in state: closed) PORT STATE SERVICE VERSION 21/tcp open ftp WU-FTPD wu-2.6.1-20 22/tcp open ssh OpenSSH 3.1p1 (protocol 1.99) 53/tcp open domain ISC BIND 9.2.1 79/tcp open finger Linux fingerd 111/tcp open rpcbind 2 (rpc #100000) 443/tcp open ssl/http Apache httpd 2.0.39 ((Unix) mod_perl/1.99_04-dev) 515/tcp open printer 631/tcp open ipp CUPS 1.1 953/tcp open rndc? 5000/tcp open ssl/ftp WU-FTPD wu-2.6.1-20 5001/tcp open ssl/ssh OpenSSH 3.1p1 (protocol 1.99) 5002/tcp open ssl/domain ISC BIND 9.2.1 5003/tcp open ssl/finger Linux fingerd 6000/tcp open X11 (access denied) 8000/tcp open http-proxy Junkbuster webproxy 8080/tcp open http Apache httpd 2.0.39 ((Unix) mod_perl/1.99_04-dev) 8081/tcp open http Apache httpd 2.0.39 ((Unix) mod_perl/1.99_04-dev) Device type: general purpose Running: Linux 2.4.X|2.5.X OS details: Linux Kernel 2.4.0 - 2.5.20 Nmap finished: 1 IP address (1 host up) scanned in 42.494 seconds解釋:
1. 端口515將服務作為打印機提供,但該版本字段為空。 Nmap通過探測確定服務名稱,但無法確定其他任何內容。
2. 端口953將服務提供為“rndc?”,問號告訴我們,Nmap甚至無法通過探測來確定服務名稱。
顯示rndc,因為它已經在nmap-services中註冊了端口953。不幸的是,Nmap的任何一個探測器都沒有引起任何rndc的響應。
如果他們有,Nmap將打印一個服務指紋和提交的URL,以便它可以在下一個版本被識別。
3. 從上面的輸出可以看出,服務和版本探測輸出的不只是版本號,這取決於探針探測所返回的結果以及我們所寫的匹配語句
3. 技術摘要
Nmap首先根據選項執行端口掃描,然後將所有open 或者 open|filtered的TCP and/or UDP端口傳遞到服務掃描模塊,然後這些端口被並行探測;根據什麽來探測?貢獻者貢獻的Nmap探針來探測。
1)Nmap檢查上述端口列表有哪些是Exclude排除在外的,Exclude指令在nmap-service-probes文件中會介紹。如果排除在外,不進行探測。
2)如果端口是TCP,Nmap嘗試連接它,如果連接成功,那麽端口狀態會由open|filtered轉換成open。這很少出現,因為端口檢測既然沒檢測出來,試圖與它連接應該連接不上。
3)一旦TCP連接建立,Nmap會監聽5秒鐘(NULL Probes),通過歡迎信息確定他們的服務類型,如果數據收到,Nmap會將其與保存的3000多NULL探針指紋進行匹配,如果服務被完全確定,那麽該端口的服務掃描完成。如果服務沒有被探測出來,Nmap有“soft match”的機制,Nmap會繼續選擇探針進行探測,這些探針被限制到與該服務相匹配的探針上。
4)每個探針都有被認為最有效的探測端口列表,例如GetRequest的探針識別Web服務器,其列出的端口80-85,88-80-80和8080-8085, Nmap順序執行與正在掃描的端口號匹配的探針。每個探針包括一個探測字符串,它被發送到端口;將返回的響應與上面的NULL探針描述中討論的的簽名正則表達式進行比較。與NULL探測一樣,這些測試可能導致完全匹配(結束探測)和軟匹配(將未來探測限制到與某個服務相匹配的探測)或者根本不匹配。Nmap用於測試匹配的正則表達式的確切列表取決於探針後面配置。從X11Probe返回的數據不太可能匹配為GetRequest探針制作的任何正則表達式。另一方面,像RTSPRequest這樣的探測器返回的結果很可能與為GetRequest制作的正則表達式匹配,因為正在測試的兩個協議是密切相關的。因此,RTSPRequest探測器具有對GetRequest匹配的後備。
如果從處於open|filtered狀態的UDP端口接收到版本檢測期間的任何響應,則該狀態更改為打開。這使得版本檢測成為UDP掃描的絕佳補充,當一些常見的防火墻規則生效時,它被強制將所有已掃描的UDP端口標記為已打開|過濾。將UDP掃描與版本檢測相結合可以做到簡單的UDP掃描只需要很多次,這是一個有效和有用的技術。
5)由於需要管理連接,Nmap提高速度的技術:大多數探針具有通用性;如果服務匹配software指令,那麽Nmap只需要嘗試可能匹配該服務的探針;所有的探針都不是相等的,有些可以探測出更多的服務,Nmap通過使用稀有度,來避免嘗試不太可能實現匹配的探針。
6)如果至少有一個探針引起響應,但是Nmap無法識別該服務,則響應內容將以指紋的形式打印給用戶。
7)探針選擇
Nmap使用rarity變量來控制探針的選擇,rarity的值越高,那麽它被認為不常見,不太可能被嘗試;可以通過選項指定rarity的值。
(1)如果是TCP,NULL探針第一個被嘗試;
(2)將掃描端口列為可能端口的所有探針將會被嘗試,按照探針順序進行嘗試。
(3)所有其他具有小於或等於掃描的rarity值的探針也按照它們在nmap服務探針中出現的順序進行嘗試。
一旦探針發現匹配,算法終止並報告輸出。
因為除了NULL探針以外,其他探針都附帶了rarity變量值,因此很容易在版本探測中控制他們;Nmap默認的rarity強度是7。
nmap -sV --version-intensity 3 scanme.nmap.org
--version-light 等價於指定2
--version-all 等價於指定9
如果指定0,那麽只有空探針被嘗試
如果上面的論述不清楚,可以通過使用 --version-trace
選項和-d選項;這將顯示連接和數據讀寫的狀態,對我們理解執行過程非常有用。
例子可參考:https://nmap.org/book/vscan-technique-demo.html
4. 參考文獻
https://nmap.org/book/vscan.html
Nmap原理02 - 版本探測介紹(上)