TIER 0: Fawn
FTP
FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的协议和相应的工具
-
RFC 959 文档:是定义了 FTP 协议的规范
-
FTP 使用两个不同的端口 TCP/20 和 TCP/21 进行数据传输和控制连接
- FTP 控制连接使用 TCP/21 端口,控制连接负责处理认证、发送命令、传输目录和文件操作等
- 在主动模式下文件传输会使用到 TCP/20 端口,被动模式使用端口范围 1024-65535,但可以根据服务器配置进行更改。
尽管 FTP 在过去被广泛使用,但随着时间的推移,由于安全性方面的限制,现代网络环境中更常用的是安全的文件传输协议,如 SFTP(SSH File Transfer Protocol)和 FTPS(FTP over SSL/TLS)
部分 FTP 协议规则
FTP 协议使用命令和响应的形式进行通信
-
通信形式
- 客户端向服务器发送命令请求
- 服务器根据接收到的命令执行相应的操作
- 客户端收到服务器响应
-
FTP 命令由命令名称和参数组成,以空格分隔。例如,"USER username" 是用于指定用户名的命令。
-
FTP 响应由三位数字代码和可选的文本消息组成。例如,"220 Welcome to FTP server" 是一个表示服务器准备就绪的响应。
对于具体命令和响应,推荐查看 👉 RFC 959
科普:FTP 协议早于 HTTP 协议
FTP 通信过程
FTP 通信过程包括以下几个步骤:
- 身份验证:客户端可以使用用户名和密码进行身份验证,或者选择匿名身份验证并使用预定义的匿名账号。
- 目录和文件操作:FTP 提供了一系列命令用于在服务器上进行目录和文件的操作。
- 错误处理:FTP 使用响应代码来指示命令的执行状态。
- 数据表示和传输:FTP 支持多种数据表示和传输方式,传统使用 ASCII 模式或二进制模式。
- 结束会话:客户端可以使用
QUIT
命令终止会话,或者使用BYE
命令。
下面是一个 FTP 通信时序图示例:
sequenceDiagram
participant Client
participant Server
Client->>Server: HELLO
Server-->>Client: 220 Welcome to FTP server
Client->>Server: USER username
Server-->>Client: 331 Password required for username
Client->>Server: PASS password
Server-->>Client: 230 User logged in
Client->>Server: PASV
Server-->>Client: 227 Entering Passive Mode (192,168,0,1,10,12)
Client->>Server: RETR filename
Server-->>Client: 150 Opening data connection for filename
Server-->>Client: (data transfer)
Server-->>Client: 226 Transfer complete
Client->>Server: QUIT
Server-->>Client: 221 Goodbye
在上述时序图中,Client
和 Server
分别表示 FTP 客户端和服务器,通信过程如下:
- 客户端向服务器发送
HELLO
消息 - 服务器回复
220 Welcome to FTP server
消息 - 客户端发送带有用户名的
USER
命令,示例中是 username - 服务器要求输入密码,并发送
331 Password required for username
消息 - 客户端发送带有密码的
PASS
命令,示例中是 password - 服务器发送
230 User logged in
消息,确认登录成功 - 客户端请求服务器进入被动模式,使用
PASV
命令 - 服务器回复
Entering Passive Mode
消息,提供数据连接的IP地址和端口 - 客户端使用
RETR
命令请求服务器检索文件 - 服务器确认请求,并发送
150 Opening data connection
消息开始数据传输 - 服务器将文件数据传输给客户端
- 传输完成后,服务器发送
226 Transfer complete
消息 - 客户端发送
QUIT
命令以终止会话,或者BYE
命令 - 服务器回复
221 Goodbye
消息,确认终止
匿名访问 FTP
在 FTP 上进行无账户登录时,可以使用用户名 "anonymous" 或 "ftp"(取决于服务器的配置)
匿名FTP的目的是为了提供对服务器上某些文件或目录的公共访问。但是,匿名用户所获得的访问级别和权限可能因服务器配置而异。有些服务器可能只提供只读访问,而其他服务器可能允许上传文件甚至执行某些命令。
Fawn 最终的 flag 就是通过匿名访问 FTP 获得的,使用 GET 命令下载文件即可。