📄 ftp协议分析.htm
字号:
Protocol
|<BR>| Line
1:
PORT
192,168,0,1,9,39&lt;CR&gt;&lt;LF&gt;
|<BR>|
|<BR>| FCS - Frame Check
Sequence
|<BR>| FCS
(Calculated):
0xF4C04A4F
|<BR>\====================================================================/</P><BR>
<P>下图验证了服务器端的确从端口20打开到端口1663的TCP连接:<BR>/====================================================================\<BR>|
TCP - Transport Control
Protocol
|<BR>| Source
Port:
20
ftp-data
|<BR>| Destination
Port:
1663
|<BR>| Sequence
Number:
2578824336
|<BR>| Ack
Number:
0
|<BR>|
Offset:
6 (24
bytes)
|<BR>|
Reserved:
%000000
|<BR>|
Flags:
%000010
|<BR>|
0. .... (No Urgent
pointer)
|<BR>|
.0 .... (No
Ack)
|<BR>|
.. 0... (No
Push)
|<BR>|
.. .0.. (No
Reset)
|<BR>|
.. ..1.
SYN
|<BR>|
.. ...0 (No
FIN)
|<BR>|
|<BR>|
Window:
3731
|<BR>|
Checksum:
0x8A4C
|<BR>| Urgent
Pointer:
0
|<BR>| No TCP
Options
|<BR>|
|<BR>| TCP
Options
|<BR>| Options
Type:
2 Maxinum Segment
Size
|<BR>|
Length:
4
|<BR>|
MSS:
1460
|<BR>|
|<BR>| FCS - Frame Check
Sequence
|<BR>| FCS
(Calculated):
0x5A1BD023
|<BR>\====================================================================/</P><BR>
<P>当使用FTP时候,网络中的防火墙必须要声明相应的端口,防火墙必须要跟踪FTP对话然后检查<BR>PORT命令,防火墙必须要参与从服务器端到客户端在PORT命令中指定的端口连接的建立过程。<BR>如果网络中使用了NAT(注:网络地址翻译),那么NAT的网关同样也需要声明相应的端口,网<BR>关需要把在PORT命令中指定的IP地址翻译成分配给客户的地址,然后重新计算TCP的Checksum<BR>;如果网关没有正确地执行这个操作,FTP就失败了。</P><BR>
<P>黑客可能会利用FTP支持第三方特性这一特点,在PORT命令中设置IP地址和端口号参数来指定<BR>一台目标主机的地址和端口号(有时候称这种攻击为FTP反弹攻击),例如黑客可以让一台FTP<BR>服务器不断地从它的源端口20发送TCP<BR>SYN包给一系列目的端口,让FTP服务器看起来正在进行端口扫描,目的主机不知道攻击来自黑<BR>客的主机,看起来攻击象是来自FTP服务器。一些常用的FTP应用在PORT命令中设置地址为0.0.<BR>0.0,这样做的意图是让FTP服务器只需要与打开控制连接的相同客户进行数据连接,设置地址<BR>为0.0.0.0可能会让防火墙不知所措。例如,CISCO<BR>PIX
IOS
6.0以上版本的PIX(注:CISCO硬件防火墙设备,6.0以上版本为其修正了相关的FTP协议)<BR>要求数据连接的IP地址与已经存在的控制连接的IP地址必须相同。这样做的原因是防止黑客用<BR>PORT命令来攻击别的机器,虽然一些FTP应用设置IP地址为0.0.0.0不是有意图的攻击,但在PI<BR>X修正协议环境下的确引起了一些问题,同时对其他不允许第三方模式和避免FTP反弹攻击的防<BR>火墙来说,这也会引起相同的问题。</P><BR>
<P>&gt;&gt;2.2 FTP
Passive模式<BR>下面的列表描述了Passive模式的FTP的步骤,步骤1到3和Port模式FTP相同,步骤9到11同样与<BR>Port模式FTP最后三步相同。</P><BR>
<P>1、客户端发送一个TCP<BR>SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使用暂时的端口作为它的源<BR>端口;<BR>2、
服务器端发送SYN<BR>ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口;<BR>3、<BR>客户端发送一个ACK(确认)包;客户端使用这个连接来发送FTP命令,服务器端使用这个连接<BR>来发送FTP应答;<BR>4、<BR>当用户请求一个列表(List)或者发送或接收文件时候,客户端软件发送PASV命令给服务器端表<BR>明客户端希望进入Passive模式;<BR>5、<BR>服务器端进行应答,应答包括服务器的IP地址和一个暂时的端口,这个暂时的端口是客户端在<BR>打开数据传输连接时应该使用的端口;<BR>6、<BR>客户端发送一个SYN包,源端口为客户端自己选择的一个暂时端口,目的端口为服务器在PASV<BR>应答命令中指定的暂时端口号;<BR>7、
服务器端发送SYN<BR>ACK包给客户端,目的端口为客户端自己选择的暂时端口,源端口为PASV应答中指定的暂时端<BR>口号;<BR>8、
客户端发送一个ACK包;<BR>9、<BR>发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(<BR>一些命令,如STOR表示客户端要发送数据,RETR表示服务器段发送数据),这些TCP段都需要<BR>对方进行ACK确认;<BR>10、<BR>当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一<BR>台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以A<BR>CK确认;<BR>11、<BR>客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结<BR>束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器<BR>同样也发送它的FIN,客户端用ACK来确认。</P><BR>
<P>下图图示了Passive模式FTP的开始几个步骤:<BR>/====================================================================\<BR>|
|<BR>| [ ftp Client
] &
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -