FreeBSD下nmap安裝及使用

FreeBSD下nmap安裝及使用

Nmap網絡安全掃描器說明

freebsd#cd /usr/ports/security/nmap
freebsd#make install

名稱: nmap - 網絡勘察工具和安全掃描器

nmap被開發用於允許系統管理員察看一個大的網絡系統有哪些主機以及其上運行何種服務。它支持多種協
議的掃描如UDP,TCP connect(),TCP SYN (half open), ftp proxy (bounce attack),Reverse-ident,
ICMP (ping sweep), FIN, ACK sweep,Xmas Tree, SYN sweep, 和Null掃描。你可以從SCAN TYPES一節中
察看相關細節。nmap還提供一些實用功能如通過tcp/ip來甄別操作系統類型、祕密掃描、動態延遲和重發
、平行掃描、通過並行的PING偵測下屬的主機、欺騙掃描、端口過濾探測、直接的RPC掃描、分佈掃描、靈
活的目標選擇以及端口的描述。

對非ROOT的用戶來說,nmap的正式版可以做很多重要的東西了。不幸的是部份關鍵的核心功能(比如raw
sockets)需要root權限。所以儘量以root的身份運行nmap。

運行nmap後通常會得到一個關於你掃描的機器的一個實用的端口列表。nmap總是顯示該服務的服務名稱,端
口號,狀態以及協議。狀態有'open','filtered'和'unfiltered'三種。'open'指的是目標機器將會在該端
口接受你的連接請求。'filtered'指的是有防火牆、過濾裝置或者其它的網絡障礙物在這個端口阻擋了
nmap 進一步查明端口是否開放的動作。至於'unfiltered'則只有在大多數的掃描端口都處在'filtered'狀
態下才會出現的。

根據選項的使用,nmap還可以報告遠程主機下面的特性:使用的操作系統、TCP連續性、在各端口上綁定的
應用程序用戶的用戶名、DNS名、主機是否是個smurf地址以及一些其它功能。

選項:

這些選項通常都是可組合使用的。使用參數可以精確地定義一個掃描模式。nmap將會盡力捕捉並對不規範
的參數組合作出提示。如果你急於開始,你可以跳過本文未尾的示例節——那兒有最基本的使用方法的示範
。你也可以使用nmap -h來打開關於nmap選項參數的簡介。


-sT TCP connect()掃描:這是對TCP的最基本形式的偵測。在該操作下,該connect()對目標主機上你感興
趣的端口進行試探,如果該端口被監聽,則連接成功——否則代表這個端口無法到達。這個技術的很大好處
就是你無須任何特殊權限,在大多數的UNIX系統下這個命令可以被任何人自由地使用。
但是這種形式的探測很容易被目標主機察覺並記錄下來。因爲服務器接受了一個連接但它卻馬上斷開,於
是其記錄會顯示出一連串的連接及錯誤信息。

-sS TCP SYN 掃描:這類技術通常涉及一種“半開”式的掃描——因爲你不打開完整的TCP連接,你發送一個
SYN信息包就象你要打開一個真正的連接而且你在等待對方的迴應。一個SYN|ACK(應答)會表明該端口是開
放監聽的。一個RST(空閒?)則代表該端口未被監聽。如果SYN|ACK的迴應返回,則會馬上發送一個RST包
來中斷這個連接(事實上是我們的系統核心在幹這事)。這種掃描的最大好處是隻有極少的站點會對它作
出記錄,但是——你需要有root權限來定製這些SYN包。

