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. Vue cli介绍

    Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供: 通过 @vue/cli 实现的交互式的项目脚手架. 通过 @vue/cli + @vue/cli-service-global ...

  2. 在 Inno Setup iss 打包过程 中检测 .NET 6 / .net 5 / .NET Core 运行环境是否存在或已安装

    为了将 .NET 5 / .NET Core 应用程序部署到客户机,我们可以编写 Inno Setup 代码来判断客户机是否安装了必要的运行环境..NET 官方仓库 中提供了一个名为 NetCoreC ...

  3. C# 关于图片转ICO的代码整理(无损,不需要第三方类库)

    概述(Overview) 感觉网上文章整理的不全,我这边做个专栏,专门做这个事情吧,节省大家搜索.筛选.整理的时间精力.有用可以点个赞.引用本文章请注明出处,谢谢. (I feel that the ...

  4. Swift Copy On Write 多线程下面的资源竞争

    Swift中的String.Array.Dictionary等容器类型默认实现了写时复制,这个操作在多线程下面可能会带来错误 https://bugs.swift.org/browse/SR-6543

  5. 利用instruments工具查看其它app的性能

    1.随便建立一个新的工程文件,profile,进入instruments 2.选中activity,可以看到所有进程,以及其它进程的CPU占用情况

  6. GeoGebra作圆的切线

    参考文档:<GeoGebra入门教程>唐家军 1. 目的 使用GeoGebra作出过一点的圆的切线. 2. 构造过程 文档种的描述如下: 按照上述构造过程,在输入条形框中依次输入上面的指令 ...

  7. C#.NET Winform承载WCF RESTful API (App.config 方式)

    1.新建一个名为"WindowsForms承载WCF"的WINFORM程序. 2.在解决方案里添加一个"WCF 服务库"的项目,名为"WcfYeah& ...

  8. @RequestMapping 注解用在类上面有什么作用?

    是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径.

  9. 部署jar项目服务命令

    部署jar项目服务命令首先使用jenkins打包jar history | grep java 查看ps aux | grep 服务关键字关闭进程,否则启动的时候报错:java.net.BindExc ...

  10. Linux curl支持http/https方法,Curl请求示例语法

    Curl请求示例curl -X GET "http://<host:port>/api/1/test/get?test=<value>&app_id=< ...