2 回答

TA貢獻2021條經(jīng)驗 獲得超8個贊
所有參數(shù)及其解釋如下:
-sT
TCP connect()掃描:這是最基本的TCP掃描方式。connect()是一種系統(tǒng)調(diào)用,由操作系統(tǒng)提供,用來打開一個連接。如果目標(biāo)端口有程序監(jiān)聽,connect()就會成功返回,否則這個端口是不可達的。這項技術(shù)最大的優(yōu)點是,你勿需root權(quán)限。任何UNIX用戶都可以自由使用這個系統(tǒng)調(diào)用。這種掃描很容易被檢測到,在目標(biāo)主機的日志中會記錄大批的連接請求以及錯誤信息。
-sS
TCP同步掃描(TCP SYN):因為不必全部打開一個TCP連接,所以這項技術(shù)通常稱為半開掃描(half-open)。你可以發(fā)出一個TCP同步包(SYN),然后等待回應(yīng)。如果對方返回SYN|ACK(響應(yīng))包就表示目標(biāo)端口正在監(jiān)聽;如果返回RST數(shù)據(jù)包,就表示目標(biāo)端口沒有監(jiān)聽程序;如果收到一個SYN|ACK包,源主機就會馬上發(fā)出一個RST(復(fù)位)數(shù)據(jù)包斷開和目標(biāo)主機的連接,這實際上有我們的操作系統(tǒng)內(nèi)核自動完成的。這項技術(shù)最大的好處是,很少有系統(tǒng)能夠把這記入系統(tǒng)日志。不過,你需要root權(quán)限來定制SYN數(shù)據(jù)包。
-sF -sF -sN
秘密FIN數(shù)據(jù)包掃描、圣誕樹(Xmas Tree)、空(Null)掃描模式:即使SYN掃描都無法確定的情況下使用。一些防火墻和包過濾軟件能夠?qū)Πl(fā)送到被限制端口的SYN數(shù)據(jù)包進行監(jiān)視,而且有些程序比如synlogger和courtney能夠檢測那些掃描。這些高級的掃描方式可以逃過這些干擾。這些掃描方式的理論依據(jù)是:關(guān)閉的端口需要對你的探測包回應(yīng)RST包,而打開的端口必需忽略有問題的包(參考RFC 793第64頁)。FIN掃描使用暴露的FIN數(shù)據(jù)包來探測,而圣誕樹掃描打開數(shù)據(jù)包的FIN、URG和PUSH標(biāo)志。不幸的是,微軟決定完全忽略這個標(biāo)準(zhǔn),另起爐灶。所以這種掃描方式對Windows95/NT無效。不過,從另外的角度講,可以使用這種方式來分別兩種不同的平臺。如果使用這種掃描方式可以發(fā)現(xiàn)打開的端口,你就可以確定目標(biāo)注意運行的不是Windows系統(tǒng)。如果使用-sF、-sX或者-sN掃描顯示所有的端口都是關(guān)閉的,而使用SYN掃描顯示有打開的端口,你可以確定目標(biāo)主機可能運行的是Windwos系統(tǒng)?,F(xiàn)在這種方式?jīng)]有什么太大的用處,因為nmap有內(nèi)嵌的操作系統(tǒng)檢測功能。還有其它幾個系統(tǒng)使用和windows同樣的處理方式,包括Cisco、BSDI、HP/UX、MYS、IRIX。在應(yīng)該拋棄數(shù)據(jù)包時,以上這些系統(tǒng)都會從打開的端口發(fā)出復(fù)位數(shù)據(jù)包。
-sP
ping掃描:有時你只是想知道此時網(wǎng)絡(luò)上哪些主機正在運行。通過向你指定的網(wǎng)絡(luò)內(nèi)的每個IP地址發(fā)送ICMP echo請求數(shù)據(jù)包,nmap就可以完成這項任務(wù)。如果主機正在運行就會作出響應(yīng)。不幸的是,一些站點例如:microsoft.com阻塞ICMP echo請求數(shù)據(jù)包。然而,在默認(rèn)的情況下nmap也能夠向80端口發(fā)送TCP ack包,如果你收到一個RST包,就表示主機正在運行。nmap使用的第三種技術(shù)是:發(fā)送一個SYN包,然后等待一個RST或者SYN/ACK包。對于非root用戶,nmap使用connect()方法。
在默認(rèn)的情況下(root用戶),nmap并行使用ICMP和ACK技術(shù)。
注意,nmap在任何情況下都會進行ping掃描,只有目標(biāo)主機處于運行狀態(tài),才會進行后續(xù)的掃描。如果你只是想知道目標(biāo)主機是否運行,而不想進行其它掃描,才會用到這個選項。
-sU
UDP掃描:如果你想知道在某臺主機上提供哪些UDP(用戶數(shù)據(jù)報協(xié)議,RFC768)服務(wù),可以使用這種掃描方法。nmap首先向目標(biāo)主機的每個端口發(fā)出一個0字節(jié)的UDP包,如果我們收到端口不可達的ICMP消息,端口就是關(guān)閉的,否則我們就假設(shè)它是打開的。
有些人可能會想UDP掃描是沒有什么意思的。但是,我經(jīng)常會想到最近出現(xiàn)的solaris rpcbind缺陷。rpcbind隱藏在一個未公開的UDP端口上,這個端口號大于32770。所以即使端口111(portmap的眾所周知端口號)被防火墻阻塞有關(guān)系。但是你能發(fā)現(xiàn)大于30000的哪個端口上有程序正在監(jiān)聽嗎?使用UDP掃描就能!cDc Back Orifice的后門程序就隱藏在Windows主機的一個可配置的UDP端口中。不考慮一些通常的安全缺陷,一些服務(wù)例如:snmp、tftp、NFS使用UDP協(xié)議。不幸的是,UDP掃描有時非常緩慢,因為大多數(shù)主機限制ICMP錯誤信息的比例(在RFC1812中的建議)。例如,在Linux內(nèi)核中(在net/ipv4/icmp.h文件中)限制每4秒鐘只能出現(xiàn)80條目標(biāo)不可達的ICMP消息,如果超過這個比例,就會給1/4秒鐘的處罰。solaris的限制更加嚴(yán)格,每秒鐘只允許出現(xiàn)大約2條ICMP不可達消息,這樣,使掃描更加緩慢。nmap會檢測這個限制的比例,減緩發(fā)送速度,而不是發(fā)送大量的將被目標(biāo)主機丟棄的無用數(shù)據(jù)包。
不過Micro$oft忽略了RFC1812的這個建議,不對這個比例做任何的限制。所以我們可以能夠快速掃描運行Win95/NT的主機上的所有65K個端口。
-sA
ACK掃描:這項高級的掃描方法通常用來穿過防火墻的規(guī)則集。通常情況下,這有助于確定一個防火墻是功能比較完善的或者是一個簡單的包過濾程序,只是阻塞進入的SYN包。
這種掃描是向特定的端口發(fā)送ACK包(使用隨機的應(yīng)答/序列號)。如果返回一個RST包,這個端口就標(biāo)記為unfiltered狀態(tài)。如果什么都沒有返回,或者返回一個不可達ICMP消息,這個端口就歸入filtered類。注意,nmap通常不輸出unfiltered的端口,所以在輸出中通常不顯示所有被探測的端口。顯然,這種掃描方式不能找出處于打開狀態(tài)的端口。
-sW
對滑動窗口的掃描:這項高級掃描技術(shù)非常類似于ACK掃描,除了它有時可以檢測到處于打開狀態(tài)的端口,因為滑動窗口的大小是不規(guī)則的,有些操作系統(tǒng)可以報告其大小。這些系統(tǒng)至少包括:某些版本的AIX、Amiga、BeOS、BSDI、Cray、Tru64 UNIX、DG/UX、OpenVMS、Digital UNIX、OpenBSD、OpenStep、QNX、Rhapsody、SunOS 4.x、Ultrix、VAX、VXWORKS。從nmap-hackers郵件3列表的文檔中可以得到完整的列表。
-sR
RPC掃描。這種方法和nmap的其它不同的端口掃描方法結(jié)合使用。選擇所有處于打開狀態(tài)的端口向它們發(fā)出SunRPC程序的NULL命令,以確定它們是否是RPC端口,如果是,就確定是哪種軟件及其版本號。因此你能夠獲得防火墻的一些信息。誘餌掃描現(xiàn)在還不能和RPC掃描結(jié)合使用。
-b
FTP反彈攻擊(bounce attack):FTP協(xié)議(RFC 959)有一個很有意思的特征,它支持代理FTP連接。也就是說,我能夠從evil.com連接到FTP服務(wù)器target.com,并且可以要求這臺FTP服務(wù)器為自己發(fā)送Internet上任何地方的文件!1985年,RFC959完成時,這個特征就能很好地工作了。然而,在今天的Internet中,我們不能讓人們劫持FTP服務(wù)器,讓它向Internet上的任意節(jié)點發(fā)送數(shù)據(jù)。如同Hobbit在1995年寫的文章中所說的,這個協(xié)議"能夠用來做投遞虛擬的不可達郵件和新聞,進入各種站點的服務(wù)器,填滿硬盤,跳過防火墻,以及其它的騷擾活動,而且很難進行追蹤"。我們可以使用這個特征,在一臺代理FTP服務(wù)器掃描TCP端口。因此,你需要連接到防火墻后面的一臺FTP服務(wù)器,接著進行端口掃描。如果在這臺FTP服務(wù)器中有可讀寫的目錄,你還可以向目標(biāo)端口任意發(fā)送數(shù)據(jù)(不過nmap不能為你做這些)。
傳遞給-b功能選項的參數(shù)是你要作為代理的FTP服務(wù)器。語法格式為:
-b username:password@server:port。
除了server以外,其余都是可選的。如果你想知道什么服務(wù)器有這種缺陷,可以參考我在Phrack 51發(fā)表的文章。還可以在nmap的站點得到這篇文章的最新版本。
4.2 通用選項
這些內(nèi)容不是必需的,但是很有用。
-P0
在掃描之前,不必ping主機。有些網(wǎng)絡(luò)的防火墻不允許ICMP echo請求穿過,使用這個選項可以對這些網(wǎng)絡(luò)進行掃描。microsoft.com就是一個例子,因此在掃描這個站點時,你應(yīng)該一直使用-P0或者-PT 80選項。
-PT
掃描之前,使用TCP ping確定哪些主機正在運行。nmap不是通過發(fā)送ICMP echo請求包然后等待響應(yīng)來實現(xiàn)這種功能,而是向目標(biāo)網(wǎng)絡(luò)(或者單一主機)發(fā)出TCP ACK包然后等待回應(yīng)。如果主機正在運行就會返回RST包。只有在目標(biāo)網(wǎng)絡(luò)/主機阻塞了ping包,而仍舊允許你對其進行掃描時,這個選項才有效。對于非root用戶,我們使用connect()系統(tǒng)調(diào)用來實現(xiàn)這項功能。使用-PT 來設(shè)定目標(biāo)端口。默認(rèn)的端口號是80,因為這個端口通常不會被過濾。
-PS
對于root用戶,這個選項讓nmap使用SYN包而不是ACK包來對目標(biāo)主機進行掃描。如果主機正在運行就返回一個RST包(或者一個SYN/ACK包)。
-PI
設(shè)置這個選項,讓nmap使用真正的ping(ICMP echo請求)來掃描目標(biāo)主機是否正在運行。使用這個選項讓nmap發(fā)現(xiàn)正在運行的主機的同時,nmap也會對你的直接子網(wǎng)廣播地址進行觀察。直接子網(wǎng)廣播地址一些外部可達的IP地址,把外部的包轉(zhuǎn)換為一個內(nèi)向的IP廣播包,向一個計算機子網(wǎng)發(fā)送。這些IP廣播包應(yīng)該刪除,因為會造成拒絕服務(wù)攻擊(例如smurf)。
-PB
這是默認(rèn)的ping掃描選項。它使用ACK(-PT)和ICMP(-PI)兩種掃描類型并行掃描。如果防火墻能夠過濾其中一種包,使用這種方法,你就能夠穿過防火墻。
-O
這個選項激活對TCP/IP指紋特征(fingerprinting)的掃描,獲得遠程主機的標(biāo)志。換句話說,nmap使用一些技術(shù)檢測目標(biāo)主機操作系統(tǒng)網(wǎng)絡(luò)協(xié)議棧的特征。nmap使用這些信息建立遠程主機的指紋特征,把它和已知的操作系統(tǒng)指紋特征數(shù)據(jù)庫做比較,就可以知道目標(biāo)主機操作系統(tǒng)的類型。
-I
這個選項打開nmap的反向標(biāo)志掃描功能。Dave Goldsmith 1996年向bugtap發(fā)出的郵件注意到這個協(xié)議,ident協(xié)議(rfc 1413)允許使用TCP連接給出任何進程擁有者的用戶名,即使這個進程并沒有初始化連接。例如,你可以連接到HTTP端口,接著使用identd確定這個服務(wù)器是否由root用戶運行。這種掃描只能在同目標(biāo)端口建立完全的TCP連接時(例如:-sT掃描選項)才能成功。使用-I選項是,遠程主機的identd精靈進程就會查詢在每個打開的端口上監(jiān)聽的進程的擁有者。顯然,如果遠程主機沒有運行identd程序,這種掃描方法無效。
-f
這個選項使nmap使用碎片IP數(shù)據(jù)包發(fā)送SYN、FIN、XMAS、NULL。使用碎片數(shù)據(jù)包增加包過濾、入侵檢測系統(tǒng)的難度,使其無法知道你的企圖。不過,要慎重使用這個選項!有些程序在處理這些碎片包時會有麻煩,我最喜歡的嗅探器在接受到碎片包的頭36個字節(jié)時,就會發(fā)生segmentation faulted。因此,在nmap中使用了24個字節(jié)的碎片數(shù)據(jù)包。雖然包過濾器和防火墻不能防這種方法,但是有很多網(wǎng)絡(luò)出于性能上的考慮,禁止數(shù)據(jù)包的分片。
注意這個選項不能在所有的平臺上使用。它在Linux、FreeBSD、OpenBSD以及其它一些UNIX系統(tǒng)能夠很好工作。
-v
冗余模式。強烈推薦使用這個選項,它會給出掃描過程中的詳細信息。使用這個選項,你可以得到事半功倍的效果。使用-d選項可以得到更加詳細的信息。
-h
快速參考選項。
-oN
把掃描結(jié)果重定向到一個可讀的文件logfilename中。
-oM
把掃描結(jié)果重定向到logfilename文件中,這個文件使用主機可以解析的語法。你可以使用-oM -來代替logfilename,這樣輸出就被重定向到標(biāo)準(zhǔn)輸出stdout。在這種情況下,正常的輸出將被覆蓋,錯誤信息荏苒可以輸出到標(biāo)準(zhǔn)錯誤stderr。要注意,如果同時使用了-v選項,在屏幕上會打印出其它的信息。
-oS thIs l0gz th3 r3suLtS of YouR ScanZ iN a s| THe fiL3 U sPecfy 4s an arGuMEnT! U kAn gIv3 the 4rgument -
(wItHOUt qUOteZ) to sh00t output iNT0 stDouT!@!! 莫名其妙,下面是我猜著翻譯的,相形字?
把掃描結(jié)果重定向到一個文件logfilename中,這個文件使用一種"黑客方言"的語法形式(作者開的玩笑?)。同樣,使用-oS -就會把結(jié)果重定向到標(biāo)準(zhǔn)輸出上。
-resume
某個網(wǎng)絡(luò)掃描可能由于control-C或者網(wǎng)絡(luò)損失等原因被中斷,使用這個選項可以使掃描接著以前的掃描進行。logfilename是被取消掃描的日志文件,它必須是可讀形式或者機器可以解析的形式。而且接著進行的掃描不能增加新的選項,只能使用與被中斷的掃描相同的選項。nmap會接著日志文件中的最后一次成功掃描進行新的掃描。
-iL
從inputfilename文件中讀取掃描的目標(biāo)。在這個文件中要有一個主機或者網(wǎng)絡(luò)的列表,由空格鍵、制表鍵或者回車鍵作為分割符。如果使用-iL -,nmap就會從標(biāo)準(zhǔn)輸入stdin讀取主機名字。你可以從指定目標(biāo)一節(jié)得到更加詳細的信息。
-iR
讓nmap自己隨機挑選主機進行掃描。
-p
這個選項讓你選擇要進行掃描的端口號的范圍。例如,-p 23表示:只掃描目標(biāo)主機的23號端口。-p 20-30,139,60000-表示:掃描20到30號端口,139號端口以及所有大于60000的端口。在默認(rèn)情況下,nmap掃描從1到1024號以及nmap-services文件(如果使用RPM軟件包,一般在/usr/share/nmap/目錄中)中定義的端口列表。
-F
快速掃描模式,只掃描在nmap-services文件中列出的端口。顯然比掃描所有65535個端口要快。
-D
使用誘餌掃描方法對目標(biāo)網(wǎng)絡(luò)/主機進行掃描。如果nmap使用這種方法對目標(biāo)網(wǎng)絡(luò)進行掃描,那么從目標(biāo)主機/網(wǎng)絡(luò)的角度來看,掃描就象從其它主機(decoy1,等)發(fā)出的。從而,即使目標(biāo)主機的IDS(入侵檢測系統(tǒng))對端口掃描發(fā)出報警,它們也不可能知道哪個是真正發(fā)起掃描的地址,哪個是無辜的。這種掃描方法可以有效地對付例如路由跟蹤、response-dropping等積極的防御機制,能夠很好地隱藏你的IP地址。
每個誘餌主機名使用逗號分割開,你也可以使用ME選項,它代表你自己的主機,和誘餌主機名混雜在一起。如果你把ME放在第六或者更靠后的位置,一些端口掃描檢測軟件幾乎根本不會顯示你的IP地址。如果你不使用ME選項,nmap會把你的IP地址隨機夾雜在誘餌主機之中。
注意:你用來作為誘餌的主機應(yīng)該正在運行或者你只是偶爾向目標(biāo)發(fā)送SYN數(shù)據(jù)包。很顯然,如果在網(wǎng)絡(luò)上只有一臺主機運行,目標(biāo)將很輕松就會確定是哪臺主機進行的掃描?;蛟S,你還要直接使用誘餌的IP地址而不是其域名,這樣誘餌網(wǎng)絡(luò)的域名服務(wù)器的日志上就不會留下關(guān)于你的記錄。
還要注意:一些愚蠢的端口掃描檢測軟件會拒絕路由試圖進行端口掃描的主機。因而,你需要讓目標(biāo)主機和一些誘餌斷開連接。如果誘餌是目標(biāo)主機的網(wǎng)關(guān)或者就是其自己時,會給目標(biāo)主機造成很大問題。所以你需要慎重使用這個選項。
誘餌掃描既可以在起始的ping掃描也可以在真正的掃描狀態(tài)下使用。它也可以和-O選項組合使用。
使用太多的誘餌掃描能夠減緩你的掃描速度甚至可能造成掃描結(jié)果不正確。同時,有些ISP會把你的欺騙包過濾掉。雖然現(xiàn)在大多數(shù)的ISP不會對此進行限制。
-S
在一些情況下,nmap可能無法確定你的源地址(nmap會告訴你)。在這種情況下,可以使用這個選項給出你的IP地址。
在欺騙掃描時,也使用這個選項。使用這個選項可以讓目標(biāo)認(rèn)為是其它的主機對自己進行掃描。
-e
告訴nmap使用哪個接口發(fā)送和接受數(shù)據(jù)包。nmap能夠自動對此接口進行檢測,如果無效就會告訴你。
-g
設(shè)置掃描的源端口。一些天真的防火墻和包過濾器的規(guī)則集允許源端口為DNS(53)或者FTP-DATA(20)的包通過和實現(xiàn)連接。顯然,如果攻擊者把源端口修改為20或者53,就可以摧毀防火墻的防護。在使用UDP掃描時,先使用53號端口;使用TCP掃描時,先使用20號端口。注意只有在能夠使用這個端口進行掃描時,nmap才會使用這個端口。例如,如果你無法進行TCP掃描,nmap會自動改變源端口,即使你使用了-g選項。
對于一些掃描,使用這個選項會造成性能上的微小損失,因為我有時會保存關(guān)于特定源端口的一些有用的信息。
-r
告訴nmap不要打亂被掃描端口的順序。
--randomize_hosts
使nmap在掃描之前,打亂每組掃描中的主機順序,nmap每組可以掃描最多2048臺主機。這樣,可以使掃描更不容易被網(wǎng)絡(luò)監(jiān)視器發(fā)現(xiàn),尤其和--scan_delay 選項組合使用,更能有效避免被發(fā)現(xiàn)。
-M
設(shè)置進行TCP connect()掃描時,最多使用多少個套接字進行并行的掃描。使用這個選項可以降低掃描速度,避免遠程目標(biāo)宕機。
參考資料: nmap- []說明
- 2 回答
- 0 關(guān)注
- 1022 瀏覽
添加回答
舉報