-sF -sX -sN
Stealth FIN,Xmas Tree 或者Null掃描模式:有時甚至SYN掃描都不夠隱蔽——一些防火牆及信息包過濾裝置
會在重要端口守護,SYN包在此時會被截獲,一些應用軟件如Synlogger以及Courtney對偵測這類型的掃描
都是行家。所以呢,在另一方面要有更進一步的掃描能在不遇到麻煩的情況下通過它們……
這個主意是關閉的端口會對你發送的探測信息包返回一個RST,而打開的端口則對其忽略不理(你可以參閱
RFC 973 PP64)。所以FIN掃描使用空的FIN信息包作爲探針、Xmas tree使用FIN,URG,PUSH標記、Null掃
描則不用任何標記。但是不幸的是微軟以他們一貫的風格不理睬這一標準……所以這一掃描在WINDOWS9X以及
NT下不能工作。
從積極方面來講,這其實也是一個很好的區分兩種平臺的辦法——如果這次掃描發現了打開的端口,那你就
能明白這臺機器不是運行WINDOWS。如果-sF,-sX,-sN的掃描顯示所有端口都是關閉的但一個SYN(-sS)掃描
卻顯示有打開端口,那你就能大致推斷它是WINDOWS平臺。這只是一個簡單應用,因爲現在nmap已經有了更
徹底的操作系統判別方法——當然它的原理類似上面所提到的.
這些平臺包括Cisco, BSDI, HP/UX, MVS, 和IRIX。

-sP Ping掃描:有時你僅希望瞭解網絡上有哪些主機是開放的,nmap可以通過對你指定的IP地址發送ICMP
的echo request信息包來做到這一點,有迴應的主機就是開放的啦。但令人討厭的是一些站點比如
microsoft.com對echo request包設置了障礙。這樣的話nmap還能發送一個TCP ack包到80端口(默認),
如果獲得了RST返回,機器是開放的。第三個方法是發送一個SYN信息包並等待RST 或SYN/ACK響應了。作爲
非root的用戶可以使用的,常用connect()模式。對root來說,默認的nmap同時使用ICMP和ACK的方法掃描
,當然你也可以改變-P選項。注意你最好先ping一下用戶,只有有迴應的主機纔有必要掃描,只有你不想
探測任何的實際端口掃描只想大面積地搜索一下活動的主機,你可以使用此選項。

-sU UDP掃描:這一方法是用來確定哪個UDP(User Datagram Protocol,RFC 768)端口在主機端開放。這一
技術是以發送零字節的UDP信息包到目標機器的各個端口,如果我們收到一個ICMP端口無法到達的迴應,那
麼該端口是關閉的,否則我們可以認爲它是敞開大門的。有些人或許會認爲UDP掃描是無意義的,我通常會
以最近的Solaris rcpbind漏洞來提醒他們。Rpcbind會隱藏在一個非正式的UDP端口於32770口以上,因此
對111進行防火牆過濾是無關緊要的.但你是否查找過在30000以上的端口是否處在監聽狀態中……,用UDP掃
描你就能輕鬆地做到這一點!或者大家還可以想想cDc出品的Back Orifice***(BO),它可以在Windows
的機器中配置一個UDP端口,更不用說如此衆多可以利用UDP的、易受***的服務如snmp,tftp,NFS等了。但
有一點不得不提及的是UDP掃描在目標主機按照RFC 1812(4.3.2.8節)建議的那樣限制ICMP錯誤信息的傳
送速率時會令人痛苦的緩慢。舉例來說吧,Linux 的核心配置(在net/ipv4/icmp.h)限制了每4秒產生80次
的無法到達信息——每次產生1/4秒的延遲。Solaris有着更嚴格的限制(大約每秒兩次就會延遲),所以這
要耗費相當長的時間。nmap會偵測到這種限制並自動減緩速度——這也勝過用無意義的會被目標主機忽略的
大量信息包來填充這個網絡。如以往一樣,微軟還是不在乎RFC所建議的事而且沒有任何限制性措施實行於
WINDOWS或NT上,這樣我們可以把多達65K的端口以極高的速度掃描完畢,歡呼吧!

-sR RPC掃描:這一方法是結合nmap多種掃描的一種模式,它取得所有的TCP/UDP開放端口並且用SunRPC程
序NULL命令來試圖確定是否是RPC端口並且——如果是的話,其上運行什麼程序,何種版本。這樣你可以在目
標主機躲在防火牆後或者由TCP wrappers防護着,它都能取得效果近似於'rpcinfo -p'的信息。但Decoys
現在還不能正常工作在RPC掃描下,在以後我會在UDP RPC掃描中加入Decoy支持的。

