注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

CCIE那点事-李萧明

博客已转移到www.jdccie.com CCIE那点事敬请期待

 
 
 

日志

 
 

FTP协议的分析和扩展(二)  

2008-12-10 16:56:00|  分类: 网络技术详解 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
下图验证了服务器端的确从端口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                               |
\====================================================================/

当使用FTP时候,网络中的防火墙必须要声明相应的端口,防火墙必须要跟踪FTP对话然后检查
PORT命令,防火墙必须要参与从服务器端到客户端在PORT命令中指定的端口连接的建立过程。
如果网络中使用了NAT(注:网络地址翻译),那么NAT的网关同样也需要声明相应的端口,网
关需要把在PORT命令中指定的IP地址翻译成分配给客户的地址,然后重新计算TCP的Checksum
;如果网关没有正确地执行这个操作,FTP就失败了。

黑客可能会利用FTP支持第三方特性这一特点,在PORT命令中设置IP地址和端口号参数来指定
一台目标主机的地址和端口号(有时候称这种攻击为FTP反弹攻击),例如黑客可以让一台FTP
服务器不断地从它的源端口20发送TCP SYN包给一系列目的端口,让FTP服务器看起来正在进行
端口扫描,目的主机不知道攻击来自黑客的主机,看起来攻击象是来自FTP服务器。一些常用的
FTP应用在PORT命令中设置地址为0.0.0.0,这样做的意图是让FTP服务器只需要与打开控制连接
的相同客户进行数据连接,设置地址为0.0.0.0可能会让防火墙不知所措。例如,CISCO PIX IOS
6.0以上版本的PIX(注:CISCO硬件防火墙设备,6.0以上版本为其修正了相关的FTP协议)
要求数据连接的IP地址与已经存在的控制连接的IP地址必须相同。这样做的原因是防止黑客用
PORT命令来攻击别的机器,虽然一些FTP应用设置IP地址为0.0.0.0不是有意图的攻击,但在PI
X修正协议环境下的确引起了一些问题,同时对其他不允许第三方模式和避免FTP反弹攻击的防
火墙来说,这也会引起相同的问题。

>;>;2.2   FTP Passive模式
下面的列表描述了Passive模式的FTP的步骤,步骤1到3和Port模式FTP相同,步骤9到11同样与
Port模式FTP最后三步相同。

1、客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使
    用暂时的端口作为它的源端口;
2、服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用
    的暂时端口;
3、客户端发送一个ACK(确认)包;客户端使用这个连接来发送FTP命令,服务器端使用这个
    连接来发送FTP应答;
4、当用户请求一个列表(List)或者发送或接收文件时候,客户端软件发送PASV命令给服务器端
    表明客户端希望进入Passive模式;
5、服务器端进行应答,应答包括服务器的IP地址和一个暂时的端口,这个暂时的端口是客户端
    在打开数据传输连接时应该使用的端口;
6、客户端发送一个SYN包,源端口为客户端自己选择的一个暂时端口,目的端口为服务器在PASV
    应答命令中指定的暂时端口号;
7、服务器端发送SYN ACK包给客户端,目的端口为客户端自己选择的暂时端口,源端口为PASV
    应答中指定的暂时端口号;
8、客户端发送一个ACK包;
9、发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(
    一些命令,如STOR表示客户端要发送数据,RETR表示服务器段发送数据),这些TCP段都需要
    对方进行ACK确认;
10、当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一
    台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以A
    CK确认;
11、客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结
    束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器
    同样也发送它的FIN,客户端用ACK来确认。

