FTP(⽂件传输协议)⼯作原理
⽬前在⽹络上,如果你想把⽂件和其他⼈共享。最⽅便的办法莫过于将⽂件放FTP服务器上,然后其他⼈通过FTP客户端程序来下载所需要的⽂件。
1、FTP架构
如同其他的很多通讯协议,FTP通讯协议也采⽤客户机 / 服务器(Client / Server )架构。⽤户可以通过各种不同的FTP客户端程序,借助FTP协议,来连接FTP服务器,以上传或者下载⽂件。
2、FTP通讯端⼝知识
FTP服务器和客户端要进⾏⽂件传输,就需要通过端⼝来进⾏。FTP协议需要的端⼝⼀般包括两种:
控制链路--------TCP端⼝21
所有你发往FTP服务器的命令和服务器反馈的指令都是通过服务器上的21端⼝传送的。
数据链路--------TCP端⼝20
数据链路主要是⽤来传送数据的,⽐如客户端上传、下载内容,以及列⽬录显⽰的内容等。
3、FTP连接的两种⽅式
在数据链路的建⽴上,FTP Server 为了适应不同的⽹络环境,⽀持两种连接模式:主动模式(Port)和被动模式(Pasv)。其实这两种连接模式主要是针对数据链路进⾏的,和控制链路⽆关。
主动模式
主动模式是这样⼯作的:客户端把⾃⼰的⾼位端⼝和服务器端⼝21建⽴控制链路。所有的控制命令⽐如Is或get都是通过这条链路传送的。
当客户端需要服务器端给它传送数据时,客户端会发消息给服务器端,告诉⾃⼰的位置和打开的⾼位端⼝(⼀般⼤于1024的端⼝都就叫⾼位端⼝),等候服务器的20端⼝和客户端打开的端⼝进⾏连接,从⽽进⾏数据的传输。当服务器端收到信息后,就会和客户端打开的端⼝连接,这样数据链路就建⽴起来了。
采⽤主动模式连接服务器的客户端,当它位于NAT或者防⽕墙的保护之后时会碰到连接失败的问题。这是因为当防⽕墙接到服务器发送过来的信息的时候,并不知道应该发送给内部⽹络中的哪⼀台客户端造成的。
被动模式
被动模式是这样⼯作的:当客户端发送数据请求后,服务器也会发信息给客户端,告诉客户端:服务器在本地打开了⼀个⾼位端⼝P,你现在来连接我吧。当客户端收到该信息时,就会去连接服务器端的端⼝P,连接成功后,数据链路就建⽴了。
从上⾯的解释中我们可以看到,两种模式主要的不同是数据连接建⽴的不同。对于Port模式,是客户端在本地打开⼀个端⼝等服务器去连接建⽴数据连接,⽽Pasv模式就是服务器打开⼀个端⼝等待客户端去建⽴⼀个数据连接。
浅析⽂件传输协议 (ftp) 的⼯作原理
起初,FTP并不是应⽤于IP⽹络上的协议,⽽是ARPANEt⽹络中计算机间的⽂件传输协议, ARPANET是美国国防部组建的⽼⽹络,于1960-1980年使⽤。在那时, FTP的主要功能是在主机间⾼速可靠地传输⽂件。⽬前FTP仍然保持其可靠性,即使在今天,它还允许⽂件远程存取。这使得⽤户可以在某个系统上⼯作,⽽将⽂件存贮在别的系统。例如,如果某⽤户运⾏Web服务器,需要从远程主机上取得HTML ⽂件和CGI程序在本机上⼯作,他需要从远程存储站点获取⽂件(远程站点也需安装Web服务器)。当⽤户完成⼯作后,可使⽤FTP将⽂件传回到Web服务器。采⽤这种⽅法,⽤户⽆需使⽤Telnet登录到远程主机进⾏⼯作,这样就使Web服务器的更新⼯作变得如此的轻松。
FTP是TCP/IP的⼀种具体应⽤,它⼯作在OSI模型的第七层,TCP模型的第四层上,即应⽤层,使⽤TC
P传输⽽不是UDP,这样FTP客户在和服务器建⽴连接前就要经过⼀个被⼴为熟知的"三次握⼿"的过程,它带来的意义在于客户与服务器之间的连接是可靠的,⽽且是⾯向连接,为数据的传输提供了可靠的保证。
下⾯,让我们来看看,⼀个FTP客户在和服务器连接是怎么样的⼀个过程(以标准的FTP端⼝号为例)。
⾸先,FTP并不像HTTP协议那样,只需要⼀个端⼝作为连接(HTTP的默认端⼝是80,FTP的默认端⼝是21),FTP需要2个端⼝,⼀个端⼝是作为控制连接端⼝,也就是21这个端⼝,⽤于发送指令给服务器以及等待服务器响应;另⼀个端⼝是数据传输端⼝,端⼝号为20(仅PORT模式),是⽤来建⽴数据传输通道的,主要有3个作⽤
从客户向服务器发送⼀个⽂件。
从服务器向客户发送⼀个⽂件。
从服务器向客户发送⽂件或⽬录列表。
其次,FTP的连接模式有两种,PORT和PASV。PORT模式是⼀个主动模式,PASV是被动模式,这⾥都是相对于服务器⽽⾔的。为了让⼤家清楚的认识这两种模式,朗⽉繁星分别举例说明。
PORT模式
当FTP客户以PORT模式连接服务器时,他动态的选择⼀个端⼝号(本次试验是6015)连接服务器的21端⼝,注意这个端⼝号⼀定是1024以上的,因为1024以前的端⼝都已经预先被定义好,被⼀些典型的服务使⽤,当然有的还没使⽤,保留给以后会⽤到这些端⼝的资源服务。当经过TCP的三次握⼿后,连接(控制信道)被建⽴
现在⽤户要列出服务器上的⽬录结构(使⽤ls或dir命令),那么⾸先就要建⽴⼀个数据通道,因为只有数据通道才能传输⽬录和⽂件列表,此时⽤户会发出 PORT指令告诉服务器连接⾃⼰的什么端⼝来建⽴⼀条数据通道(这个命令由控制信道发送给服务器),当服务器接到这⼀指令时,服务器会使⽤20端⼝连接⽤户在PORT指令中指定的端⼝号,⽤以发送⽬录的列表。
当完成这⼀操作时,FTP客户也许要下载⼀个⽂件,那么就会发出get指令,请注意,这时客户会再次发送PORT指令,告诉服务器连接他的哪个"新"端⼝,你可以先⽤netstat -na这个命令验证,上⼀次使⽤的6044已经处于TIME_WAIT状态。
当这个新的数据传输通道建⽴后(在微软的系统中,客户端通常会使⽤连续的端⼝,也就是说这⼀次客户端会⽤6045这个端⼝),就开始了⽂件传输的⼯作。
PASV模式
然⽽,当FTP客户以PASV模式连接服务器时,情况就有些不同了。在初始化连接这个过程即连接服务器这个过程和PORT模式是⼀样的,不同的是,当 FTP客户发送ls、dir、get等这些要求数据返回的命令时,他不向服务器发送PORT指令⽽是发送PASV指令,在这个指令中,⽤户告诉服务器⾃⼰要连接服务器的某⼀个端⼝,如果这个服务器上的这个端⼝是空闲的可⽤的,那么服务器会返回ACK的确认信息,之后数据传输通道被建⽴并返回⽤户所要的信息(根据⽤户发送的指令,如ls、dir、get等);如果服务器的这个端⼝被另⼀个资源所使⽤,那么服务器返回UNACK的信息,那么这时,FTP客户会再次发送PASV命令,这也就是所谓的连接建⽴的协商过程。为了验证这个过程我们不得不借助CUTEFTP Pro这个⼤家经常使⽤的FTP客户端软件,因为微软⾃带的FTP命令客户端,不⽀持PASV模式。虽然你可以使⽤QUOTE PASV这个命令强制使⽤PASV模式,但是当你⽤ls命令列出服务器⽬录列表,你会发现它还是使⽤PORT⽅式来连接服务器的。现在我们使⽤ CUTEFTP Pro以PASV模式连接服务器。
请注意连接LOG⾥有这样⼏句话:
COMMAND:> PASV
227 Entering Passive Mode (127,0,0,1,26,108)
COMMAND:> LIST
STATUS:> Connecting ftp data socket 127.0.0.1:
125 Data connection already open; Transfer starting.
226 Transfer complete.
其中,227 Entering Passive Mode (127,0,0,1,26,80). 代表客户机使⽤PASV模式连接服务器的26x256+108=6764端⼝。(当然服务器要⽀持这种模式)
125 Data connection already open; Transfer starting.说明服务器的这个端⼝可⽤,返回ACK信息。
再让我们看看⽤CUTEFTP Pro以PORT模式连接服务器的情况。其中在LOG⾥有这样的记录:
COMMAND:> PORT 127,0,0,1,28,37
200 PORT command successful.
COMMAND:> LIST
150 Opening ASCII mode data connection for /bin/ls.
STATUS:> Accepting connection: 127.0.0.1:20.
226 Transfer complete.
STATUS:> Transfer complete.
其中,PORT 127,0,0,1,28,37告诉服务器当收到这个PORT指令后,连接FTP客户的28x256+37=7205这个端⼝。
Accepting connection: 127.0.0.1:20表⽰服务器接到指令后⽤20端⼝连接7205端⼝,⽽且被FTP客户接受。
⽐较分析
在这两个例⼦中,请注意: PORT模式建⽴数据传输通道是由服务器端发起的,服务器使⽤20端⼝连接客户端的某⼀个⼤于1024的端⼝;在PASV模式中,数据传输的通道的建⽴是由FTP客户端发起的,他使⽤⼀个⼤于1024的端⼝连接服务器的1024以上的某⼀个端⼝。如果从C/S模型这个⾓度来说,PORT对于服务器来说是 OUTBOUND,⽽PASV模式对于服务器是INBOUND,这⼀点请特别注意,尤其是在使⽤防⽕墙的企业⾥,⽐如使⽤微软的ISA Server 2000发布⼀个FTP服务器,这⼀点⾮常关键,如果设置错了,那么客户将⽆法连接。
最后,请注意在FTP客户连接服务器的整个过程中,控制信道是⼀直保持连接的,⽽数据传输通道是临时建⽴的。
在本⽂中把重点放到了FTP的连接模式,没有涉及FTP的其他内容,⽐如FTP的⽂件类型(Type),格式控制(Format control)以及传输⽅式(Transmission mode)等。不过这些规范⼤家可能不需要花费过多的时间去了解,因为现在流⾏的FTP客户端都可以⾃动的选择正确的模式来处理,对于FTP服务器端通常也都做了⼀些限制,如下:
类型:A S C I I或图像。
格式控制:只允许⾮打印。
结构:只允许⽂件结构。
传输⽅式:只允许流⽅式
⾄于这些内容,限于篇幅在这⾥就不想再介绍了。希望这篇⽂章能对⼤家有些帮助,特别是正在学习ISA Server2000的朋友和⼀些对FTP 不很了解的朋友。
"; $('miniAd').show(); } }, on
Failure: function(){} }}); } showMiniAd();
FTP协议安全分析
前⾔
FTP(File Transfer Protocol,⽂件传输协议)是互联⽹上常⽤的协议之⼀,⼈们⽤FTP实现互连⽹上的⽂件传输。由于TCP/IP协议族在设计时是处在⼀个相互信任的平台上的,使得在⽹络安全越来越被重视的今天,TCP/IP协议族的安全性也成为了安全界研究的⼀个重点,著名的ARP欺骗,交换环境下的数据监听,中间⼈攻击,以及DDOS,都利⽤了TCP/IP协议的脆弱性,FTP协议也或多或少的存在着⼀些问题,本⽂从FTP协议本⾝出来,探讨⼀下FTP协议的安全性。
第⼀章 FTP协议
⼀、协议简介
FTP协议和HTTP协议类似,都是采⽤的TCP连接,但与HTTP协议不同的是,HTTP协议的所有数据都是通过80端⼝进⾏传输(这⾥不考虑SSL),⽽FTP把数据和命令分开来处理,我们暂且把它们分别命名为“命令通道”和“数据通道”。命令通道⼀般是在我们熟悉的21端⼝,⽽数据通道通常是⼀个⾼端⼝。例如客户机要从FTP服务器上获取某个⽂件,⾸先由客户机登录服务器,与服务器建⽴连接,这就是我们前⾯讲的“命令通道”,客户机从这条通道将请求⽂件的命令发往服务器,服务器接到此命令后将与客户机重新建⽴⼀条连接,这就是我们⾯前讲的“数据通道”,⽂件数据将通过数据通道传送到客户机。这⾥我们⽤图1-1来表⽰⽂件传输中的处理过程
⽤户接⼝
|
| 命令通道
⽤户协议解释器--------------服务器协议接⼝
|
| 数据通道
⽤户数据传输功能-----------服务器数据传输功能
⼆、数据表⽰
FTP协议规范提供了控制⽂件传送与存储的多种选择。在以下四个⽅⾯都须作出⼀个选择。
1、⽂件类型
(1)ASCII码⽂件类型⼀般情况下ASCII码⽂件类型是默认选择的。tcp ip协议下载安装
(2)EBCDIC⽂件类型该类型传输⽅式要求两端都是EBCDIC系统。
(3)图像⽂件类型(也称⼆进制类型) 数据发送呈现为⼀个⽐特流,通常⽤于传输⼆进制⽂件
(4)本地⽂件类型该⽅式在具有不同字节⼤⼩的主机之间传输⼆进制⽂件。
2、格式控制
该选项只对ASCII和EBCDIC⽂件有效。
(1)⾮打印
(2)远程登录格式控制
(3)Fortran回车控制
3、结构
(1)⽂件结构
(2)记录结构
(3)页结构
4、传输⽅式
(1)流⽅式
(2)块⽅式
(3)压缩⽅式
三、FTP命令
FTP命令和应答是在命令通道以ASCII码开形式传送的,以下给出常⽤的命令及命令的相关说明:
命令说明
ABOR 放弃先前的FTP命令和数据转输
LIST 列表显⽰⽂件或⽬录
PASS 服务器上的⼝令
PORT 客户IP地址和端⼝
QUIT 从服务器上注销
RETR 取⼀个⽂件
STOR 存⼀个⽂件
SYST 服务器返回系统类型
TYPE 说明⽂件类型
USER 服务器上的⽤户名
四、FTP应答
FTP应答都是ASCII码形式的3位数字,并跟有报⽂选项。3位数字每⼀位都有不同的意义,这⾥给出⼀些常见的反回数字:
125 数据通道已经打开;传输开始。
200 就绪命令。
214 帮助报⽂。
331 ⽤户名就绪,要求输⼊⼝令。
425 不能打开数据通道。
500 语法错误(未认可命令)。
501 语法错误(⽆效参数)。
502 未实现的MODE(⽅式命令)类型。
五、连接管理
我们在前⾯讲了FTP的命令传输和数据传输是通过不同的端⼝进⾏传输的,连接管理也就理所当然的成了FTP协议的核⼼问题。其中最关键的⼜是数据通道的管理。
数据通道有以下三⼤⽤途:
1>从客户向服务器发送⼀个⽂件。
2>从服务器向客户发送⼀个⽂件。
3>从服务器向客户发送⽂件域⽬录列表。
其中传输模式⼜有主动FTP和被动FTP之分。主动FTP的⼀般过程如下:
1、客户发出命令建⽴数据连接。
2、客户通常在客户端主机上为所在数据连接选择⼀个临时端⼝号。客户从该端⼝发布⼀个被动的打开。
3、客户使⽤PORT命令从命令通道把数据通道的端⼝发向服务器。
4、服务器在命令通道上接收端⼝号,并向客户端主机上的端⼝发存⼀个主动的打开。这时服务器的数据通道使⽤的是20端⼝。
⽽被动FTP与主动FTP不同的是它不是由客户主机开⼀个临时端⼝,⽽是由服务器开⼀个临时端⼝等待客户机的连接。Fedora⾃带的vsftp就是采⽤的被动的传输模式。下⾯是从登录vsftp,到执⾏ls,再到退出的全过程。
[xinhe@xinhe xinhe]$ ftp -x.xxx
Connected x.xxx (x).
220 Welcome to ylyz FTP service.
Name (x:xinhe): xplore
---> USER xinhe
331 Please specify the password.
Password:
---> PASS XXXX
230 Login successful.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
ftp: setsockopt (ignored): Permission denied
---> PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,204,73)
---> LIST
150 Here comes the directory listing.
drwxr-xr-x 11 48 48 4096 Jul 21 10:52 xxx
drwxr-xr-x 19 48 48 4096 Jul 31 14:18 xxxx
drwx------ 2 0 0 16384 Jun 23 03:18 lost+found
drwxr-xr-x 3 510 510 4096 Aug 03 05:42 software
drwxr-xr-x 2 510 510 4096 Jun 30 09:34 tmp
drwxr-xr-x 6 510 510 4096 Jun 27 08:17 xxxxx
drwxrwxr-x 10 501 501 4096 Aug 12 20:35 xxxxxxx
-rw-r--r-- 1 510 510 12649185 Aug 12 20:34 xxxx
drwxr-xr-x 7 501 12 4096 Jul 03 15:13 xinhe
drwxr-xr-x 7 510 510 4096 Aug 13 19:08 zwell
226 Directory send OK.
Ftp> bye
---> QUIT
221 Goodbye.
以上就是登录某台vsftp的服务器,执⾏了⼀个ls然后再退出的全过程,以上是采⽤的被动传输模式,关键看这⼀句:
---> PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,204,73)
这⼀句告诉了我们服务器的IP和开临时数据端⼝,接着便是登录到这⼀临时端⼝ 52297 ,临时端⼝的算法:204*256+73。为了更清楚的了解之过程,我们对这⼀过程的数据传送进⾏了监视。以下是客户机登录临时端⼝过程中的⼀段
08/24-15:24:24.052846 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x4A
192.168.10.8:32791 -> x:52297 TCP TTL:64 TOS:0x0 ID:39780 IpLen:20 DgmLen:60 DF
******S* Seq: 0x42206DD2 Ack: 0x0 Win: 0x16D0 TcpLen: 40
TCP Options (5) => MSS: 1460 SackOK TS: 849590 0 NOP WS: 0
注:由于测式过程中的服务器是公⽹上的真实服务器,故屏弊其地址。
第⼆章安全隐患
以上我们讨论了FTP协议本⾝和FTP的具体传输过程,在这⼀过程中,很多地⽅都存在着安全隐患,随
着互联⽹和普及了深⼊,⽹络安全也越来越被⼈们重视,在这⾥我把⼀些常见的关于FTP的安全隐患提出来,希望引起⼈们对FTP安全的重视,使FTP服务器和数据传输过程更加安全。
⼀、FTP服务器软件漏洞
这类安全隐患不是本⽂讨论的重点,但是在这⾥必须把它提出来,因为它对于FTP服务供应商来说就是恶梦,也是倍受⿊客们关注的焦点,常⽤的FTP服务软件有 Wu-ftpd, ProFTPD,vsftpd,以及windows下常⽤的Serv-U等,最常见也最可怕的漏洞就是缓冲区溢出,近来Wu-ftpd和Serv-U的溢出漏洞层出不穷,ProFTPD也出现过缓冲区溢出,⽬前⽐较安全的还是vsftp,必竞是号称⾮常安全的FTP。
⼆、明⽂⼝令
前⾯讲过了,TCP/IP协议族的设计在地相互信任和安全的基础上的,FTP的设计当然也没有采⽤加密传送,这样的话,FTP客户与服务器之前所有的数据传送都是通过明⽂的⽅式,当然也包括了⼝令。
⾄从有了交换环境下的数据监听之后,这种明⽂传送就变得⼗分危险,因为别⼈可能从传输过程过捕获⼀些敏感的信息,如⽤户名和⼝令等。像HTTPS和SSH都采⽤加密解决了这⼀问题。⽽FTP仍然是明⽂传送,⽽像UINX和LINUX这类系统的ftp账号通常就是系统帐号,(vsftp就是这样做的)。这样⿊客就可以通过捕获FTP的⽤户名和⼝令来取得系统的帐号,如果该帐号可以远程登录的话,通常采⽤本地溢出来获得root权限。这样这台FTP服务器就被⿊客控制了。
以下是我捕获的明⽂传送的数据:
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:24:13.511233 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x4F
192.168.10.8:32790 -> x:21 TCP TTL:64 TOS:0x10 ID:36423 IpLen:20 DgmLen:65 DF
***AP*** Seq: 0x407F7F77 Ack: 0x1BD963BF Win: 0x16D0 TcpLen: 32
TCP Options (3) => NOP NOP TS: 848536 1353912910
55 53 45 52 20 78 70 6C 6F 72 65 0D 0A USER xinhe..
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:24:13.557058 0:D0:F8:51:FC:81 -> 0:E0:4C:F0:E0:EA type:0x800 len:0x42
***A**** Seq: 0x1BD963BF Ack: 0x407F7F84 Win: 0x16A0 TcpLen: 32
TCP Options (3) => NOP NOP TS: 1353916422 848536
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:24:13.560516 0:D0:F8:51:FC:81 -> 0:E0:4C:F0:E0:EA type:0x800 len:0x64
***AP*** Seq: 0x1BD963BF Ack: 0x407F7F84 Win: 0x16A0 TcpLen: 32
TCP Options (3) => NOP NOP TS: 1353916426 848536
33 33 31 20 50 6C 65 61 73 65 20 73 70 65 63 69 331 Please speci
66 79 20 74 68 65 20 70 61 73 73 77 6F 72 64 2E fy the password.
0D 0A ..
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
08/24-15:24:13.571556 0:E0:4C:F0:E0:EA -> 0:D0:F8:51:FC:81 type:0x800 len:0x42
192.168.10.8:32790 -> x:21 TCP TTL:64 TOS:0x10 ID:36424 IpLen:20 DgmLen:52 DF
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论