网络安全项目实战(无)--报文检测
10. TFTP 应用协议报文解析
- 目标
- 了解tftp协议
- 了解tftp基本操作方式(put/get)
- 了解tftp协议探测方法(简洁)
10.1. tftp 基本操作
通过操作tftp client和server操作, 熟悉抓包流程
10.1.1. Server 端
- 安装服务
itcast@itcast-teacher:~$ sudo apt-get install tftpd-hpa
- 配置服务
初始配置
itcast@itcast-teacher:~$ cat /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
修改配置为
itcast@itcast-teacher:~$ sudo vi /etc/default/tftpd-hpa
itcast@itcast-teacher:~$ cat /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tmp/"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -s -c"
-
配置含义为:
- TFTP_DIRECTORY: 为TFTP_Server服务目录,该目录最好具有可读可写权限, 一遍上传下载服务。
- “TFTP_ADDRESS”:为0.0.0.0:69,表示所有IP源都可以访问, 此处可不改
- “TFTP_OPTIONS”为“-l -c -s”。其中
- -l :以standalone/listen模式启动TFTP服务
- -c: 可创建新文件。默认情况下TFTP只允许覆盖原有文件而不能创建新文件
- -s : 改变TFTP启动的根目录,加了-s后,客户端使用TFTP时,不再需要输入指定目录,填写文件的文件路径,而是使用配置文件中写好的目录
-
重启服务:
itcast@itcast-teacher:~$ sudo /etc/init.d/tftpd-hpa restart
[ ok ] Restarting tftpd-hpa (via systemctl): tftpd-hpa.service.
itcast@itcast-teacher:~$
10.1.2. Client 端
客户端操作比较简单,我们仅展示 上传(put)文件和下载(get)文件
- 文件下载
$ tftp 192.168.0.111
tftp> get a.out
Received 11363 bytes in 0.3 seconds
tftp> q
q 退出
- 文件上传 put
$ tftp 192.168.0.111
tftp> put aa.pcap
Sent 4569 bytes in 0.2 seconds
tftp> q
$
注, 确保你的目录下有相应文件
10.2. TFTP 协议介绍
TFTP是一个传输文件的简单协议,它其于UDP协议而实现,(但是也不能确定有些TFTP协议是基于其它传输协议完成的)此协议设计的时候是进行小文件传输的。
只能从文件服务器上获得或写入文件,不能列出目录,不进行认证
-
传输中有三种模式:
- netascii,这是8位的ASCII码形式,
- octet,这是8位源数据类型;
- 最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件
-
初始连接
初始连接时候需要发出WRQ(请求写入远程系统)或RRQ(请求读取远程系统),收到一个确定应答,一个确定可以写出的包或应该读取的第一块数据。
- TFTP包
TFTP支持五种类型的包,我们在以上已经说明这五种类型的包:
opcode | operation |
---|---|
01 | Read request (RRQ) |
02 | Write request (WRQ) |
03 | Data (DATA) |
04 | Acknowledgment (ACK) |
05 | Error (ERROR) |
- RRQ/WRQ 数据包格式
2 bytes string 1 byte string 1 byte
------------------------------------------------
| Opcode | Filename | 0 | Mode | 0 |
------------------------------------------------
RRQ 和WRQ包(代码分别为1和2)的格式如上所示。
文件名是NETASCII码字符,以0结束。
而MODE域包括了字符串"netascii","octet"或"mail",名称不分大小写。
- DATA 包
2 bytes 2 bytes n bytes
----------------------------------
| Opcode | Block # | Data |
----------------------------------
数据在数据包中传输,其格式如上图所示。
数据包的OP码为3,它还包括有一个数据块号和数据。
数据块号域从1开始编码,每个数据块加1,这样接收方可以确定这个包是新数据还是已经接收过的数据。
数据域从0字节到512字节。如果数据域是512字节则它不是最后一个包,如果小于512字节则表示这个包是最后一个包。
除了ACK和用于中断的包外,其它的包均得到确认。发出新的数据包等于确认上次的包。
WRQ和DATA包由ACK或ERROR数据包确认,
而 RRQ数据包由DATA或ERROR数据包确认。
- ACK包
2 bytes 2 bytes
---------------------
| Opcode | Block # |
---------------------
上图即是一个ACK包,操作码为4。其中的包号为要确认的数据包的包号。
WRQ数据包被ACK数据包确认,WRQ数据包的包号为0。
- ERROR 包
2 bytes 2 bytes string 1 byte
-----------------------------------------
| Opcode | ErrorCode | ErrMsg | 0 |
-----------------------------------------
一个ERROR包,它的操作码是5,它的格式如上所示。此包可以被其它任何类型的包确认。
错误码(ErrorCode)
Value Meaning
0 未定义,请参阅错误信息(如果提示这种信息的话)
1 文件未找到
2 访问非法
3 磁盘满或超过分配的配额
4 非法的TFTP操作
5 未知的传输ID
6 文件已经存在
7 没有类似的用户
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!