-b(ftp relay host)
FTP 跳躍***:FTP協議的一個有趣的特點是它支持代理FTP連接(RFC 959),用另一句話說,我可以從
evil.com連接到一個FTP服務器target.com並且要求目標主機發送文件到因特網的*任何地方*!在1985年這
一RFC被寫下來後這一特性便漸漸施行,但在現在的網絡上我們不允許人們能夠隨意地“搶劫”一個FTP
SERVER並請求數據到任何地方。所以在Hobbit於1995年寫下的有關這一協議缺陷時說到“它可以用來從許多
站臺上發出事實上難以追查的信件、新聞以及***性行爲——填充你的硬盤,試圖使防火牆失效或者更多是
煩人而無意義的騷擾。我開發出它來是爲了通過一個代理FTP服務器察看TCP端口,這樣你可以連上一個在
防火牆後的FTP服務器然後掃描它看來彷彿堵塞的端口(139是很好的例子)。如果FTP服務器允許你讀甚至
寫進某些目錄(比如/incoming),你可以發送任意信息到你發現打開了的端口(當然nmap不幹這事)。對
於你要通過'b'選項來使主機成爲你的代理時,標準的URL格式形式是:username:password@server:port。
要確定一個服務器是否易受這樣的***,你可以看看我在Phrack 51期上的文章。它的更新版本在
http://www.insecure.org/nmap。

這些選項並非必需的,但有些會非常實用。

-P0 在掃描前不嘗試或者PING主機,這是用來掃描那些不允許ICMP echo 請求(或應答)的主機。
microsoft.com就是這其中的一個例子,我們就必須使用-P0或者-PT80來察看microsoft.com的端口。

-PT 用TCP的ping來確定主機是否打開。作爲替代發送ICMP echo請求包並等待迴應的方式,我們可以大量
發送TCP ACK包往目標網絡(或者單機)並一點點地等待它的迴應,打開的主機會返回一個RST。這一參數
可以讓你在ping信息包阻塞時仍能高效率地掃描一個網絡/主機。對非root的用戶,我們用connect(),以
如下格式設置目標探針-PT,默認的端口是80,因爲這相端口往往未被過濾。

-PS 這一選項是root用戶使用的,能用SYN(連接請求)包替代ACK包,打開的主機會有一個RST(或者SYN|ACK—
—但比較少見)應答。

-PI 這一選項是使用一個真正的ping(ICMP echo request)包。它找到開放的主機並且將該子網中的廣播地
址全數搜尋——該廣播地址是能夠到達並能正確解析IP包的。如果其會被大量的DoS(denial of service)攻
擊時,我們就能找到它。

-PB 默認的ping形式,它用於ACK(-PT)與ICMP(-PI)並行***,以這一形式可以通過防火牆或包過濾。

-O 經由TCP/IP獲取‘指紋’來判別主機的OS類型,用另一說法,就是用一連串的信息包探測出你所掃描的主
機位於操作系統有關堆棧信息並區分其精細差別,以此判別操作系統。它用蒐集到的信息建立一個“指紋”
用來同已知的操作系統的指印相比較(the nmap-os-fingerprints file)
——這樣判定操作系統就有了依據。
如果你發現一臺機器開了至少一個端口並得到錯誤的診斷信息,那麼你可以寫信告訴我相關細節比如操作
系統版本或偵測到的操作系統版本圖,如果他有端口開放但nmap返回'不可識別的操作系統',這可能也是
有用的,你可以將它的IP告訴我或者另一個辦法是用nmap的-d參數並告訴我它返回的“指印”——操作系統和
版本號,這樣做,也算是對nmap在判定操作系統的進一步開發中做了些事情,以便後續版本中它能更精確
地判別系統類型。

