一,功能介紹
Nmap是網路連線埠掃描軟體,用來掃描網上電腦開放的哪些連線埠,並且確定哪些服務執行在哪些埠連線,推斷是哪個作業系統,他是網路管理員必備的軟體之一,以及用於評估網路系統安全。
二,部署指南
* kali整合壞境
* 單獨安裝
三,實戰
Nmap的引數選項繁多,功能非常豐富,Nmap的通用命令格式Nmap<掃描選項><掃描目標>
(一)主機發現
1)主機發現原理
主機發現的原理和ping命令差不多,傳送探測包到目標主機,如果收到回覆,那表明主機是存在的。Nmap支援十多種不同的主機探測方式,如ICMP BCHO/TIMESYAMP/NETMASK報文,傳送TCPSYN/AVCK包,傳送SCTP INIT/COOKIE-ECHO包,使用者可以在不同的條件下靈活選用不同的方式進行探測目標主機。
2)主機發現的基本用法
- -sL:List Scan 列表掃描,僅將掃描的主機列舉出來,不進行主機發現。
- -sn:Ping Scan 只進行主機發現,不進行埠掃描。
- -Pn:將指定的主機視為開啟,跳過主機發現的過程。
- -PS/PA/PU/PY:使用TCP SYN/ACK或SCTP INIT/ECHO方式進行主機發現。
- -PE/PP/PM:使用ICMP echo,tmestamp,and netmask 請求發現主機。
- -PO:使用IP協議包探測對方主機是否開啟。
- -n /-R:-n表示不進行DNS解析,-R表示總進行DNS解析。
- --dns-server:指定dns伺服器。
- --system-dns:指定使用系統的DNS。
- --traceroute:追蹤每個路由節點。
(二)埠掃描
1)埠掃描原理:
埠掃描是Nmap最核心的功能,用於確定TCP/UDP埠的開放情況,預設情況下,Nmap會掃描1000個最有可能開放的TCP埠,Nmap將埠分為六個狀態。
open:埠是開放的。
closed:埠是關閉的。
filtered:埠被防火牆IDS/IPS遮蔽,無法確定其狀態。
unfiltered:埠沒有被遮蔽,但是否開放需進一步確定。
open/filtered:埠是開放的或被遮蔽。
closed/unfiltered:埠是關閉的或沒有被遮蔽。
埠掃描非常強大,提供了很多的探測方式:
- TCP SYN scanning
- TCP connect scanning
- TPC ACK scanning
- TCP FIN/Xmas/NULl scanning
- UDP scanning
- 其他方式
2)埠掃描用法
- -sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式來對目標主機進行掃描。
- -sU:指定使用UDP方式確定目標主機的UDP狀況。
-
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans祕密掃描方式來協助探測對方的TCP埠狀態。
- --scanflags <flags>: 定製TCP包的flags。
-
-sI <zombiehost[:probeport]>: 指定使用idle scan方式來掃描目標主機(前提需要找到合適的zombie host)。
- -sY/sZ: 使用SCTP INIT/COOKIE-ECHO來掃描SCTP協議埠的開放的情況。
- -sO: 使用IP protocol 掃描確定目標機支援的協議型別。
-
-b <FTP relay host>: 使用FTP bounce scan掃描方式 。
(三)版本偵測
1)版本偵測原理
簡要的介紹版本的偵測原理。版本偵測主要分為以下幾個步驟:
- 首先檢查open與open|filtered狀態的埠是否在排除埠列表內。如果在排除列表,將該埠剔除。
- 如果是TCP埠,嘗試建立TCP連線。嘗試等待片刻(通常6秒或更多,具體時間可以查詢檔案nmap-services-probes中Probe TCP NULL q||對應的 totalwaitms)。通常在等待時間內,會接收到目標機傳送的“WelcomeBanner”資訊。nmap將接收到的Banner與nmap-services-probes中NULL probe中的簽名進行對比。查詢對應應用程式的名字與版本資訊。
- 如果通過“Welcome Banner”無法確定應用程式版本,那麼nmap再嘗試傳送其他的探測包(即從nmap-services-probes中挑選合適的probe),將probe得到回覆包與資料庫中的簽名進行對比。如果反覆探測都無法得出具體應用,那麼列印出應用返回報文,讓使用者自行進一步判定。
- 如果是UDP埠,那麼直接使用nmap-services-probes中探測包進行探測匹配。根據結果對比分析出UDP應用服務型別。
- 如果探測到應用程式是SSL,那麼呼叫openSSL進一步的偵查執行在SSL之上的具體的應用型別。
- 如果探測到應用程式是SunRPC,那麼呼叫brute-force RPC grinder進一步探測具體服務。
2)版本偵測用法:
- -sV: 指定讓Nmap進行版本偵測
- --version-intensity <level>: 指定版本偵測強度(0-9),預設為7。數值越高,探測出的服務越準確,但是執行時間會比較長。
- --version-light: 指定使用輕量偵測方式 (intensity 2)
- --version-all: 嘗試使用所有的probes進行偵測 (intensity 9)
- --version-trace: 顯示出詳細的版本偵測過程資訊。
(四)os偵測
1)os偵測原理
Nmap使用TCP/IP協議棧指紋來識別不同的作業系統和裝置。在RFC規範中,有些地方對TCP/IP的實現並沒有強制規定,
由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根據這些細節上的差異來判斷作業系統的型別的。
具體實現方式如下:
Nmap內部包含了2600多已知系統的指紋特徵(在檔案nmap-os-db檔案中)。將此指紋資料庫作為進行指紋對比的樣本庫。
分別挑選一個open和closed的埠,向其傳送經過精心設計的TCP/UDP/ICMP資料包,根據返回的資料包生成一份系統指紋。
將探測生成的指紋與nmap-os-db中指紋進行對比,查詢匹配的系統。如果無法匹配,以概率形式列舉出可能的系統。
2)os偵測用法
- -O: 指定Nmap進行OS偵測。
- --osscan-limit: 限制Nmap只對確定的主機的進行OS探測(至少需確知該主機分別有一個open和closed的埠)。
- --osscan-guess: 大膽猜測對方的主機的系統型別。由此準確性會下降不少,但會盡可能多為使用者提供潛在的作業系統。
(五)漏洞掃描
掃描埠並且標記可以爆破的服務
nmap
目標
--script=ftp-brute,imap-brute,smtp-brute,pop3-brute,mongodb-brute,redis-brute,
ms-sql-brute,rlogin-brute,rsync-brute,mysql-brute,pgsql-brute,oracle-sid-brute,
oracle-brute,rtsp-url-brute,snmp-brute,svn-brute,telnet-brute,vnc-brute,xmpp-brute
判斷常見的漏洞並掃描埠
nmap
目標
--script=auth,vuln
精確判斷漏洞並掃描埠
nmap
目標
--script=dns-zone-transfer,ftp-anon,ftp-proftpd-backdoor,ftp-vsftpd-backdoor,
4221
ftp-vuln-cve2010-,http-backup-finder,http-cisco-anyconnect,
info
http-iis-short-name-brute,http-put,http-php-version,http-shellshock,http-robots.
txt,http-svn-enum,http-webdav-scan,iis-buffer-overflow,iax2-version,memcached-,
info
mongodb-,msrpc-enum,ms-sql-
info,mysql-
info,nrpe-enum,pptp-version,redis-
info,
2012
rpcinfo,samba-vuln-cve--
1182,smb-vuln-ms08-
067,smb-vuln-ms17-
010,snmp-
info,sshv1,
info
xmpp-,tftp-enum,teamspeak2-version
四,Nmap的優劣勢
優勢:
- 功能靈活強大,支援多種目標,大量計算機的同時掃描;
- 開源,相關幫助文件十分詳細;
- 流行,由於其具有強大的掃描機探測功能,,已被成千上萬安全專家使用。
劣勢:
- Nmap引數眾多,難以一一記憶;