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

在上述时序图中,ClientServer 分别表示 FTP 客户端和服务器,通信过程如下:

  1. 客户端向服务器发送 HELLO 消息
  2. 服务器回复 220 Welcome to FTP server 消息
  3. 客户端发送带有用户名的 USER 命令,示例中是 username
  4. 服务器要求输入密码,并发送 331 Password required for username 消息
  5. 客户端发送带有密码的 PASS 命令,示例中是 password
  6. 服务器发送 230 User logged in 消息,确认登录成功
  7. 客户端请求服务器进入被动模式,使用 PASV 命令
  8. 服务器回复 Entering Passive Mode 消息,提供数据连接的IP地址和端口
  9. 客户端使用 RETR 命令请求服务器检索文件
  10. 服务器确认请求,并发送 150 Opening data connection 消息开始数据传输
  11. 服务器将文件数据传输给客户端
  12. 传输完成后,服务器发送 226 Transfer complete 消息
  13. 客户端发送 QUIT 命令以终止会话,或者 BYE 命令
  14. 服务器回复 221 Goodbye 消息,确认终止

匿名访问 FTP

在 FTP 上进行无账户登录时,可以使用用户名 "anonymous" 或 "ftp"(取决于服务器的配置)

匿名FTP的目的是为了提供对服务器上某些文件或目录的公共访问。但是,匿名用户所获得的访问级别和权限可能因服务器配置而异。有些服务器可能只提供只读访问,而其他服务器可能允许上传文件甚至执行某些命令。

Fawn 最终的 flag 就是通过匿名访问 FTP 获得的,使用 GET 命令下载文件即可。

TIER 0: Fawn的更多相关文章

  1. Hack The Box( Starting Point )

    Hack The Box [Starting Point] 初始点 -- 了解渗透测试的基础知识. 这一章节对于一个渗透小白来说,可以快速的成长.以下将提供详细的解题思路,与实操步骤. TIER 0 ...

  2. 2000条你应知的WPF小姿势 基础篇<1-7>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师,对C#和WPF有着极深的热情.最为出色的是他维护了两个博客:2,000Things You Should Know ...

  3. Windows Live Write 日志客户端

    下载地址 下载地址:http://wl.dlservice.microsoft.com/download/E/4/9/E494934D-C33E-486A-AB1A-82248C800922/zh-c ...

  4. ssd可以用作redo 盘吗?

                                               ssd可以用作redo 盘吗? 1.ssd有写磨损,而且ssd的写性能也不是非常好,ssd只是随机读特别好,因为 ...

  5. [No0000129]WPF(1/7)开始教程[译]

    概要 在我使用了半年多 WPF 后,是时候写点关于 WPF 基础方面的东西了.我发表了一系列针对具体问题的文章.现在是到了让大家明白为什么说WPF是一款在界面开发上带来革命的产品了. 本文针对初级-中 ...

  6. OpenStack_Swift源代码分析——Ring的rebalance算法源代码具体分析

    1 Command类中的rebalnace方法 在上篇文章中解说了,创建Ring已经为Ring加入设备.在加入设备后须要对Ring进行平衡,平衡 swift-ring-builder object.b ...

  7. 利用 PGO 提升 .NET 程序性能

    引子 .NET 6 开始初步引入 PGO.PGO 即 Profile Guided Optimization,通过收集运行时信息来指导 JIT 如何优化代码,相比以前没有 PGO 时可以做更多以前难以 ...

  8. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  9. ZAM 3D 制作3D动画字幕 用于Xaml导出

    原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...

  10. 微信小程序省市区选择器对接数据库

    前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...

随机推荐

  1. nohup Command [ Arg … ] [ & ]

    nohup 英文全称:no hang up 不挂断的意思.退出终端不挂断程序的运行.在默认的情况下,会输出一个名叫 nohup.out 的文件到当前目录下.nohup Command [ Arg - ...

  2. java 项目的创建

    新建一个  Spring Initializr

  3. MyBatis数据源模块源码分析

    数据源对象是比较复杂的对象,其创建过程相对比较复杂,对于 MyBatis 创建数据源,具体来讲有如下难点: MyBatis 不但要能集成第三方的数据源组件,自身也提供了数据源的实现: 数据源的初始化参 ...

  4. 行列式求值,从 $n!$ 优化到 $n^3$

    前置知识 \(\sum\) 为累加符号,\(\prod\) 为累乘符号. 上三角矩阵指只有对角线及其右上方有数值其余都是 \(0\) 的矩阵. 如果一个矩阵的对角线全部为 \(1\) 那么这个矩阵为单 ...

  5. GPT-4o和GPT-4有什么区别?我们还需要付费开通GPT-4?

    GPT-4o 是 OpenAI 最新推出的大模型,有它的独特之处.那么GPT-4o 与 GPT-4 之间的主要区别具体有哪些呢?今天我们就来聊聊这个问题. 目前来看,主要是下面几个差异. 响应速度 G ...

  6. 在 Rainbond 中一键安装高可用 Nacos 集群

    描述如何通过云原生应用管理平台 Rainbond 一键安装高可用 Nacos 集群.这种方式适合不太了解 Kubernetes.容器化等复杂技术的用户使用,降低了在 Kubernetes 中部署 Na ...

  7. 7.19考试总结(NOIP模拟20)[玩具·y·z]

    与其被自己的本性牵着走而痛苦,倒不如试着改变自己. 前言 首先自我检讨一下,T1的部分分是原题,但是我这个 FW 居然没有看出来..(主要是我看错题了) 论语文素养如何限制 OI 水平 别人眼里是一棵 ...

  8. 15种pod的状态

    15种pod的状态 调度失败 常见错误状态(Unschedulable) pod被创建后进入调度阶段,k8s调度器依据pod声明的资源请求量和调度规则,为pod挑选一个适合运行的节点.当集群节点不满足 ...

  9. 01-布局扩展-用calc来计算实现双飞翼布局

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  10. gRPC入门学习之旅(十)

    gRPC入门学习之旅目录 gRPC入门学习之旅(一) gRPC入门学习之旅(二) gRPC入门学习之旅(三) gRPC入门学习之旅(四) gRPC入门学习之旅(七)  gRPC入门学习之旅(九) 3. ...