nmap 學習筆記(一)

從今天開始,我會在這裏陸續添加對Nmap這款優秀開源軟件的學習心得,跟各位大牛交流:

 

.基本參數:

1.輸入參數:

-iR  隨機產生待掃描的主機,需指定隨機數,如 –iR 10000

-iL  :從一個包含主機名或IP地址列表的文件中讀取目標主機,這些主機名或IP地址使用空格、製表符或換行隔開。

--excludefile  : 從一個包含主機名或IP地址列表的文件中讀取要排除掃描的主機。

-sL  :僅僅列出待掃描的主機清單(若爲域名會先進行解析)

--randomize-hosts   (對目標主機的順序隨機排列)

告訴Nmap在掃描主機前對每個組中的主機隨機排列,最多可達 8096個主機。這會使得掃描針對不同的網絡監控系統來說變得不是很明顯,特別是配合值較小的時間選項時更有效。如果需要對一個較大的組進行隨機排列,需要增大nmap.h文件中 PING_GROUP_SZ的值,並重新編譯。另一種方法是使用列表掃描 (-sL -n -oN <filename>),產生目標IP的列表,使用Perl腳本進行隨機化,然後使用-iL提供給Nmap

 

2.端口掃描參數:

-p  :指定需要掃描的端口,

Ex: -p22 -p1-65535 -p U:53,111,137,T:21-25,80,139,8080

-F  :快速模式,減少默認的端口掃描個數。

-r  :按順序掃描端口。

--top-ports <number>  : Scan <number> most common ports

--port-ratio <ratio>  : Scan ports more common than <ratio>

以上參數在vista下測試不成功,錯誤輸出:

Unable to use --top-ports or --port-ratio with an old style (no-ratio) services

file

QUITTING!

 

3.網絡配置參數:

-n   (不用域名解析) 告訴Nmap 永不對它發現的活動IP地址進行反向域名解析。既然DNS一般比較慢,這可以讓事情更快些。

-R   (爲所有目標解析域名) 告訴Nmap 永遠 對目標IP地址作反向域名解析。一般只有當發現機器正在運行時才進行這項操作。

--system_dns  (使用系統域名解析器)一般不使用該選項。

 

4.系統配置參數:

--send-eth  (使用原以太網幀發送) ,要求Nmap在以太網(數據鏈路)層而不是IP(網絡層)發送 報文。默認方式下,Nmap選擇最適合其運行平臺的方式,原套接字(IP)UNIX主機最有效的方式,而以太網幀最適合Windows操作 系統,因爲Microsoft禁用了原套接字支持。在UNIX中,如果沒有其它選擇(如無以太網連接),不管是否有該選項,Nmap都使用原IP包。

--send-ip  (在原IP層發送),要求Nmap通過原IP套接字發送報文,而不是低層的以太網幀。這是--send-eth選項的補充。

--privileged  (假定用戶具有全部權限) 告訴Nmap假定其具有足夠的權限進行源套接字包發送、 報文捕獲和類似UNIX系統中根用戶操作的權限。默認狀態下, 如果由getuid()請求的類似操作不爲0Nmap將退出。 --privileged在具有Linux內核性能的類似系統中使用非常有效,這些系統配置允許非特權用戶可以進行原報文掃描。需要明確的是,在其它選項之前使用這些需要權限的選項(SYN掃描、操作系統檢測等)Nmap_PRIVILEGED變量設置等價於--privileged選項。

 

5.輸出參數:

-oN  :按照人們閱讀的格式記錄屏幕上的輸出,如果是在掃描多臺機器,則該選項很有用。

-oX  :以xml格式向指定的文件記錄信息

-oG  :以一種易於檢索的格式記錄信息,即每臺主機都以單獨的行來記錄所有的端口和0s信息。

