FTP協(xié)議的分析和擴(kuò)展

>>1.0<< FTP和TCP端口號
根據(jù)是使用Port模式還是Passive模式,F(xiàn)TP使用不同的TCP端口號,在詳細(xì)描述FTP前,我們來
簡單討論一下TCP端口號的一些基本概念。TCP使用端口號來標(biāo)識所發(fā)送和接收的應(yīng)用,端口號
可以幫助TCP來分離字節(jié)流并且?guī)拖鄳?yīng)字節(jié)傳遞給正確的應(yīng)用程序。
TCP端口號可以是半永久的和暫時的。服務(wù)器端監(jiān)聽在半永久的端口上來讓客戶端訪問??蛻?nbsp;
端使用暫時的端口在本地標(biāo)識一個對話,客戶端端口只在使用TCP服務(wù)時候才存在,而服務(wù)器
端口只要服務(wù)器在運(yùn)行就一直在監(jiān)聽。
TCP端口可以歸為3類:
1、眾所周知的端口來標(biāo)識在TCP上運(yùn)行的標(biāo)準(zhǔn)服務(wù),包括FTP、HTTP、TELNET、SMTP等,這些
端口號碼范圍為0-1023;
2、注冊端口號用來標(biāo)識那些已經(jīng)向IANA(Internet Assigned Numbers Assigned Numbers
Authority)注冊的應(yīng)用,注冊端口號為1024-49151;
3、私有端口號是非注冊的并且可以動態(tài)地分配給任何應(yīng)用,私有端口為49152-65535;
注冊的端口號本來打算只給注冊的應(yīng)用使用,可近年來端口號已經(jīng)陷入了到達(dá)極限的困境,你
可能會看到本來應(yīng)該是給注冊應(yīng)用使用的注冊端口被非注冊應(yīng)用用做暫時的端口。RFC1700詳
細(xì)標(biāo)注了眾所周知的和注冊的端口號,然而不幸的是,這個RFC文檔自從1994年以來一直沒有
被更新,然后你仍可以從IANA得到一個及時更新的端口列表,詳細(xì)URL為: http://www.iana.org/assignments/port-numbers
>>2.0<< FTP Port模式和FTP Passive模式
當(dāng)你對一個FTP問題進(jìn)行排錯時候,你首先要問的一個問題是使用的是port模式的還是passive
模式。因為這兩種行為迥異,所以這兩種模式引起的問題也不同;在過去,客戶端缺省為acti
ve(port)模式;近來,由于Port模式的安全問題,許多客戶端的FTP應(yīng)用缺省為Passive模式。
>>2.1 FTP Port模式
Port模式的FTP步驟如下:
1、 客戶端發(fā)送一個TCP SYN(TCP同步)包給服務(wù)器段眾所周知的FTP控制端口21,客戶端
使用暫時的端口作為它的源端口;
2、 服務(wù)器端發(fā)送SYN ACK(同步確認(rèn))包給客戶端,源端口為21,目的端口為客戶端上使用
的暫時端口;
3、 客戶端發(fā)送一個ACK(確認(rèn))包;客戶端使用這個連接來發(fā)送FTP命令,服務(wù)器端使用這個
連接來發(fā)送FTP應(yīng)答;
4、 當(dāng)用戶請求一個列表(List)請求或者發(fā)起一個要求發(fā)送或者接受文件的請求,客戶端軟件使用
PORT命令,這個命令包含了一個暫時的端口,客戶端希望服務(wù)器在打開一個數(shù)據(jù)連接時候使用
這個暫時端口;PORT命令也包含了一個IP地址,這個IP地址通常是客戶自己的IP地址,而且FT
P也支持第三方(third-party)模式,第三方模式是客戶端告訴服務(wù)器端打開與另臺主機(jī)的連接;
5、 服務(wù)器端發(fā)送一個SYN包給客戶端的暫時端口,源端口為20,暫時端口為客戶端在PORT命令中
發(fā)送給服務(wù)器端的暫時端口號;
6、 客戶端以源端口為暫時端口,目的端口為20發(fā)送一個SYN ACK包;
7、 服務(wù)器端發(fā)送一個ACK包;
8、 發(fā)送數(shù)據(jù)的主機(jī)以這個連接來發(fā)送數(shù)據(jù),數(shù)據(jù)以TCP段(注:segment,第4層的PDU)形式發(fā)送(
一些命令,如STOR表示客戶端要發(fā)送數(shù)據(jù),RETR表示服務(wù)器段發(fā)送數(shù)據(jù)),這些TCP段都需要
對方進(jìn)行ACK確認(rèn)(注:因為TCP協(xié)議是一個面向連接的協(xié)議)
9、 當(dāng)數(shù)據(jù)傳輸完成以后,發(fā)送數(shù)據(jù)的主機(jī)以一個FIN命令來結(jié)束數(shù)據(jù)連接,這個FIN命令需要另一
臺主機(jī)以ACK確認(rèn),另一臺主機(jī)也發(fā)送一個FIN命令,這個FIN命令同樣需要發(fā)送數(shù)據(jù)的主機(jī)以A
CK確認(rèn);
10、 客戶端能在控制連接上發(fā)送更多的命令,這可以打開和關(guān)閉另外的數(shù)據(jù)連接;有時候客戶端結(jié)
束后,客戶端以FIN命令來關(guān)閉一個控制連接,服務(wù)器端以ACK包來確認(rèn)客戶端的FIN,服務(wù)器
同樣也發(fā)送它的FIN,客戶端用ACK來確認(rèn)。
下圖圖示了FTP PORT模式前幾步步驟:
/====================================================================\
| |
| [ ftp Client ] [ ftp Server ] |
| |
| (TCP:21 連接初始化,控制端口) |
| SYN |
| Port xxxx ----------------------> Port 21 [TCP] |
| SYN+ACK |
| Port xxxx <---------------------- Port 21 |
| ACK |
| Port xxxx ----------------------> Port 21 |
| |
| (控制操作: 用戶列目錄或傳輸文件) |
| |
| Port, IP, Port yyyy |
| Port xxxx <---------------------- Port 21 |
| Port Seccussful |
| Port xxxx <---------------------- Port 21 |
| List, Retr or Stor |
| Port xxxx ----------------------> Port 21 |
| |
| |
| (TCP:20 連接初始化,數(shù)據(jù)端口) |
| SYN |
| Port yyyy <---------------------- Port 20 |
| SYN+ACK |
| Port yyyy ----------------------> Port 20 |
| ACK |
| Port yyyy <---------------------- Port 20 |
| |
| |
| (數(shù)據(jù)操作: 數(shù)據(jù)傳輸) |
| Data + ACK |
| Port yyyy <---------------------> Port 20 |
| . |
| . |
| . |
| |
\====================================================================/
FTP Port模式會給網(wǎng)絡(luò)管理人員在許多方面帶來很多問題,首先,在PORT命令消息中的IP地址和端
口號的編碼不是直白地顯示。另外,應(yīng)用層的協(xié)議命令理論上不應(yīng)該包含網(wǎng)絡(luò)地址信息(注:
IP地址),因為這打破了協(xié)議層的原則并且可能導(dǎo)致協(xié)同性和安全性方面的問題。
下圖是WildPackets EtherPeek協(xié)議分析儀解碼了PORT命令的地址參數(shù),地址參數(shù)后是端口號,見PORT
192,168,10,232,6,127;6,127部分的第一個阿拉伯?dāng)?shù)字乘以256,然后加上第2個阿拉伯?dāng)?shù)字
就得到端口號,所以客戶端指定了端口號為6*256+127=1663;
/====================================================================\
| IP Header - Internet Protocol Datagram |
| Version: 4 |
| Header Length: 5 (20 bytes) |
| |
| ............... |
| |
| Time To Live: 128 |
| Protocol: 6 TCP - Transmission Control Protocol |
| Header Checksum: 0xAA36 |
| Source IP Address: 192.168.0.1 DEMO |
| Dest. IP Address: 192.168.0.3 VI |
| No IP Options |
| |
| TCP - Transport Control Protocol |
| Source Port: 2342 manage-exec |
| Destination Port: 21 ftp |
| Sequence Number: 2435440100 |
| Ack Number: 9822605 |
| Offset: 5 (20 bytes) |
| Reserved: %000000 |
| Flags: %011000 |
| 0. .... (No Urgent pointer) |
| .1 .... Ack |
| .. 1... Push |
| .. .0.. (No Reset) |
| .. ..0. (No SYN) |
| .. ...0 (No FIN) |
| |
| Window: 65150 |
| Checksum: 0x832A |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| FTP Control - File Transfer Protocol |
| Line 1: PORT 192,168,0,1,9,39<CR><LF> |
| |
| FCS - Frame Check Sequence |
| FCS (Calculated): 0xF4C04A4F |
\====================================================================/
下圖驗證了服務(wù)器端的確從端口20打開到端口1663的TCP連接:
/====================================================================\
| TCP - Transport Control Protocol |
| Source Port: 20 ftp-data |
| Destination Port: 1663 |
| Sequence Number: 2578824336 |
| Ack Number: 0 |
| Offset: 6 (24 bytes) |
| Reserved: %000000 |
| Flags: %000010 |
| 0. .... (No Urgent pointer) |
| .0 .... (No Ack) |
| .. 0... (No Push) |
| .. .0.. (No Reset) |
| .. ..1. SYN |
| .. ...0 (No FIN) |
| |
| Window: 3731 |
| Checksum: 0x8A4C |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| TCP Options |
| Options Type: 2 Maxinum Segment Size |
| Length: 4 |
| MSS: 1460 |
| |
| FCS - Frame Check Sequence |
| FCS (Calculated): 0x5A1BD023 |
\====================================================================/
當(dāng)使用FTP時候,網(wǎng)絡(luò)中的防火墻必須要聲明相應(yīng)的端口,防火墻必須要跟蹤FTP對話然后檢查
PORT命令,防火墻必須要參與從服務(wù)器端到客戶端在PORT命令中指定的端口連接的建立過程。
如果網(wǎng)絡(luò)中使用了NAT(注:網(wǎng)絡(luò)地址翻譯),那么NAT的網(wǎng)關(guān)同樣也需要聲明相應(yīng)的端口,網(wǎng)
關(guān)需要把在PORT命令中指定的IP地址翻譯成分配給客戶的地址,然后重新計算TCP的Checksum
;如果網(wǎng)關(guān)沒有正確地執(zhí)行這個操作,F(xiàn)TP就失敗了。
黑客可能會利用FTP支持第三方特性這一特點(diǎn),在PORT命令中設(shè)置IP地址和端口號參數(shù)來指定
一臺目標(biāo)主機(jī)的地址和端口號(有時候稱這種攻擊為FTP反彈攻擊),例如黑客可以讓一臺FTP
服務(wù)器不斷地從它的源端口20發(fā)送TCP SYN包給一系列目的端口,讓FTP服務(wù)器看起來正在進(jìn)行
端口掃描,目的主機(jī)不知道攻擊來自黑客的主機(jī),看起來攻擊象是來自FTP服務(wù)器。一些常用的
FTP應(yīng)用在PORT命令中設(shè)置地址為0.0.0.0,這樣做的意圖是讓FTP服務(wù)器只需要與打開控制連接
的相同客戶進(jìn)行數(shù)據(jù)連接,設(shè)置地址為0.0.0.0可能會讓防火墻不知所措。例如,CISCO PIX IOS
6.0以上版本的PIX(注:CISCO硬件防火墻設(shè)備,6.0以上版本為其修正了相關(guān)的FTP協(xié)議)
要求數(shù)據(jù)連接的IP地址與已經(jīng)存在的控制連接的IP地址必須相同。這樣做的原因是防止黑客用
PORT命令來攻擊別的機(jī)器,雖然一些FTP應(yīng)用設(shè)置IP地址為0.0.0.0不是有意圖的攻擊,但在PI
X修正協(xié)議環(huán)境下的確引起了一些問題,同時對其他不允許第三方模式和避免FTP反彈攻擊的防
火墻來說,這也會引起相同的問題。
>>2.2 FTP Passive模式
下面的列表描述了Passive模式的FTP的步驟,步驟1到3和Port模式FTP相同,步驟9到11同樣與
Port模式FTP最后三步相同。
1、客戶端發(fā)送一個TCP SYN(TCP同步)包給服務(wù)器段眾所周知的FTP控制端口21,客戶端使
用暫時的端口作為它的源端口;
2、服務(wù)器端發(fā)送SYN ACK(同步確認(rèn))包給客戶端,源端口為21,目的端口為客戶端上使用
的暫時端口;
3、客戶端發(fā)送一個ACK(確認(rèn))包;客戶端使用這個連接來發(fā)送FTP命令,服務(wù)器端使用這個
連接來發(fā)送FTP應(yīng)答;
4、當(dāng)用戶請求一個列表(List)或者發(fā)送或接收文件時候,客戶端軟件發(fā)送PASV命令給服務(wù)器端
相關(guān)文章
微軟新版Outlook將推出郵件分類快捷鍵及多項優(yōu)化:5月開始部署
微軟計劃在新版Outlook for Windows中引入郵件分類快捷功能,用戶可通過預(yù)設(shè)快捷鍵快速對郵件進(jìn)行分類,從而大幅提升工作效率并優(yōu)化管理流程2025-04-21rsync The --password-file option may only be used when accessing a
客戶端上傳文件執(zhí)行命令出錯,提醒The --password-file option may only be used when accessing an rsync daemon.查找資料也很少這樣的說法,最后發(fā)現(xiàn)是冒號的問題2025-02-26郵箱密碼忘記了怎么找回來? 網(wǎng)易郵箱密碼找回流程
郵箱在使用的時候,由于各種原因,有時候我們可能會遇到忘記密碼、賬號被盜等問題,這時候就需要進(jìn)行163郵箱找回操作,本文將為大家介紹如何進(jìn)行163郵箱找回操作2025-02-01- 電子郵件成為了我們?nèi)粘I詈凸ぷ髦胁豢苫蛉钡囊徊糠?,無論是注冊社交媒體、購物平臺,還是與他人溝通,一個穩(wěn)定的郵箱賬號都變得至關(guān)重要,本文將為您提供詳細(xì)的電子郵件2025-02-01
wps調(diào)用Outlook 批量發(fā)送電子郵件時持續(xù)彈出警告框怎么辦?
如何解決程序調(diào)用outlook時一直警告,wps調(diào)用outlook發(fā)送郵件時,發(fā)送的時候,會一直出現(xiàn)警告,需要你一個個點(diǎn)確定或拒絕,本文介紹如何解決這個警告2025-02-01QQ郵箱文件怎么發(fā)送微信? 電腦qq郵箱中轉(zhuǎn)站中文件分享到微信的方法
在使用郵箱軟件的時候,有的用戶想要通過QQ郵箱文件,QQ郵箱中存在這種功能,但是很多小伙伴不知道到底要如何操作,下面小編就給大家?guī)鞶Q郵箱文件發(fā)送微信教程,感興趣的2024-09-29微信電腦版怎么獨(dú)立窗口中打開訂閱號? 訂閱號獨(dú)立窗口顯示的教程
微信電腦版看訂閱號的時候,想要獨(dú)立窗口顯示訂閱號,該怎么操作呢?下面我們就來看看詳細(xì)的教程2024-09-29Outlook在windows系統(tǒng)中有哪些快捷鍵? Outlook的鍵盤快捷方式大全
Outlook可以用它來收發(fā)電子郵件、管理聯(lián)系人信息、記日記、安排日程、分配任務(wù),新版Outlook for Windows帶來了許多新功能,今天我們就來看看Outlook快捷鍵匯總2024-09-13微信怎么調(diào)默認(rèn)瀏覽器? 微信設(shè)置默認(rèn)瀏覽器打開網(wǎng)頁鏈接的教程
微信怎么調(diào)默認(rèn)瀏覽器?只需簡單設(shè)置,在微信就可以使用默認(rèn)瀏覽器打開網(wǎng)站,該怎么設(shè)置呢?詳細(xì)請看下文介紹2024-08-14GameViewer怎么刪除設(shè)備 GameViewer刪除設(shè)備的步驟
GameViewer怎么刪除設(shè)備?GameViewer 是一款專為游戲玩家設(shè)計的遠(yuǎn)程控制助手,下文中為大家?guī)砹薌ameViewer刪除設(shè)備步驟,需要的朋友快來看看吧2024-06-17