Nmap 掃描原理及使用方法
Namp包含四項(xiàng)基本功能
- 主機(jī)返現(xiàn)(Host Discovery)
- 端口掃描(Port Scanning)
- 應(yīng)用與版本探測(cè)(Version Detection)
- 操作系統(tǒng)偵測(cè)(Openrating System Detection)
Nmap基本掃描方法
2.1 用法引入
2.1.1確定端口狀況
確定目標(biāo)主機(jī)在線情況及端口基本狀況。
命令形式:
namp targethost
2.1.2 完整全面的掃描
對(duì)主機(jī)進(jìn)行完整全面的掃描,那么可以使用nmap內(nèi)置的-A選項(xiàng)。使用該選項(xiàng),nmap 對(duì)主機(jī)進(jìn)行主機(jī)發(fā)現(xiàn)、端口掃描、應(yīng)用程序與版本偵測(cè)、操作系統(tǒng)偵測(cè)及調(diào)用默認(rèn)NSE腳本掃描。
1)命令形式:
nmap -T4 -A -v targethost
2)參數(shù)詳解:
- -A 用于使用進(jìn)攻性方式掃描
- -T4 指定掃描過程使用的時(shí)序,(總共6個(gè)級(jí)別[0-5]),級(jí)別越高,掃描速度越快,但容易被防火墻或IDS檢測(cè)屏蔽掉)。
- -v 表示顯示冗余信息,顯示掃描的細(xì)節(jié)。
2.2 主機(jī)發(fā)現(xiàn)
2.2.1 主機(jī)發(fā)現(xiàn)原理
主機(jī)發(fā)現(xiàn)發(fā)現(xiàn)的原理與Ping命令類似,發(fā)送探測(cè)包到目標(biāo)主機(jī),如果收到回復(fù),說明目標(biāo)主機(jī)是開啟的。
1)常見主機(jī)探測(cè)方式:
- ICMP ECHO/TIMESTAMP/NETMASK報(bào)文
- TCPSYN/ACK包
- SCTP INIT/COOKIE-ECHO包等等
2)案例:
Nmap的用戶位于源端,IP地址192.168.0.5,向目標(biāo)主機(jī)192.168.0.3發(fā)送ICMP Echo Request。如果該請(qǐng)求報(bào)文沒有被防火墻攔截掉,那么目標(biāo)機(jī)會(huì)回復(fù)ICMP Echo Reply包回來。以此來確定目標(biāo)主機(jī)是否在線。
3)默認(rèn)情況下:Nmap會(huì)發(fā)送四種不同類型的數(shù)據(jù)包來探測(cè)目標(biāo)主機(jī)是否在線。
- ICMP echo request
- a TCP SYN packet to port 443
- a TCP SYN packert to port 80
- an ICMP timestamp request
依次發(fā)送四個(gè)報(bào)文探測(cè)目標(biāo)機(jī)是否開啟。只要收到其中一個(gè)包的回復(fù),那就證明目標(biāo)機(jī)開啟。使用四種不同類型的數(shù)據(jù)包可以避免因防火墻或丟包造成的判斷錯(cuò)誤。
2.2.2 主機(jī)發(fā)現(xiàn)的用法
- -sL:List Scan 列表掃描,僅將指定的目標(biāo)主機(jī)的IP列出來,不進(jìn)行主機(jī)發(fā)現(xiàn)。
- -sn:Ping Scan 只進(jìn)行主機(jī)發(fā)現(xiàn),不進(jìn)行端口掃描。
- -Pn:將所有指定的主機(jī)視作開啟的,跳過主機(jī)發(fā)現(xiàn)的過程。
- -PS/PA/PU/PY [portlist]:使用TCPSYN/ACK或SCTP INIT/ECHO方式進(jìn)行發(fā)現(xiàn)。
- -PE/PP/PM:使用ICMP echo,timestamp,and netmask 請(qǐng)求包發(fā)現(xiàn)主機(jī)。
- -PO [protocllist]:使用IP協(xié)議包探測(cè)對(duì)方主機(jī)是否開啟。
- -n/-R:-n表示不進(jìn)行DNS解析;-R表示總是進(jìn)行DNS解析。
- --dns-servers <serv1[,serv2],...>:指定DNS服務(wù)器。
- --system-dns:指定使用系統(tǒng)的DNS服務(wù)器。
- --traceroute:追蹤每個(gè)路由節(jié)點(diǎn)。
2.3 端口掃描
Namp通過探測(cè)將端口劃分為6個(gè)狀態(tài):
- open:端口是開放的。
- closed:端口是關(guān)閉的。
- filtered:端口被防火墻IDS/IPS屏蔽,無法確定其狀態(tài)。
- unfiltered:端口沒有被屏蔽,但是否開放需要進(jìn)一步確定。
- open|filtered:端口是開放的或被屏蔽。
- closed|filtered:端口是關(guān)閉的或被屏蔽。
2.3.1 端口掃描原理
2.3.1.1 TCP SYN scanning
TCP SYN scanning 是Nmap默認(rèn)的掃描方式,稱作半開放掃描。
原理:該方式發(fā)送SYN到目標(biāo)端口。
- 如果收到SYN/ACK回復(fù),那么判斷該端口是開發(fā);
- 如果收到RST包,那么判斷該端口是關(guān)閉;
- 如果沒收到回復(fù),那么判斷該端口是被屏蔽。
2.3.1.2 TCP connect scanning
原理:TCP connect 方式使用系統(tǒng)網(wǎng)絡(luò)API connect 向目標(biāo)主機(jī)的端口發(fā)起連接。
- 如果無法連接,說明該端口關(guān)閉。
優(yōu)缺點(diǎn):該方式掃描速度比較慢,而且由于建立完整的TCP連接會(huì)在目標(biāo)機(jī)上留下記錄信息,不夠隱蔽。所以,TCP connect是TCP SYN無法使用才考慮選擇的方式。
2.3.1.3 TCP ACK scanning
原理:向目標(biāo)主機(jī)的端口發(fā)送ACK包。
- 如果收到RST包,說明該端口沒有被防火墻屏蔽;
- 沒有收到RST包,說明被屏蔽。
優(yōu)缺點(diǎn):該方式只能用于確定防火墻是否屏蔽某個(gè)端口,可以輔助TCP SYN的方式來判斷目標(biāo)主機(jī)防火墻的狀況。
2.3.1.4 TCP FIN/Xmas/NULL scanning
這三種掃描方式被稱為秘密掃描(Stealthy Scan)
原理:FIN掃描向目標(biāo)主機(jī)的端口發(fā)送的TCP FIN包或Xmas tree包/Null包
- 如果收到對(duì)方RST回復(fù)包,那么說明該端口是關(guān)閉的;
- 沒有收到RST包說明端口可能是開放的或被屏蔽的(open|filtered)。
其中Xmas tree包是指flags中FIN URG PUSH被置為1的TCP包;NULL包是指所有flags都為0的TCP包。
2.3.1.5 UDP scanning
UDP掃描方式用于判斷UDP端口的情況。
原理:向目標(biāo)主機(jī)的UDP端口發(fā)送探測(cè)包。
- 如果收到回復(fù)“ICMP port unreachable”就說明該端口是關(guān)閉的;
- 如果沒有收到回復(fù),那說明UDP端口可能是開放的或屏蔽的。
2.3.2 端口掃描用法
2.3.2.1 掃描方式選項(xiàng)
- -sS/sT/sA/sW/sM:指定使用TCP SYN/Connect()/ACK/Window/Maimon scans的方式對(duì)目標(biāo)主機(jī)進(jìn)行掃描。
- -sU:指定使用UDP掃描方式確定目標(biāo)主機(jī)的UDP端口狀況。
- -sN/sF/sX:指定使用TCP Null,FIN,and Xmas scans 秘密掃描方式來協(xié)助探測(cè)對(duì)方的TCP端口狀態(tài)。
- -sI <zombiehost[:probeport]>:指定使用idle scan方式來掃描目標(biāo)主機(jī)。
- -sY/sZ:使用SCTP INIT/COOKIE-ECHO來掃描SCTP協(xié)議端口的開放情況。
- -sO:使用IP protocol 掃描確定目標(biāo)主機(jī)支持的協(xié)議類型。
- -b <FTP relay host>:使用FTP bounce scan掃描方式。
- --scanflages <flags>:定制TCP包的flags。
2.3.2.2 端口參數(shù)與掃描順序
- -p <port rages>:掃描指定的端口。
- -F:Fast mode 快速模式,僅掃描TOP 100的端口。
- -r:不進(jìn)行端口隨機(jī)打亂的操。
- --top-ports <number>:掃描開放概率最高的number個(gè)端口。
- --port-ratio <ratio>:掃描指定頻率以上的端口。
2.4 版本偵測(cè)
2.4.1 優(yōu)缺點(diǎn)
- 高速。并行地進(jìn)行套接字操作,實(shí)現(xiàn)一組高效的探測(cè)匹配定義語法。
- 盡可能地確定應(yīng)用名字與版本名字。
- 支持TCP/UDP協(xié)議,支持文本格式與二進(jìn)制格式。
- 支持多種平臺(tái)服務(wù)的偵測(cè),包括Linux/Windows/Mac OS/FreeBSD等系統(tǒng)。
- 如果檢測(cè)到SSL,會(huì)調(diào)用openSSL繼續(xù)偵測(cè)運(yùn)行在SSL上的具體協(xié)議(如HTTPS/POP3S/IMAPS)。
- 如果檢測(cè)到SunRPC服務(wù),那么會(huì)調(diào)用brute-force RPC grinder進(jìn)一步確定RPC程序編號(hào)、名字、版本號(hào)。
- 支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。
- 通用平臺(tái)枚舉功能(CPE)
- 廣泛的應(yīng)用程序數(shù)據(jù)庫(nmap-services-probes)。目前Nmap可以識(shí)別幾千種服務(wù)的簽名,包含了180多種不同的協(xié)議。
2.4.2 版本偵測(cè)原理
- 首先檢查open與open|filtered狀態(tài)的端口是否在排除端口列表內(nèi)。如果在排除列表,將該端口剔除。
- 如果是TCP端口,嘗試建立TCP連接。嘗試等待片刻。通常在等待時(shí)間內(nèi),會(huì)接收到目標(biāo)機(jī)發(fā)送的“WelcomeBanner”信息。nmap將接收到的Banner與nmap-services-probes中NULL probe中的簽名進(jìn)行對(duì)比。查找對(duì)應(yīng)應(yīng)用程序的名字與版本信息。
- 果通過“Welcome Banner”無法確定應(yīng)用程序版本,那么nmap再嘗試發(fā)送其他的探測(cè)包(即從nmap-services-probes中挑選合適的probe),將probe得到回復(fù)包與數(shù)據(jù)庫中的簽名進(jìn)行對(duì)比。如果反復(fù)探測(cè)都無法得出具體應(yīng)用,那么打印出應(yīng)用返回報(bào)文,讓用戶自行進(jìn)一步判定。
- 如果是UDP端口,那么直接使用nmap-services-probes中探測(cè)包進(jìn)行探測(cè)匹配。根據(jù)結(jié)果對(duì)比分析出UDP應(yīng)用服務(wù)類型。
- 如果探測(cè)到應(yīng)用程序是SSL,那么調(diào)用openSSL進(jìn)一步的偵查運(yùn)行在SSL之上的具體的應(yīng)用類型。
- 如果探測(cè)到應(yīng)用程序是SunRPC,那么調(diào)用brute-force RPC grinder進(jìn)一步探測(cè)具體服務(wù)。
2.4.3 版本偵測(cè)用法
- -sV: 指定讓Nmap進(jìn)行版本偵測(cè)
- --version-intensity <level>: 指定版本偵測(cè)強(qiáng)度(0-9),默認(rèn)為7。數(shù)值越高,探測(cè)出的服務(wù)越準(zhǔn)確,但是運(yùn)行時(shí)間會(huì)比較長。
- --version-light: 指定使用輕量偵測(cè)方式 (intensity 2)
- --version-all: 嘗試使用所有的probes進(jìn)行偵測(cè) (intensity 9)
- --version-trace: 顯示出詳細(xì)的版本偵測(cè)過程信息。
2.5 OS偵測(cè)
2.5.1 OS偵測(cè)原理
- Nmap內(nèi)部包含了2600多已知系統(tǒng)的指紋特征(在文件nmap-os-db文件中)。將此指紋數(shù)據(jù)庫作為進(jìn)行指紋對(duì)比的樣本庫。
- 分別挑選一個(gè)open和closed的端口,向其發(fā)送經(jīng)過精心設(shè)計(jì)的TCP/UDP/ICMP數(shù)據(jù)包,根據(jù)返回的數(shù)據(jù)包生成一份系統(tǒng)指紋。
- 將探測(cè)生成的指紋與nmap-os-db中指紋進(jìn)行對(duì)比,查找匹配的系統(tǒng)。如果無法匹配,以概率形式列舉出可能的系統(tǒng)。
2.5.2 OS偵測(cè)用法
- -O: 指定Nmap進(jìn)行OS偵測(cè)。
- --osscan-limit: 限制Nmap只對(duì)確定的主機(jī)的進(jìn)行OS探測(cè)(至少需確知該主機(jī)分別有一個(gè)open和closed的端口)。
- --osscan-guess: 大膽猜測(cè)對(duì)方的主機(jī)的系統(tǒng)類型。由此準(zhǔn)確性會(huì)下降不少,但會(huì)盡可能多為用戶提供潛在的操作系統(tǒng)。