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. Python依据遥感影像的分幅筛选出对应的栅格文件

      本文介绍基于Python语言,结合已知研究区域中所覆盖的全部遥感影像的分幅条带号,从大量的遥感影像文件中筛选落在这一研究区域中的遥感影像文件的方法.   首先,先来明确一下本文所需实现的需求.现已 ...

  2. NOIP模拟68

    T1 玩水 解题思路 我们称一个点合法当且仅当 \(s_{i-1,j}=s_{i,j-1}\) . 于是如果一个合法点在它的左上或者右下也可以相邻有一个合法点就是一个合法的图. 树状数组维护即可 co ...

  3. 6.26考试总结(NOIP模拟10)[入阵曲·将军令·星空]

    对于虚伪而言,真实的光明或许过于耀眼了 前言 这一次吧,考得特别烂,主要是这次考试想搞一下特殊性质,然后一不小心就因小失大弄巧成拙了下,下次注意吧.. T1 入阵曲 暴力 思路 对于这个题的话,暴力的 ...

  4. Java中的包(Package)

    # 包(Package) **为方便管理类(按照不同的功能管理类),解决同名问题的发生** - 使用`package关键字`修饰包 - **类名(全类名)=包名(地址)+类名简称** ```java ...

  5. sql数据的操作

      /*             数据的写入                 名称 : 库名 表名 字段名 用 反引号包裹                 数据 : 字符串数据使用单引号包裹      ...

  6. YNOI 做题记

    YNOI 做题记 偶然有一天做到了其中的一道题,于是便开始做相关的题了-- [Ynoi2015] 我回来了 - 洛谷 这之一场联考搬过来的题--于是考场上写了一个 \(O((n + m)\log^2 ...

  7. CentOS 7- 配置阿里镜像源

    1.备份CentOS 7系统自带yum源配置文件/etc/yum.repos.d/CentOS-Base.repo命令: mv /etc/yum.repos.d/CentOS-Base.repo /e ...

  8. 《Android开发卷——实时监听文本框输入》

       在实际开发中,有时候会让用户发布一些类似微博.说说的东西,但是这个是有限制长度的,除了在文本输入框限制长度外,还要在旁边有一条提示还能输入多少个字的"友好提示". 1.文本框 ...

  9. linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档

    linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档 1.解压缩压缩命令 zip -p -r mymail-1026.zip mymail/ 解压命令 unzip mymai ...

  10. SpringBoot3整合SpringDoc实现在线接口文档

    写在前面 在现目前项目开发中,一般都是前后端分离项目.前端小姐姐负责开发前端,苦逼的我们负责后端开发 事实是一个人全干,在这过程中编写接口文档就显得尤为重要了.然而作为一个程序员,最怕的莫过于自己写文 ...