-I 這是用ident掃描方式的參數,如Dave Goldsmith於1996年在Bugtraq中所說的,這個ident協議(rfc
1413)允許通過TCP連接得到擁有進程的用戶名——即使這個連接不是由該進程發起的。所以呢,舉個例吧,
你可以通過ident連接到一個http端口並找出該進程是否由root運行,但這只能在“全開”的對目標端口的
TCP連接中使用(象-sT掃描參數)。當你用-I參數時,遠程主機的identd在開放的端口接受連接質詢——很
明顯的,如果主機不運行identd的話,那它就無法正常工作。

-f 這個參數配置以細小的IP碎片包實現SYN,FIN,XMAS或NULL掃描請求。這個想法是把TCP包頭分別放在
幾個不同的信息包中,使包過濾器難於運作,而後你就可以闖入系統做你想做的事了。但要注意,部份程
序可能會對這些小信息包處理錯誤。比方說我最喜歡的sniffer segmentation在接收第一個36字節的信息
碎片時就出現麻煩,之後又來了個24字節的!當包過濾器和能將IP碎片排列的防火牆沒有獲得此順序時(
就象linux內核中的CON-FIG_IP_ALWAYS_DEFRAG選項),一些網絡系統就不能反映出找到目標,並且放棄。
記住這個參數不一定能很好地工作在任何系統上,它在我的Linux,FreeBSD以及OpenBSD下是正常的,當然也
有一些人說它能在部份不同的*NIX環境下工作。

-v 詳細模式。這是被強烈推薦的選項,因爲它能帶來你想要的更多信息。你可以重複使用它以獲得更大效
果。如果你需要大量翻動屏幕請使用 -d 命令兩次

-h 這是一個快捷的幫助選項,可以在屏幕上顯示nmap的參數使用方法——象你注意到的那樣,這個man page
實在不是一個“快速入門參考”:)

-o
這是用來指定一個放置掃描結果的文件的參數——這個結果是易於閱讀的。

-m
這也是存放掃描結果的參數,但它是存放機器可解析(machine parseable)結果的,你可以用-m 帶'-'(
引號不用)將其輸出到標準輸出裏(用shell的管道符……)。在這種形式下,正常的輸出被禁止了,你需要
察看一些錯誤信息來了解情況。

-i
從指定文件而不是從命令行讀取數據。該文件可以存放一個主機或網絡的列表,中間用空格、TAB鍵或者換
行來分隔。如果希望從標準輸入設備(文件)讀取——比如在管道符的末端,你要將連字號(-)用於文件名。
你可以從目標規格里找到更多關於寫這一文件的資料。

-p
這一參數可以指定你希望掃描的端口,舉例來說吧'-p 23'則只會對主機的23端口進行探測,默認掃描的是
從1到1024端口,或者也可以用nmap裏帶的services file裏的端口列表。

-F 快速掃描模式。指定只希望掃描nmap裏提供的services file中列出的端口列表裏的端口。這明顯會比
掃描所有65535個端口來得快。

-D
這是一種帶有誘騙模式的掃描,在遠程主機的連接記錄裏會記下所有你所指定的誘騙性的地址。這樣的話
他們的數據存儲器會顯示有一些端口掃描從某個IP發起,然而他們無法辯別哪個是真正的IP而哪個是用來
作爲掩護的,這可以擊敗一些通過路由進行跟蹤的行爲,所以它是一項隱藏你的IP的很實用的技術。用逗
號分隔各個欺騙地址,你可以隨意地將'me'放進任意一個你希望顯示真實IP的地方,如果你將'ME'放在第
六位甚至最後,有些端口掃描記錄器(比如Solar Designer's excellent scanlogd)可能根本就不會顯示
你的IP,如果你不用'ME'的話,nmap將會將它隨機放置。記住你用來誘騙的主機必須是開放的或者你可以
半開掃描一下你的目標。因爲要從一堆實際上沒有用的IP地址裏判別出哪個是真正的***者是相當容易的
。你還可能要用IP地址來代替名字,這樣誘騙主機的nameserver logs裏纔不會記錄下你來。還要記得有些
(愚蠢的)"端口掃描探測器"會拒絕到達主機的端口掃描嘗試。這樣你無意中就會導致你掃描的主機與“誘
騙主機”連接的丟失,這樣可能會帶來一個很大的問題是——如果這個“誘騙主機”是一個網上的網關或者甚至
就是其本地的機子,其連接一樣會斷開!所以大家最好小心使用這個參數——從道德上的原因——這僅僅是一
個誘騙,不是麼?這種誘騙可以用在最初的ping掃描(用ICMP,SYN,ACK或其它)與實際的端口狀態掃描中
,它還可以用於遠程OS的判別(-O)。當然如果你寫入太多的誘騙地址也是沒什麼用處的,那隻能減緩掃描
速度以及降低一些精確度。而且一些指令處理系統還可能會過濾掉你的欺騙包,雖然多數(幾乎是全部了
)不會對欺騙包作出任何限制。

-S
在某些環境下nmap可能無法確定你的源地址——這種情況下nmap會有提示,這時你就要用-S帶IP地址來標註
。另一種使用的可能性是用來欺騙目標使它認爲某人在掃描它。設想一下,某個公司發現被競爭者持續不
斷的掃描:),這是一個不被支持的用法,或者說,不是主要目的。我只是用它來提醒人們在發現一個端口掃
描者時別光顧責難,可能他是無辜的呢。-e能夠說明這個參數的一般用法。

-e
告訴nmap哪個界面要發送或接收。nmap能夠自動探測它,如果無法做到,亦會有提示信息。

-g
在掃描中設定源端口號。許多“天真”的防火牆或包過濾器除了它們建立的允許DNS(53)或FTP-DATA(20)的包
進來建立連接之外,其餘一概過濾,顯然這是很輕率的做法,因爲***者能夠輕易地編輯一個來自FTP或
DNS的源端口。比如說,你如果無法從一個主機的host:port通過TCP ISN取得信息,那麼通過用-g 命令,
nmap會改變源端口再次嘗試。需要了解的是,使用這個選項可能會有小小的延遲,因爲我有時需要在源端
口號中存儲有用信息.


-M
設定用來並行進行TCP connect()掃描的最大的sockets數目(默認)。這對將掃描適度減緩是相當有效的
,它可以避免把遠程主機crashing。另一個途徑是用-sS。

雖然nmap在一般情況下都能夠很好地在運行時間裏儘可能迅速地完成掃描任務,但偶爾還是會有一些主機/
端口無法偵測,這可能是nmap默認的時間策略和你的目標不太一致(相當於timeout的設定),下面就是一
些選項能對掃描的時間進行控制:

-T
這是一個可以用來便利地表達nmap時間策略優先權的參數設置。Paranoid模式用極慢的速度來掃描以避免
被數字記錄系統記錄。它使掃描連續而不是併發而且通常等待至少五分鐘才發送一個信息包。Sneaky也是
類似的,只是它是每15秒發送一個信息包。Polite模式是用來減輕網絡負載以減少當機的可能性,它是連
續發送探針並在兩個包的間隙等待0.4秒。Normal是nmap的常規用法,是盡其所能地快速掃描——除非主機或
端口連接丟失。Aggressive模式是對每臺主機設定了五分鐘的timeout,並且等待每個探針應答不超過1.25
秒。Insane模式是適應非常快的網絡或者你不在乎丟失一些信息——因爲太快!它的timeout設定於75秒並且
只等待迴應0.3秒,它允許對一個很快的網絡系統進行“掃蕩”:),你也可以用數字(0-5)來代表參數,比如'
-t 0'表示Paranoid而'-t 5'代表Insane模式。注意,這些時間設定無法在底層的控制中聯合使用。(NOT
be used in combination with the lower level controls given below.)

--host_timeout
具體指定nmap對某個IP的掃描時間總量,超過則作不通處理,默認是不做設定。

--max_rtt_timeout
指定nmap對一個探針從遠程端返回迴應的最大時間,默認是9000。

