简单文件传输协议TFTP分析还原

 介绍TFTP协议及传输内容的还原。


TFTP,全称为Trivial File Transfer Protocol,即简单文件传输协议,是一个用来在客户端与服务器之间进行简单文件传输的协议,UDP承载,它真的很简单。其协议标准为RFC1350,以及一系列补丁RFC。


01

协议介绍


TFTP有如下特征:

1、UDP承载,请求端口固定为69;

2、没有列出目录内容功能;

3、无验证和加密机制;

4、仅有读取或写入文件功能;

5、支持三种不同的传输模式:"netascii","octet"和"mail",其中第三种已废弃。


TFTP会话流程如下:

1、客户机A送一个读请求(RRQ)或写请求(WRQ)包给服务器B,包含了文件名和传输模式;

2、B向A发一个ACK包应答,同时也通知了A其余送往B包应该发送的端口号;

3、源主机向目的主机送编过号的数据包,除了最后一个都应该包含一个全尺寸的数据块。目的主机用编号的ACK包应答所有的数据包;

4、最终的数据包必须包含少于最大尺寸的数据块以表明这是最后一个包。如果被传输文件正好是尺寸块的整数倍,源主机最后送的数据包就是0字节。


很多软件都内嵌了TFTP功能。

0?wx_fmt=png

(上图来自网络)


TFTP数据包的前两个字节为Opcode,不同的值代表不同的数据类型,协议共定义了五种类型:

1、 读文件请求:Read request(RRQ),对应Opcode字段值为1

2、 写文件请求:Write requst(WRQ),对应Opcode字段值为2

3、 文件数据:Data(DATA),对应Opcode字段值为3

4、 回应:Acknowledgement(ACK),对应Opcode字段值为4

5、 错误信息:Error(ERROR),对应Opcode字段值为5



02


协议解析


TFTP按数据包类型进行解析,不同类型格式不同。

0?wx_fmt=png


读文件和写文件请求格式如下:

0?wx_fmt=png

一个读文件请求例子如下:

0?wx_fmt=png

一个写文件请求例子如下:

0?wx_fmt=png

文件数据格式:

0?wx_fmt=png

一段文件数据报文例子如下:

0?wx_fmt=png


回应格式:

0?wx_fmt=png

一个回应报文如下:

0?wx_fmt=png

错误信息格式:

0?wx_fmt=png


对还原TFTP传输的文件内容,关键点是:

1、文件数据与文件请求不在一条链内,它们通过客户机所用的端口建立关联,文件名在文件请求报文内。

2、文件数据需要根据Block值进行拼接,才能构成一个完整的文件。

3、文件数据块的Block值从1开始,由于UDP的不可靠性,需要在内容拼接时根据Block值去除重传内容以及进行排序。



对TFTP协议的介绍就到这里了,在Wireshark官网,有TFTP的pcap供下载学习,如果有疑问,可以联系我共同探讨。

0?wx_fmt=jpeg

长按进行关注。





posted @ 2018-01-18 18:45  一二一二一  阅读(499)  评论(0编辑  收藏  举报