-oA  :使用爲基本文件名,以普通格式(-oN)XML格式(-oX)和易於檢索的格式(-oG

-v  (提高輸出信息的詳細度),通過提高詳細度,Nmap可以輸出掃描過程的更多信息。 輸出發現的打開端口,若Nmap認爲掃描需要更多時間會顯示估計 的結束時間。這個選項使用兩次,會提供更詳細的信息。這個選 項使用兩次以上不起作用。

--resume <filename>   (繼續中斷的掃描),一些擴展的Nmap運行需要很長的時間 -- 以天計算,這類掃描往往不會結束。可以進行一些限制,禁止Nmap在工作時間運行,導致網絡中斷、運行Nmap的主機計劃或非計劃地重啓、或者Nmap自己中斷。 運行Nmap的管理員可以因其它原因取消運行,按下ctrl-C 即可。從頭開始啓動掃描可能令人不快,幸運的是,如果標準掃描 (-oN)Grep掃描(-oG)日誌被保留,用戶可以要求Nmap恢復終止的掃描,只需要簡單地使用選項 --resume並說明標準/Grep掃描輸出文件,不允許使用其它參數,Nmap會解析輸出文件並使用原來的格式輸出。使用方式如nmap --resume <logfilename> Nmap將把新的結果添加到文件中,這種方式不支持XML輸出格式,原因是將兩次運行結果合併至一個XML文件比較困難。

 

.基礎掃描功能:

1.Ping掃描:

-PN-P0  :跳過主機發現環節,默認信任主機是在線的。

-sP  -sP選項在默認情況下, 發送一個ICMP回聲請求和一個TCP報文到80端口。如果非特權用戶執行,就發送一個SYN報文 (connect()系統調用)到目標機的80端口。當特權用戶掃描局域網上的目標機時,會發送ARP請求(-PR), ,除非使用了--send-ip選項。 -sP選項可以和除-P0)之外的任何發現探測類型-P* 選項結合使用以達到更大的靈活性。一旦使用了任何探測類型和端口選項,默認的探測(ACK和迴應請求)就被覆蓋了。當防守嚴密的防火牆位於運行Nmap的源主機和目標網絡之間時, 推薦使用那些高級選項。否則,當防火牆捕獲並丟棄探測包或者響應包時,一些主機就不能被探測到。

-PS  : 該選項發送一個設置了SYN標誌位的空TCP報文。默認目的端口爲80 (可以通過改變nmap.h) 文件中的DEFAULT_TCP_PROBE_PORT值進行配置,但不同的端口也可以作爲選項指定。 甚至可以指定一個以逗號分隔的端口列表( -PS22232580113105035000), 在這種情況下,每個端口會被併發地掃描。

SYN標誌位告訴對方您正試圖建立一個連接。 通常目標端口是關閉的,一個RST (復位) 包會發回來。 如果碰巧端口是開放的,目標會進行TCP三步握手的第二步,迴應一個SYN/ACK TCP報文。然後運行Nmap的機器則會扼殺這個正在建立的連接,發送一個RST而非ACK報文,否則,一個完全的連接將會建立。 RST報文是運行Nmap的機器而不是Nmap本身響應的,因爲它對收到的SYN/ACK感到很意外。

Nmap並不關心端口開放還是關閉。 無論RST還是SYN/ACK響應都告訴Nmap該主機正在運行。

UNIX機器上,通常只有特權用戶 root 能否發送和接收 原始的TCP報文。因此作爲一個變通的方法,對於非特權用戶, Nmap會爲每個目標主機進行系統調用connect(),它也會發送一個SYN 報文來嘗試建立連接。如果connect()迅速返回成功或者一個ECONNREFUSED 失敗,下面的TCP堆棧一定已經收到了一個SYN/ACK或者RST,該主機將被 標誌位爲在運行。 如果連接超時了,該主機就標誌位爲down掉了。這種方法也用於IPv6 連接,因爲Nmap目前還不支持原始的IPv6報文。

 

-PA [portlist] (TCP ACK Ping)   :

TCP ACK ping和剛纔討論的SYN ping相當類似。 也許您已經猜到了,區別就是設置TCPACK標誌位而不是SYN標誌位。 ACK報文表示確認一個建立連接的嘗試,但該連接尚未完全建立。所以遠程主機應該總是迴應一個RST報文, 因爲它們並沒有發出過連接請求到運行Nmap的機器,如果它們正在運行的話。

-PA選項使用和SYN探測相同的默認端口(80),也可以 用相同的格式指定目標端口列表。如果非特權用戶嘗試該功能,或者指定的是IPv6目標,前面說過的connect()方法將被使用。 這個方法並不完美,因爲它實際上發送的是SYN報文,而不是ACK報文。

提供SYNACK兩種ping探測的原因是使通過防火牆的機會儘可能大。許多管理員會配置他們的路由器或者其它簡單的防火牆來封鎖SYN報文,除非 連接目標是那些公開的服務器像公司網站或者郵件服務器。這可以阻止其它進入組織的連接,同時也允許用戶訪問互聯網。 這種無狀態的方法幾乎不佔用防火牆/路由器的資源,因而被硬件和軟件過濾器廣泛支持。Linux Netfilter/iptables 防火牆軟件提供方便的 --syn選項來實現這種無狀態的方法。 當這樣的無狀態防火牆規則存在時,發送到關閉目標端口的SYN ping探測 (-PS) 很可能被封鎖。這種情況下,ACK探測格外有閃光點,因爲它正好利用了這樣的規則。