--initial_rtt_timeout
指定最初探針的timeout時間,這通常在用-P0掃描有防火牆保護的主機時很有效,nmap會通過ping得到一
個好的RTT評估以及最初少數的探針。默認值爲6000。

--max_parallelism
指定nmap允許的最大並行掃描數目,設定爲1表明nmap每次只掃描個端口,它同樣會對其它掃描如ping
sweep, RPC scan等產生影響。

--scan_delay
指定nmap必須等待的兩個探針間的最小的時間。這是減少網絡負載及使掃描在綜合數據存儲的記錄下不那
麼顯眼的辦法。

目標說明
--------*

所有不帶參數的選項都會被視爲是nmap的目標主機描述。最簡單的實例是僅僅在命令行列出單一的主機名
或IP地址。如果你希望掃描一個IP地址的子網,你可以在主機名和IP地址中加入'/mask'。mask必需是在0
(掃描整個網絡)和32(特定的單一主機)。用/24則表明掃找一個C類地址,而/16則是掃描B類
……

nmap還有一些更有用的符號說明方式可以讓你用list/ranges來爲每個元素指定IP地址。比如你要掃描B類
網址128.210.*.*,則可以用'128.210.*.*'或'128.210.0-255.0-255'或者甚至是'128.210.1-50,51-
255.1,2,3,4,5-255'來表示。當然你也可以用上面提過的mask來表示:'128.210.0.0/16'。所有這些都是等
價的,當你用'*'的時候記住多數的shell都要求用定界符比如引號將其標註。

另一個有趣的是你可以用其它方法將整個網絡“分割”,比如你可以用'*.*.5.6-7'來掃描所有以.5.6或
.5.7結束的IP地址。要得到更多信息,你可以看看示例節。

這裏是一些運用nmap的掃描範例,從最簡單普通的到有一些複雜的例子都有。注意這裏有真實的數字以及
一些真實的域名——這樣可以讓掃描行爲看起來更具體。在這裏你可以用自己的網絡裏的名稱代替其中的
addresses/names。雖然端口掃描的結果分析可能會使某些人容易***,但我不認爲它是不合法的,我曾經
掃描過成百上千的機器但只收到一次抱怨。但我不是律師而一些(anal)人們對nmap探測覺得煩惱,所以最
好在取得允許後掃描或者——冒險,後果由你自己承擔。

nmap -v target.example.com

這樣對target.example.com上所有的保留TCP端口做了一次掃描,-v表示用詳細模式。

nmap -sS -O target.example.com/24

這將開始一次SYN的半開掃描,針對的目標是target.example.com所在的C類子網,它還試圖確定在其上運
行的是什麼系統。這需要root權限,因爲用到了半開掃描以及系統偵測。

nmap -sX -p 22,53,110,143,4564 128.210.*.1-127

發送一個Xmas tree掃描到B類128.210所在子網的一半範圍內,我們將檢測系統是否運行sshd, DNS,
pop3d, imapd, 或者端口4564。要注意由於微軟TCP堆棧的不完善,Xmas掃描將不能在其平臺上運行成功,
同樣的問題可能存在於CISCO, IRIX, HP/UX, 和BSDI。

nmap -v -p 80 '*.*.2.3-5'

這是定位一個網域(將整個網絡分隔成許多小部份)再進行掃描的方式,這裏掃描的是所有以.2.3,.2.4,
或.2.5結束的IP地址。如果你是ROOT的話也可以用-sS。同樣的你可以從127開始搜尋更多有趣的機器,你
可以用'127-222'替代前面的星號——恕我直言,那個區域有着大量有趣的機器。

host -l company.com | cut '-d ' -f 4 | ./nmap -v -i -

做一個DNS zone transfer來尋找在company.com進而的主機並且將IP地址送至nmap(feed the IP
addresses to nmap)。這個命令是在我的GNU/Linux平臺下運行的,你可能需要用不同的選項參數或者不同
的操作系統。

轉載:http://www.bsdlover.cn/html/17/n-5517.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章