下图图示了Passive模式FTP的开始几个步骤:
/====================================================================\
|                                                                    |
|    [ ftp Client ]                       [ ftp Server ]       |
|                                                                    |
|    (TCP:21 连接初始化,控制端口)                                  |
|                            SYN                                   |
|        Port xxxx ---------------------->; Port 21    [TCP]   |
|                             SYN+ACK                                |
|        Port xxxx <---------------------- Port 21              |
|                            ACK                                   |
|        Port xxxx ---------------------->; Port 21              |
|                                                                    |
|    (PASV操作: 被动连接数据端口初始化)                            |
|                                                                    |
|                             PASV                                   |
|        Port xxxx ---------------------->; Port 21              |
|                   PASV OK, IP, Port yyyy                      |
|        Port xxxx <---------------------- Port 21              |
|                            SYN                               |
|        Port zzzz ---------------------->; Port yyyy          |
|                         SYN+ACK                               |
|        Port zzzz <---------------------- Port yyyy          |
|                            ACK                               |
|        Port zzzz ---------------------->; Port yyyy          |
|                                                                    |
|                                                                    |
|        (数据操作: 数据传输)                                        |
|                       List, Retr or Stor                         |
|        Port xxxx ---------------------->; Port 21              |
|                         Data + ACK                            |
|        Port zzzz <--------------------->; Port yyyy          |
|                            .                                  |
|                            .                                  |
|                            .                                  |
|                                                                    |
\====================================================================/
一个PASV请求要求服务器在服务器选择的一个新的端口上接受数据连接,PASV命令没有任何参
数,服务器端的回应只是一行显示服务器IP地址和服务器接受连接的TCP端口号。

下图显示了服务器对PASV命令的回应,服务器告诉客户端它在端口5365(192,168,179,100,20
,245)上进行监听,计算端口的方法是20*256+245=5365;
/====================================================================\
| TCP - Transport Control Protocol                                   |
| Source Port:       21   ftp                                  |
| Destination Port:     1249                                     |
| Sequence Number:    4239887193                               |
| Ack Number:           36925357                                   |
| 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:             8760                                     |
| Checksum:          0x3EAB                                  |
| Urgent Pointer:    0                                        |
| No TCP Options                                                 |
|                                                                    |
| FTP Control - File Transfer Protocol                            |
| Line   1:              PASV 192,168,0,1,100,20,245<CR>;<LF>;        |
|                                                                    |
| FCS - Frame Check Sequence                                         |
| FCS (Calculated):     0xBED4346D                               |
\====================================================================/
当收到PASV命令的回应后,客户端打开一个TCP连接,源端口为一个暂时的端口,目的端口为
服务器提供的暂时端口。

下图显示了客户端的TCP连接建立过程,正如上面所说,目的端口为5365。
/====================================================================\
| TCP - Transport Control Protocol                                   |
| Source Port:       1250                                     |
| Destination Port:     5365                                     |
| Sequence Number:    36931503                                   |
| Ack Number:           0                                        |
| Offset:             7   (28   bytes)                             |
| Reserved:          %000000                                  |
| Flags:             %000010                                  |
|                      0. .... (No Urgent pointer)             |
|                      .0 .... (No Ack)                         |
|                      .. 0... (No Push)                          |
|                      .. .0.. (No Reset)                      |
|                      .. ..1. SYN                                |
|                      .. ...0 (No FIN)                         |
|                                                                    |
| Window:             8192                                     |
| Checksum:          0x1A57                                  |
| 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                               |
\====================================================================/

大多数人认为在防火墙网络环境中Passive模式比Port模式的问题小,但我们注意到在Passive
模式下,客户端打开一个暂时的目的端口连接,一些防火墙或者CISCO设备的访问列表(ACL)可
能会阻止这种连接,同样服务器的回应也是从一个暂时的端口到一个暂时的端口,防火墙或者
CISCO的访问列表也会阻止这种连接。在CISCO路由器上你可以用访问列表关键字"established
"来避免第二个问题,"established"关键字告诉路由器允许带ACK字端的包通过,服务器端的S
YN ACK包带有ACK字端。在新版本PIX IOS中也可以通过fixit关键字建立针对ftp协议的深层状
态检测过滤,其他大多数状态检测防火墙例如LinuxNetfilters也支持ftp协议的状态检测,进行
准确的PASV动态端口过滤。


  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018