另外一種常用的防火牆用有狀態的規則來封鎖非預期的報文。 這一特性已開始只存在於高端防火牆,但是這些年類它越來越普遍了。 Linux Netfilter/iptables 通過 --state選項支持這一特性,它根據連接狀態把報文進行分類。SYN探測更有可能用於這樣的系統,由於沒頭沒腦的ACK報文 通常會被識別成僞造的而丟棄。解決這個兩難的方法是通過即指定 -PS又指定-PA來即發送SYN又發送ACK

 

-PU [portlist] (UDP Ping)  :還有一個主機發現的選項是UDP ping,它發送一個空的(除非指定了--data-length UDP報文到給定的端口。端口列表的格式和前面討論過的-PS-PA選項還是一樣。如果不指定端口,默認是31338。該默認值可以通過在編譯時改變nmap.h文件中的 DEFAULT_UDP_PROBE_PORT值進行配置。默認使用這樣一個奇怪的端口是因爲對開放端口進行這種掃描一般都不受歡迎。

如果目標機器的端口是關閉的,UDP探測應該馬上得到一個ICMP端口無法到達的迴應報文。這對於Nmap意味着該機器正在運行。 許多其它類型的ICMP錯誤,像主機/網絡無法到達或者TTL超時則表示down掉的或者不可到達的主機。沒有迴應也被這樣解釋。如果到達一個開放的端口,大部分服務僅僅忽略這個 空報文而不做任何迴應。這就是爲什麼默認探測端口是31338這樣一個極不可能被使用的端口。少數服務如chargen會響應一個空的UDP報文, 從而向Nmap表明該機器正在運行。

該掃描類型的主要優勢是它可以穿越只過濾TCP的防火牆和過濾器。例如。我曾經有過一個Linksys BEFW11S4無線寬帶路由器。默認情況下, 該設備對外的網卡過濾所有TCP端口,但UDP探測仍然會引發一個端口不可到達 的消息,從而暴露了它自己。

 

-PE; -PP; -PM (ICMP Ping Types)  

除了前面討論的這些不常見的TCPUDP主機發現類型, Nmap也能發送世人皆知的ping 程序所發送的報文。Nmap發送一個ICMP type 8 (回聲請求)報文到目標IP地址,期待從運行的主機得到一個type 0 (回聲響應)報文。對於網絡探索者而言,不幸的是,許多主機和防火牆現在封鎖這些報文,而不是按期望的那樣響應, 參見RFC 1122。因此,僅僅ICMP掃描對於互聯網上的目標通常是不夠的。 但對於系統管理員監視一個內部網絡,它們可能是實際有效的途徑。 使用-PE選項打開該回聲請求功能。

雖然回聲請求是標準的ICMP ping查詢, Nmap並不止於此。ICMP標準 (RFC 792)還規範了時間戳請求,信息請求 request,和地址掩碼請求,它們的代碼分別是131517。 雖然這些查詢的表面目的是獲取信息如地址掩碼和當前時間, 它們也可以很容易地用於主機發現。 很簡單,迴應的系統就是在運行的系統。Nmap目前沒有實現信息請求報文, 因爲它們還沒有被廣泛支持。RFC 1122 堅持主機不應該實現這些消息。 時間戳和地址掩碼查詢可以分別用-PP-PM選項發送。 時間戳響應(ICMP代碼14)或者地址掩碼響應(代碼18)表示主機在運行。當管理員特別封鎖了回聲請求報文而忘了其它ICMP查詢可能用於 相同目的時,這兩個查詢可能很有價值。

-PR (ARP Ping)   :允許對局域網進行ARP掃描,比IP PING 掃描更可靠。

 

2.TCP掃描

-sS  :同只發送SYN包,不進行ACK響應。可造成DDOS***。

-sT  TCP Connection 掃描,完成TCP三步握手後由源發RST/ACK包結束連接。

-sA  : ACK標記探測掃描,發送ACK包通過分析ttl探測,依賴TCP/IP協議棧的漏洞,此方法僅適用於某些BSD類系統。

-sW  ACK標記探測掃描,發送ACK包通過分析ttl探測,依賴TCP/IP協議棧的漏洞,此方法僅適用於某些BSD類系統。

-sM  :發現FIN/ACK包探測。Maimon掃描是用它的發現者Uriel Maimon命名的。根據RFC 793 (TCP),無論端口開放或者關閉,都應該對這樣的探測響應RST報文。然而,Uriel注意到如果端口開放,許多基於BSD的系統只是丟棄該探測報文。

-sU  :發送UDP包探測。

-sN/sF/sX  : TCP Null, FIN, and XmasFIN/PSH/URGscans,指定TCP包的標記位

--scanflags <flags> : Customize TCP scan flags,自定義TCP數據包

 

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