Nmap提供了四項基本功能(主機發現、端口掃描、服務與版本偵測、OS偵測)及豐富的腳本庫。Nmap既能應用于簡單的網絡資訊掃描,也能用在進階、複雜、特定的環境中:例如掃描網際網路上大量的主機;繞開防火牆/IDS/IPS;掃描Web站點;掃描路由器等等。
簡要回顧Nmap簡單的掃描方式:
1 全面掃描:nmap-T4 -A targetip
2
3 主機發現:nmap-T4 -sn targetip
4
5 端口掃描:nmap-T4 targetip
6
7 服務掃描:nmap-T4 -sV targetip
8
9 作業系統掃描:nmap-T4 -O targetip
上述的掃描方式能滿足一般的資訊搜集需求。而若想利用Nmap探索出特定的場景中更詳細的資訊,則需仔細地設計Nmap指令行參數,以便精确地控制Nmap的掃描行為。
下面列舉比較實用的進階應用場景和技巧。
1 Namp進階選項
1.1 檢視本地路由與接口
Nmap中提供了–iflist選項來檢視本地主機的接口資訊與路由資訊。當遇到無法達到目标主機或想選擇從多塊網卡中某一特定網卡通路目标主機時,可以檢視nmap –iflist中提供的網絡接口資訊。
nmap –iflist

1.2 指定網口與IP位址
在Nmap可指定用哪個網口發送資料,-e <interface>選項。接口的詳細資訊可以參考–iflist選項輸出結果。
示例:
nmap -e eth0 targetip
Nmap也可以顯式地指定發送的源端IP位址。使用-S <spoofip>選項,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
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指定生存時間。
2 掃描防火牆
防火牆在今天網絡安全中扮演着重要的角色,如果能對防火牆系統進行詳細的探測,那麼繞開防火牆或滲透防火牆就更加容易。是以,此處講解利用Nmap擷取防火牆基本資訊典型的用法。
為了擷取防火牆全面的資訊,需盡可能多地結合不同掃描方式來探測其狀态。在設計指令行參數時,可以綜合網絡環境來微調時序參數,以便加快掃描速度。
SYN掃描
首先可以利用基本的SYN掃描方式探測其端口開放狀态。
nmap -sS -T4 www.91ri.org
掃描輸出為:
1 All 997 ports are filtered
2
3 PORT STATE SERVICE
4
5 80/tcp open http
6
7 113/tcp closed auth
8
9 507/tcp open crs
我們可以看到SYN方式探測到3個端口開放,而有997個端口被過濾。Nmap預設掃描隻掃描1000個最可能開放的端口,如果想掃描全部的端口.
使用指令nmap -sS -T4-p- www.91ri.org
FIN掃描
然後可以利用FIN掃描方式探測防火牆狀态。FIN掃描方式用于識别端口是否關閉,收到RST回複說明該端口關閉,否則說明是open或filtered狀态。
nmap -sF -T4 www.91ri.org
1 PORT STATE SERVICE
2
3 7/tcp open|filtered echo
4
5 9/tcp open|filtered discard
6
7 11/tcp open|filtered systat
8
9 13/tcp open|filtered daytime
10
11 23/tcp open|filtered telnet
12
13 25/tcp open|filtered smtp
14
15 37/tcp open|filtered time
16
17 79/tcp open|filtered finger
18
19 80/tcp open|filtered http
20
21 更多端口,此處省略
ACK掃描
然後利用ACK掃描判斷端口是否被過濾。針對ACK探測包,未被過濾的端口(無論打開、關閉)會回複RST包。
nmap -sA -T4 www.91ri.org
掃描輸出為:
1 Not shown: 997 unfiltered ports
2
3 PORT STATE SERVICE
4
5 135/tcp filtered msrpc
6
7 1434/tcp filtered ms-sql-m
8
9 32777/tcp filtered sometimes-rpc17
從結果可以997個端口是未被過濾的(unfiltered),而3個(135/1434/32777)被過濾了。是以,将ACK與FIN掃描 的結果結合分析,我們可以找到很多開放的端口。例如7号端口,FIN中得出的狀态是:open或filtered,從ACK中得出的狀态是 unfiltered,那麼該端口隻能是open的。
Window掃描
當然也可以利用Window掃描方式,得出一些端口資訊,可以與之前掃描分析的結果互相補充。Window掃描方式隻對某些TCPIP協定棧才有效。
window掃描原理與ACK類似,發送ACK包探測目标端口,對回複的RST包中的Window size進行解析。在某些TCPIP協定棧實作中,關閉的端口在RST中會将Window size設定為0;而開放的端口将Window size設定成非0的值。
nmap -sW -p- -T4 www.91ri.org
輸出結果:
1 PORT STATE SERVICE
2
3 7/tcp open echo
4
5 9/tcp open discard
6
7 11/tcp open systat
8
9 13/tcp open daytime
10
11 更多端口,此處省略
在采用多種方式擷取出防火牆狀态後,可以進一步進行應用程式與版本偵測及OS偵測。
3 掃描路由器
Nmap内部維護了一份系統與裝置的資料庫(nmap-os-db),能夠識别數千種不同系統與裝置。是以,可以用來掃描主流的路由器裝置。
3.1 掃描思科路由器
nmap -p1-25,80,512-515,2001,4001,6001,9001 10.20.0.1/16
思科路由器會在上述端口中運作了常見的服務。列舉出上述端口開放的主機,可以定位到路由器裝置可能的IP位址及端口狀态。
3.2 掃描路由器TFTP
nmap –sU –p69 –nvv target
大多數的路由器都支援TFTP協定(簡單檔案傳輸協定),該協定常用于備份和恢複路由器的配置檔案,運作在UDP 69端口上。使用上述指令可以探測出路由器是否開放TFTP。
3.3 掃描路由器作業系統
與通用PC掃描方式類似,使用-O選項掃描路由器的作業系統。-F用于快速掃描最可能開放的100個端口,并根據端口掃描結果進一步做OS的指紋分析。
nmap -O -F -n 192.168.1.1
4 掃描網際網路
Nmap内部的設計非常強大靈活,既能掃描單個主機、小型的區域網路,也可以掃描成千上萬台主機從中發掘使用者關注的資訊。掃描大量主機,需要對掃描時序等參數進行仔細的優化。
4.1 發現網際網路上web伺服器
nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt
随機地産生10萬個IP位址,對其80端口進行掃描。将掃描結果以greppable(可用grep指令提取)格式輸出到nmap.txt檔案。
可以使用grep指令從輸出檔案提取關心的細節資訊。
4.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)
5 掃描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*,defaultscanme.nmap.org
上面以掃描scanme.nmap.org的Web應用展示Nmap提供Web掃描能力,從圖中可以看到掃描結果中提供了比較豐富的資訊。
首先是應用程式及版本:Apachehttpd 2.2.14 (Ubuntu)
然後搜出了該站點的affiliate-id:該ID可用于識别同一擁有者的不同頁面。
然後輸出HTTP-headers資訊,從中檢視到基本配置資訊。
從http-title中,可以看到網頁标題。某些網頁标題可能會洩漏重要資訊,是以這裡也應對其檢查。
[via@AspirationFlow]