网络安全项目实战(无)--报文检测

2023-12-16 05:37:17

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支持五种类型的包,我们在以上已经说明这五种类型的包:

opcodeoperation
01Read request (RRQ)
02Write request (WRQ)
03Data (DATA)
04Acknowledgment (ACK)
05Error (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 没有类似的用户

?

文章来源:https://blog.csdn.net/cat_fish_rain/article/details/135012095
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。