熱點推薦:
您现在的位置: 電腦知識網 >> 電腦常識 >> 正文

你了解FTP嗎?FTP協議的分析和擴展

2013-11-11 14:11:14  來源: 電腦常識 

  >><< FTP和TCP端口號
  根據是使用Port模式還是Passive模式FTP使用不同的TCP端口號在詳細描述FTP前我們來簡單討論一下TCP端口號的一些基本概念TCP使用端口號來標識所發送和接收的應用端口號可以幫助TCP來分離字節流並且幫相應字節傳遞給正確的應用程序TCP端口號可以是半永久的和暫時的服務器端監聽在半永久的端口上來讓客戶端訪問客戶端使用暫時的端口在本地標識一個對話客戶端端口只在使用TCP服務時候才存在而服務器端口只要服務器在運行就一直在監聽
  
  TCP端口可以歸為
  眾所周知的端口來標識在TCP上運行的標准服務包括FTPHTTPTELNETSMTP等這些端口號碼范圍為
  注冊端口號用來標識那些已經向IANA(Internet Assigned Numbers Assigned Numbers Authority)注冊的應用注冊端口號為
  私有端口號是非注冊的並且可以動態地分配給任何應用私有端口為注冊的端口號本來打算只給注冊的應用使用可近年來端口號已經陷入了到達極限的困境你可能會看到本來應該是給注冊應用使用的注冊端口被非注冊應用用做暫時的端口RFC詳細標注了眾所周知的和注冊的端口號然而不幸的是這個RFC文檔自從年以來一直沒有被更新然後你仍可以從IANA得到一個及時更新的端口列表詳細URL為numbers
  
  >><< FTP Port模式和FTP Passive模式
  當你對一個FTP問題進行排錯時候你首先要問的一個問題是使用的是port模式的還是passive模式因為這兩種行為迥異所以這兩種模式引起的問題也不同在過去客戶端缺省為active(port)模式近來由於Port模式的安全問題許多客戶端的FTP應用缺省為Passive模式
  
  >> FTP Port模式
  Port模式的FTP步驟如下
   客戶端發送一個TCP SYN(TCP同步)包給服務器段眾所周知的FTP控制端口客戶端使用暫時的端口作為它的源端口
   服務器端發送SYN ACK(同步確認)包給客戶端源端口為目的端口為客戶端上使用的暫時端口
   客戶端發送一個ACK(確認)包客戶端使用這個連接來發送FTP命令服務器端使用這個連接來發送FTP應答
   當用戶請求一個列表(List)請求或者發起一個要求發送或者接受文件的請求客戶端軟件使用PORT命令這個命令包含了一個暫時的端口客戶端希望服務器在打開一個數據連接時候使用這個暫時端口PORT命令也包含了一個IP地址這個IP地址通常是客戶自己的IP地址而且FTP也支持第三方(thirdparty)模式第三方模式是客戶端告訴服務器端打開與另台主機的連接
   服務器端發送一個SYN包給客戶端的暫時端口源端口為暫時端口為客戶端在PORT命令中發送給服務器端的暫時端口號
   客戶端以源端口為暫時端口目的端口為發送一個SYN ACK包
   服務器端發送一個ACK包
   發送數據的主機以這個連接來發送數據數據以TCP段(注segment層的PDU)形式發送(一些命令如STOR表示客戶端要發送數據RETR表示服務器段發送數據)這些TCP段都需要對方進行ACK確認(注因為TCP協議是一個面向連接的協議)
   當數據傳輸完成以後發送數據的主機以一個FIN命令來結束數據連接這個FIN命令需要另一台主機以ACK確認另一台主機也發送一個FIN命令這個FIN命令同樣需要發送數據的主機以ACK確認
   客戶端能在控制連接上發送更多的命令這可以打開和關閉另外的數據連接有時候客戶端結束後客戶端以FIN命令來關閉一個控制連接服務器端以ACK包來確認客戶端的FIN服務器同樣也發送它的FIN客戶端用ACK來確認
  
  下圖圖示了FTP PORT模式前幾步步驟
  /====================================================================\
  | |
  | [ ftp Client ] [ ftp Server ] |
  | |
  | (TCP: 連接初始化控制端口) |
  | SYN |
  | Port xxxx > Port [TCP] |
  | SYN+ACK |
  | Port xxxx < Port |
  | ACK |
  | Port xxxx > Port |
  | |
  | (控制操作: 用戶列目錄或傳輸文件) |
  | |
  | Port IP Port yyyy |
  | Port xxxx < Port |
  | Port Seccussful |
  | Port xxxx < Port |
  | List Retr or Stor |
  | Port xxxx > Port |
  | |
  | |
  | (TCP: 連接初始化數據端口) |
  | SYN |
  | Port yyyy < Port |
  | SYN+ACK |
  | Port yyyy > Port |
  | ACK |
  | Port yyyy < Port |
  | |
  | |
  | (數據操作: 數據傳輸) |
  | Data + ACK |
  | Port yyyy <> Port |
  | |
  | |
  | |
  | |
  \====================================================================/
  
  FTP Port模式會給網絡管理人員在許多方面帶來很多問題首先在PORT命令消息中的IP地址和端口號的編碼不是直白地顯示另外應用層的協議命令理論上不應該包含網絡地址信息(注IP地址)因為這打破了協議層的原則並且可能導致協同性和安全性方面的問題
  
  下圖是WildPackets EtherPeek協議分析儀解碼了PORT命令的地址參數地址參數後是端口號見PORT部分的第一個阿拉伯數字乘以然後加上第個阿拉伯數字就得到端口號所以客戶端指定了端口號為*+=
  /====================================================================\
  | IP Header Internet Protocol Datagram |
  | Version: |
  | Header Length: ( bytes) |
  | |
  | |
  | |
  | Time To Live: |
  | Protocol: TCP Transmission Control Protocol |
  | Header Checksum: xAA |
  | Source IP Address: DEMO |
  | Dest IP Address: VI |
  | No IP Options |
  | |
  | TCP Transport Control Protocol |
  | Source Port: manageexec |
  | Destination Port: ftp |
  | Sequence Number: |
  | Ack Number: |
  | Offset: ( bytes) |
  | Reserved: % |
  | Flags: % |
  | (No Urgent pointer) |
  | Ack |
  | Push |
  | (No Reset) |
  | (No SYN) |
  | (No FIN) |
  | |
  | Window: |
  | Checksum: xA |
  | Urgent Pointer: |
  | No TCP Options |
  | |
  | FTP Control File Transfer Protocol |
  | Line : PORT <CR><LF> |
  | |
  | FCS Frame Check Sequence |
  | FCS (Calculated): xFCAF |
  \====================================================================/
  
  下圖驗證了服務器端的確從端口打開到端口的TCP連接
  /====================================================================\
  | TCP Transport Control Protocol |
  | Source Port: ftpdata |
  | Destination Port: |
  | Sequence Number: |
  | Ack Number: |
  | Offset: ( bytes) |
  | Reserved: % |
  | Flags: % |
  | (No Urgent pointer) |
  | (No Ack) |
  | (No Push) |
  | (No Reset) |
  | SYN |
  | (No FIN) |
  | |
  | Window: |
  | Checksum: xAC |
  | Urgent Pointer: |
  | No TCP Options |
  | |
  | TCP Options |
  | Options Type: Maxinum Segment Size |
  | Length: |
  | MSS: |
  | |
  | FCS Frame Check Sequence |
  | FCS (Calculated): xABD |
  \====================================================================/
  
  當使用FTP時候網絡中的防火牆必須要聲明相應的端口防火牆必須要跟蹤FTP對話然後檢查PORT命令防火牆必須要參與從服務器端到客戶端在PORT命令中指定的端口連接的建立過程如果網絡中使用了NAT(注網絡地址翻譯)那麼NAT的網關同樣也需要聲明相應的端口網關需要把在PORT命令中指定的IP地址翻譯成分配給客戶的地址然後重新計算TCP的Checksum如果網關沒有正確地執行這個操作FTP就失敗了
  
  黑客可能會利用FTP支持第三方特性這一特點在PORT命令中設置IP地址和端口號參數來指定一台目標主機的地址和端口號(有時候稱這種攻擊為FTP反彈攻擊)例如黑客可以讓一台FTP服務器不斷地從它的源端口發送TCP SYN包給一系列目的端口讓FTP
From:http://tw.wingwit.com/Article/Common/201311/5207.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.