FTP協(xié)議的分析和擴(kuò)展
>>1.0<< FTP和TCP端口號(hào)
根據(jù)是使用Port模式還是Passive模式,F(xiàn)TP使用不同的TCP端口號(hào),在詳細(xì)描述FTP前,我們來(lái)
簡(jiǎn)單討論一下TCP端口號(hào)的一些基本概念。TCP使用端口號(hào)來(lái)標(biāo)識(shí)所發(fā)送和接收的應(yīng)用,端口號(hào)
可以幫助TCP來(lái)分離字節(jié)流并且?guī)拖鄳?yīng)字節(jié)傳遞給正確的應(yīng)用程序。
TCP端口號(hào)可以是半永久的和暫時(shí)的。服務(wù)器端監(jiān)聽在半永久的端口上來(lái)讓客戶端訪問(wèn)。客戶
端使用暫時(shí)的端口在本地標(biāo)識(shí)一個(gè)對(duì)話,客戶端端口只在使用TCP服務(wù)時(shí)候才存在,而服務(wù)器
端口只要服務(wù)器在運(yùn)行就一直在監(jiān)聽。
TCP端口可以歸為3類:
1、眾所周知的端口來(lái)標(biāo)識(shí)在TCP上運(yùn)行的標(biāo)準(zhǔn)服務(wù),包括FTP、HTTP、TELNET、SMTP等,這些
端口號(hào)碼范圍為0-1023;
2、注冊(cè)端口號(hào)用來(lái)標(biāo)識(shí)那些已經(jīng)向IANA(Internet Assigned Numbers Assigned Numbers
Authority)注冊(cè)的應(yīng)用,注冊(cè)端口號(hào)為1024-49151;
3、私有端口號(hào)是非注冊(cè)的并且可以動(dòng)態(tài)地分配給任何應(yīng)用,私有端口為49152-65535;
注冊(cè)的端口號(hào)本來(lái)打算只給注冊(cè)的應(yīng)用使用,可近年來(lái)端口號(hào)已經(jīng)陷入了到達(dá)極限的困境,你
可能會(huì)看到本來(lái)應(yīng)該是給注冊(cè)應(yīng)用使用的注冊(cè)端口被非注冊(cè)應(yīng)用用做暫時(shí)的端口。RFC1700詳
細(xì)標(biāo)注了眾所周知的和注冊(cè)的端口號(hào),然而不幸的是,這個(gè)RFC文檔自從1994年以來(lái)一直沒有
被更新,然后你仍可以從IANA得到一個(gè)及時(shí)更新的端口列表,詳細(xì)URL為:
http://www.iana.org/assignments/port-numbers
>>2.0<< FTP Port模式和FTP Passive模式
當(dāng)你對(duì)一個(gè)FTP問(wèn)題進(jìn)行排錯(cuò)時(shí)候,你首先要問(wèn)的一個(gè)問(wèn)題是使用的是port模式的還是passive
模式。因?yàn)檫@兩種行為迥異,所以這兩種模式引起的問(wèn)題也不同;在過(guò)去,客戶端缺省為acti
ve(port)模式;近來(lái),由于Port模式的安全問(wèn)題,許多客戶端的FTP應(yīng)用缺省為Passive模式。
>>2.1 FTP Port模式
Port模式的FTP步驟如下:
1、 客戶端發(fā)送一個(gè)TCP SYN(TCP同步)包給服務(wù)器段眾所周知的FTP控制端口21,客戶端
使用暫時(shí)的端口作為它的源端口;
2、 服務(wù)器端發(fā)送SYN ACK(同步確認(rèn))包給客戶端,源端口為21,目的端口為客戶端上使用
的暫時(shí)端口;
3、 客戶端發(fā)送一個(gè)ACK(確認(rèn))包;客戶端使用這個(gè)連接來(lái)發(fā)送FTP命令,服務(wù)器端使用這個(gè)
連接來(lái)發(fā)送FTP應(yīng)答;
4、 當(dāng)用戶請(qǐng)求一個(gè)列表(List)請(qǐng)求或者發(fā)起一個(gè)要求發(fā)送或者接受文件的請(qǐng)求,客戶端軟件使用
PORT命令,這個(gè)命令包含了一個(gè)暫時(shí)的端口,客戶端希望服務(wù)器在打開一個(gè)數(shù)據(jù)連接時(shí)候使用
這個(gè)暫時(shí)端口;PORT命令也包含了一個(gè)IP地址,這個(gè)IP地址通常是客戶自己的IP地址,而且FT
P也支持第三方(third-party)模式,第三方模式是客戶端告訴服務(wù)器端打開與另臺(tái)主機(jī)的連接;
5、 服務(wù)器端發(fā)送一個(gè)SYN包給客戶端的暫時(shí)端口,源端口為20,暫時(shí)端口為客戶端在PORT命令中
發(fā)送給服務(wù)器端的暫時(shí)端口號(hào);
6、 客戶端以源端口為暫時(shí)端口,目的端口為20發(fā)送一個(gè)SYN ACK包;
7、 服務(wù)器端發(fā)送一個(gè)ACK包;
8、 發(fā)送數(shù)據(jù)的主機(jī)以這個(gè)連接來(lái)發(fā)送數(shù)據(jù),數(shù)據(jù)以TCP段(注:segment,第4層的PDU)形式發(fā)送(
一些命令,如STOR表示客戶端要發(fā)送數(shù)據(jù),RETR表示服務(wù)器段發(fā)送數(shù)據(jù)),這些TCP段都需要
對(duì)方進(jìn)行ACK確認(rèn)(注:因?yàn)門CP協(xié)議是一個(gè)面向連接的協(xié)議)
9、 當(dāng)數(shù)據(jù)傳輸完成以后,發(fā)送數(shù)據(jù)的主機(jī)以一個(gè)FIN命令來(lái)結(jié)束數(shù)據(jù)連接,這個(gè)FIN命令需要另一
臺(tái)主機(jī)以ACK確認(rèn),另一臺(tái)主機(jī)也發(fā)送一個(gè)FIN命令,這個(gè)FIN命令同樣需要發(fā)送數(shù)據(jù)的主機(jī)以A
CK確認(rèn);
10、 客戶端能在控制連接上發(fā)送更多的命令,這可以打開和關(guān)閉另外的數(shù)據(jù)連接;有時(shí)候客戶端結(jié)
束后,客戶端以FIN命令來(lái)關(guān)閉一個(gè)控制連接,服務(wù)器端以ACK包來(lái)確認(rèn)客戶端的FIN,服務(wù)器
同樣也發(fā)送它的FIN,客戶端用ACK來(lái)確認(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模式會(huì)給網(wǎng)絡(luò)管理人員在許多方面帶來(lái)很多問(wèn)題,首先,在PORT命令消息中的IP地址和端
口號(hào)的編碼不是直白地顯示。另外,應(yīng)用層的協(xié)議命令理論上不應(yīng)該包含網(wǎng)絡(luò)地址信息(注:
IP地址),因?yàn)檫@打破了協(xié)議層的原則并且可能導(dǎo)致協(xié)同性和安全性方面的問(wèn)題。
下圖是WildPackets EtherPeek協(xié)議分析儀解碼了PORT命令的地址參數(shù),地址參數(shù)后是端口號(hào),見PORT
192,168,10,232,6,127;6,127部分的第一個(gè)阿拉伯?dāng)?shù)字乘以256,然后加上第2個(gè)阿拉伯?dāng)?shù)字
就得到端口號(hào),所以客戶端指定了端口號(hào)為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 |
\====================================================================/
下圖驗(yàn)證了服務(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時(shí)候,網(wǎng)絡(luò)中的防火墻必須要聲明相應(yīng)的端口,防火墻必須要跟蹤FTP對(duì)話然后檢查
PORT命令,防火墻必須要參與從服務(wù)器端到客戶端在PORT命令中指定的端口連接的建立過(guò)程。
如果網(wǎng)絡(luò)中使用了NAT(注:網(wǎng)絡(luò)地址翻譯),那么NAT的網(wǎng)關(guān)同樣也需要聲明相應(yīng)的端口,網(wǎng)
關(guān)需要把在PORT命令中指定的IP地址翻譯成分配給客戶的地址,然后重新計(jì)算TCP的Checksum
;如果網(wǎng)關(guān)沒有正確地執(zhí)行這個(gè)操作,F(xiàn)TP就失敗了。
黑客可能會(huì)利用FTP支持第三方特性這一特點(diǎn),在PORT命令中設(shè)置IP地址和端口號(hào)參數(shù)來(lái)指定
一臺(tái)目標(biāo)主機(jī)的地址和端口號(hào)(有時(shí)候稱這種攻擊為FTP反彈攻擊),例如黑客可以讓一臺(tái)FTP
服務(wù)器不斷地從它的源端口20發(fā)送TCP SYN包給一系列目的端口,讓FTP服務(wù)器看起來(lái)正在進(jìn)行
端口掃描,目的主機(jī)不知道攻擊來(lái)自黑客的主機(jī),看起來(lái)攻擊象是來(lái)自FTP服務(wù)器。一些常用的
FTP應(yīng)用在PORT命令中設(shè)置地址為0.0.0.0,這樣做的意圖是讓FTP服務(wù)器只需要與打開控制連接
的相同客戶進(jìn)行數(shù)據(jù)連接,設(shè)置地址為0.0.0.0可能會(huì)讓防火墻不知所措。例如,CISCO PIX IOS
6.0以上版本的PIX(注:CISCO硬件防火墻設(shè)備,6.0以上版本為其修正了相關(guān)的FTP協(xié)議)
要求數(shù)據(jù)連接的IP地址與已經(jīng)存在的控制連接的IP地址必須相同。這樣做的原因是防止黑客用
PORT命令來(lái)攻擊別的機(jī)器,雖然一些FTP應(yīng)用設(shè)置IP地址為0.0.0.0不是有意圖的攻擊,但在PI
X修正協(xié)議環(huán)境下的確引起了一些問(wèn)題,同時(shí)對(duì)其他不允許第三方模式和避免FTP反彈攻擊的防
火墻來(lái)說(shuō),這也會(huì)引起相同的問(wèn)題。
>>2.2 FTP Passive模式
下面的列表描述了Passive模式的FTP的步驟,步驟1到3和Port模式FTP相同,步驟9到11同樣與
Port模式FTP最后三步相同。
1、客戶端發(fā)送一個(gè)TCP SYN(TCP同步)包給服務(wù)器段眾所周知的FTP控制端口21,客戶端使
用暫時(shí)的端口作為它的源端口;
2、服務(wù)器端發(fā)送SYN ACK(同步確認(rèn))包給客戶端,源端口為21,目的端口為客戶端上使用
的暫時(shí)端口;
3、客戶端發(fā)送一個(gè)ACK(確認(rèn))包;客戶端使用這個(gè)連接來(lái)發(fā)送FTP命令,服務(wù)器端使用這個(gè)
連接來(lái)發(fā)送FTP應(yīng)答;
4、當(dāng)用戶請(qǐng)求一個(gè)列表(List)或者發(fā)送或接收文件時(shí)候,客戶端軟件發(fā)送PASV命令給服務(wù)器端
相關(guān)文章

重啟可暫時(shí)解決!微軟承認(rèn)Win10/Win11經(jīng)典版Outlook存在3個(gè)BUG
微軟承認(rèn)Win10/Win11經(jīng)典版Outlook存在多個(gè)bug,官方現(xiàn)已呼吁受影響用戶提交診斷日志以協(xié)助分析,在為正式解決之前提供了臨時(shí)解決辦法2026-03-16
加密郵件終于能打開了! 微軟緊急修復(fù)Win10/Win11經(jīng)典版Outlook故障
微軟緊急修復(fù) Win10/Win11 經(jīng)典版 Outlook 故障,加密郵件終于能打開了,針對(duì)無(wú)法等待正式補(bǔ)丁的用戶,微軟提供了兩種臨時(shí)解決方案,詳細(xì)如下文2026-02-02
Win10/Win11新版Outlook無(wú)法打開Excel 附件的兩種臨時(shí)解決辦法
微軟承認(rèn)部分 Win10/Win11 新版 Outlook 無(wú)法打開 Excel 附件,遇到這個(gè)問(wèn)題的朋友可以參考本文的兩種臨時(shí)解決辦法2025-12-03
Win10/Win11版Outlook存在加密郵件問(wèn)題:附臨時(shí)解決方案
微軟官方近日已承認(rèn)經(jīng)典版Outlook桌面客戶端存在程序漏洞,該漏洞導(dǎo)致用戶在嘗試打開來(lái)自外部組織(其他租戶)的OMEv2加密郵件時(shí)操作失敗,同時(shí)會(huì)彈出“正在為信息權(quán)限管理2025-09-28
新版Outlook自動(dòng)更新無(wú)法正常啟動(dòng):附臨時(shí)解決辦法
微軟補(bǔ)丁更新引發(fā)的軟件故障屢見不鮮,最近win10/win11系統(tǒng)更新最新版本的Outlook后,發(fā)現(xiàn)無(wú)法正常啟動(dòng),下面分享臨時(shí)解決辦法2025-08-21
Outlook無(wú)法正常啟動(dòng)提示錯(cuò)誤代碼4usqa怎么辦?
遇到Outlook無(wú)法啟動(dòng)跳 4usqa 錯(cuò)誤怎么辦?別擔(dān)心,跟著以下步驟,讓你的Outlook重新煥發(fā)活力2025-05-14
微軟新版Outlook將推出郵件分類快捷鍵及多項(xiàng)優(yōu)化:5月開始部署
微軟計(jì)劃在新版Outlook for Windows中引入郵件分類快捷功能,用戶可通過(guò)預(yù)設(shè)快捷鍵快速對(duì)郵件進(jìn)行分類,從而大幅提升工作效率并優(yōu)化管理流程2025-04-21rsync The --password-file option may only be used when accessing a
客戶端上傳文件執(zhí)行命令出錯(cuò),提醒The --password-file option may only be used when accessing an rsync daemon.查找資料也很少這樣的說(shuō)法,最后發(fā)現(xiàn)是冒號(hào)的問(wèn)題2025-02-26
郵箱密碼忘記了怎么找回來(lái)? 網(wǎng)易郵箱密碼找回流程
郵箱在使用的時(shí)候,由于各種原因,有時(shí)候我們可能會(huì)遇到忘記密碼、賬號(hào)被盜等問(wèn)題,這時(shí)候就需要進(jìn)行163郵箱找回操作,本文將為大家介紹如何進(jìn)行163郵箱找回操作2025-02-01
電子郵件注冊(cè)教程! 郵箱號(hào)怎么注冊(cè)看這篇就夠了
電子郵件成為了我們?nèi)粘I詈凸ぷ髦胁豢苫蛉钡囊徊糠?,無(wú)論是注冊(cè)社交媒體、購(gòu)物平臺(tái),還是與他人溝通,一個(gè)穩(wěn)定的郵箱賬號(hào)都變得至關(guān)重要,本文將為您提供詳細(xì)的電子郵件2025-02-01



