高階掃描技術及原理介紹(轉)

heying1229發表於2007-07-28
1、向目標主機傳送一個只有IP頭的IP資料包,目標將返回Destination Unreachable的ICMP錯誤報文。
  2、向目標主機傳送一個壞IP資料包,比如,不正確的IP頭長度,目標主機將返回Parameter Problem的ICMP錯誤報文。
  3、當資料包分片但是,卻沒有給接收端足夠的分片,接收端分片組裝超時會傳送分片組裝超時的ICMP資料包。

  向目標主機傳送一個IP資料包,但是協議項是錯誤的,比如協議項不可用,那麼目標將返回Destination Unreachable的ICMP報文,但是如果是在目標主機前有一個防火牆或者一個其他的過濾裝置,可能過濾掉提出的要求,從而接收不到任何回應。可以使用一個非常大的協議數字來作為IP頭部的協議內容,而且這個協議數字至少在今天還沒有被使用,應該主機一定會返回Unreachable,如果沒有Unreachable的ICMP資料包返回錯誤提示,那麼就說明被防火牆或者其他裝置過濾了,我們也可以用這個辦法來探測是否有防火牆或者其他過濾裝置存在。

  利用IP的協議項來探測主機正在使用哪些協議,我們可以把IP頭的協議項改變,因為是8位的,有256種可能。透過目標返回的ICMP錯誤報文,來作判斷哪些協議在使用。如果返回Destination Unreachable,那麼主機是沒有使用這個協議的,相反,如果什麼都沒有返回的話,主機可能使用這個協議,但是也可能是防火牆等過濾掉了。NMAP的IP Protocol scan也就是利用這個原理。

  利用IP分片造成組裝超時ICMP錯誤訊息,同樣可以來達到我們的探測目的。當主機接收到丟失分片的資料包,並且在一定時間內沒有接收到丟失的資料包,就會丟棄整個包,並且傳送ICMP分片組裝超時錯誤給原傳送端。我們可以利用這個特性製造分片的資料包,然後等待ICMP組裝超時錯誤訊息。可以對UDP分片,也可以對TCP甚至ICMP資料包進行分片,只要不讓目標主機獲得完整的資料包就行了,當然,對於UDP這種非連線的不可靠協議來說,如果我們沒有接收到超時錯誤的ICMP返回報,也有可能時由於線路或者其他問題在傳輸過程中丟失了。

  我們能夠利用上面這些特性來得到防火牆的ACL(access list),甚至用這些特性來獲得整個網路拓撲結構。如果我們不能從目標得到Unreachable報文或者分片組裝超時錯誤報文,可以作下面的判斷:

  1、防火牆過濾了我們傳送的協議型別
  2、防火牆過濾了我們指定的埠
  3、防火牆阻塞ICMP的Destination Unreachable或者Protocol Unreachable錯誤訊息。
  4、防火牆對我們指定的主機進行了ICMP錯誤報文的阻塞。

  二、高階TCP掃描技術

  最基本的利用TCP掃描就是使用connect(),這個很容易實現,如果目標主機能夠connect,就說明一個相應的埠開啟。不過,這也是最原始和最先被防護拒絕的一種。

  在高階的TCP掃描技術中主要利用TCP連線的三次握手特性和TCP資料頭中的標誌位來進行,也就是所謂的半開掃描。

  先認識一下TCP資料包頭的這六個標誌位。

  URG:(Urgent Pointer field significant)緊急指標。用到的時候值為1,用來處理避免TCP資料流中斷

  ACK:(Acknowledgment field significant)置1時表示確認號(Acknowledgment Number)為合法,為0的時候表示資料段不包含確認資訊,確認號被忽略。

  PSH:(Push Function),PUSH標誌的資料,置1時請求的資料段在接收方得到後就可直接送到應用程式,而不必等到緩衝區滿時才傳送。

  RST:(Reset the connection)用於復位因某種原因引起出現的錯誤連線,也用來拒絕非法資料和請求。如果接收到RST位時候,通常發生了某些錯誤。

  SYN:(Synchronize sequence numbers)用來建立連線,在連線請求中,SYN=1,ACK=0,連線響應時, SYN=1,ACK=1。即,SYN和ACK來區分Connection Request和Connection Accepted。

  FIN:(No more data from sender)用來釋放連線,表明傳送方已經沒有資料傳送了。

  TCP協議連線的三次握手過程是這樣的:
  首先客戶端(請求方)在連線請求中,傳送SYN=1,ACK=0的TCP資料包給伺服器端(接收請求端),表示要求同伺服器端建立一個連線;然後如果伺服器端響應這個連線,就返回一個SYN=1,ACK=1的資料包給客戶端,表示伺服器端同意這個連線,並要求客戶端確認;最後客戶端就再傳送SYN=0,ACK=1的資料包給伺服器端,表示確認建立連線。

  我們就利用這些標誌位和TCP協議連線的三次握手特性來進行掃描探測。

  SYN 掃描
  這種掃描方式也被稱為“半開啟” 掃描,因為利用了TCP協議連線的第一步,並且沒有建立一個完整的TCP連線。實現辦法是向遠端主機某埠傳送一個只有SYN標誌位的TCP資料包,如果主機反饋一個SYN || ACK資料包,那麼,這個主機正在監聽該埠,如果反饋的是RST資料包,說明,主機沒有監聽該埠。在X-Scanner 上就有SYN的選擇項。

  ACK 掃描
  傳送一個只有ACK標誌的TCP資料包給主機,如果主機反饋一個TCP RST資料包來,那麼這個主機是存在的。也可以透過這種技術來確定對方防火牆是否是簡單的分組過濾,還是一個基於狀態的防火牆。

  FIN
  對某埠傳送一個TCP FIN資料包給遠端主機。如果主機沒有任何反饋,那麼這個主機是存在的,而且正在監聽這個埠;主機反饋一個TCP RST回來,那麼說明該主機是存在的,但是沒有監聽這個埠。

  NULL
  即傳送一個沒有任何標誌位的TCP包,根據RFC793,如果目標主機的相應埠是關閉的話,應該傳送回一個RST資料包。

  FIN+URG+PUSH
  向目標主機傳送一個Fin、URG和PUSH分組,根據RFC793,如果目標主機的相應埠是關閉的,那麼應該返回一個RST標誌。

  上面這些辦法可以繞過一些防火牆,從而得到防火牆後面的主機資訊,當然,是在不被欺騙的情況下的。這些方法還有一個好處就是比較難於被記錄,有的辦法即使在用netstat命令上也根本顯示不出來,而且一般的防護裝置也根本不記錄這些內容,這樣能夠更好地隱藏自己。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-928875/,如需轉載,請註明出處,否則將追究法律責任。

相關文章