FTP - File Transfer Protocol

文件传输协议

文件传输协议(FTP)是互联网上最古老的协议之一。FTP 在 TCP/IP 协议栈的应用层内运行。因此,它与 HTTP 或 POP 处于同一层。这些协议也在浏览器或电子邮件客户端的支持下提供服务。文件传输协议还有专门的 FTP 程序。

假设我们想使用 FTP 协议将本地文件上传到服务器并下载其他文件。在FTP 连接中,会打开两个通道。首先,客户端和服务器通过 TCP 21 端口建立控制通道。客户端向服务器发送命令,服务器返回状态代码。然后,通信双方可以通过 TCP 端口 20 建立数据通道。该通道专门用于数据传输,协议会在此过程中监测错误。如果在传输过程中连接中断,则可在重新建立联系后恢复传输。

FTP 有主动和被动之分。在主动变体中,客户端通过 TCP 21 端口建立所述连接,从而通知服务器可通过哪个客户端端口传输其响应。但是,如果有防火墙保护客户端,服务器就无法回答,因为所有外部连接都被阻止了。为此,我们开发了被动模式。在这种模式下,服务器会公布一个端口,客户端可以通过该端口建立数据通道。由于这种方法是由客户端发起连接,因此防火墙不会阻止传输。

FTP 知道不同的命令和状态代码。并非所有这些命令都在服务器上一致实现。例如,客户端指示服务器端上传或下载文件、组织目录或删除文件。服务器在每种情况下都会使用状态代码进行响应,指示命令是否已成功执行。可以在此处找到可能的状态代码列表。

通常,我们需要凭据才能在服务器上使用 FTP。我们还需要知道,clear-text如果网络条件合适,FTP 是一种有时可以被嗅探的协议。然而,服务器也有可能提供anonymous FTP. 然后,服务器操作员允许任何用户通过 FTP 上传或下载文件,而无需使用密码。由于此类公共 FTP 服务器存在安全风险,因此用户的选择通常受到限制。

TFTP

Trivial File Transfer Protocol( TFTP) 比 FTP 更简单,在客户端和服务器进程之间执行文件传输。但是,它does not提供了 FTP 支持的用户身份验证和其他有价值的功能。此外,FTP 使用 TCP,而 TFTP 使用UDP,这使其成为不可靠的协议并导致其使用 UDP 辅助的应用层恢复。

例如,这反映在以下事实中:与 FTP 不同,TFTP 不需要用户身份验证。它不支持通过密码进行受保护的登录,并且仅根据操作系统中文件的读写权限设置访问限制。实际上,这导致 TFTP 仅在已与所有用户共享且可全局读写的目录和文件中运行。由于缺乏安全性,TFTP 与 FTP 不同,只能在本地和受保护的网络中使用。

让我们看一下几个TFTP命令:

命令

描述

connect

设置用于文件传输的远程主机和可选的端口。

get

将一个或一组文件从远程主机传输到本地主机。

put

将一个或一组文件从本地主机传输到远程主机。

quit

退出 tftp。

status

显示tftp的当前状态,包括当前传输模式(ascii或二进制)、连接状态、超时值等。

verbose

打开或关闭详细模式,该模式在文件传输期间显示附加信息。

与 FTP 客户端不同,TFTP它没有目录列表功能。

默认配置

基于 Linux 的发行版上最常用的 FTP 服务器之一是vsFTPd。vsFTPd 的默认配置可以在 中找到/etc/vsftpd.conf,并且默认情况下已经预定义了一些设置。强烈建议在虚拟机上安装 vsFTPd 服务器并仔细查看此配置。

安装vsFTPd

安装vsFTPd

vsFTPd 服务器只是我们可用的少数 FTP 服务器之一。

vsFTPd 配置文件

环境

描述

listen=NO

从 inetd 运行还是作为独立的守护进程运行?

listen_ipv6=YES

收听 IPv6 ?

anonymous_enable=NO

启用匿名访问吗?

local_enable=YES

允许本地用户登录吗?

dirmessage_enable=YES

当用户进入某些目录时显示活动目录消息?

use_localtime=YES

使用当地时间吗?

xferlog_enable=YES

激活上传/下载记录?

connect_from_port_20=YES

从端口 20 连接?

secure_chroot_dir=/var/run/vsftpd/empty

空目录的名称

pam_service_name=vsftpd

该字符串是 vsftpd 将使用的 PAM 服务的名称。

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

最后三个选项指定用于 SSL 加密连接的 RSA 证书的位置。

rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

ssl_enable=NO

另外,还有一个文件/etc/ftpusers我们也需要注意,这个文件是用来拒绝某些用户访问FTP服务的。在以下示例中,用户guestjohn、 和kevin不允许登录 FTP 服务,即使它们存在于 Linux 系统上。

FTP用户


危险环境

使用 vsFTPd,可以添加到匿名登录配置文件中的可选设置如下所示:

环境

描述

anonymous_enable=YES

允许匿名登录吗?

anon_upload_enable=YES

允许匿名上传文件吗?

anon_mkdir_write_enable=YES

允许匿名创建新目录?

no_anon_password=YES

不要向匿名者询问密码吗?

anon_root=/home/username/ftp

匿名目录。

write_enable=YES

允许使用 FTP 命令:STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 和 SITE?

使用标准 FTP 客户端(ftp),如果使用了上面所示的设置,我们就可以相应地访问 FTP 服务器并以匿名用户登录。

匿名登录

但是,要首先了解服务器设置,我们可以使用以下命令:

vsFTPd 状态

有些命令应该偶尔使用,因为这些命令将使服务器向我们显示更多可用于我们目的的信息。这些命令包括debugtrace

vsFTPd 详细输出

环境

描述

dirmessage_enable=YES

当他们第一次进入新目录时显示一条消息?

chown_uploads=YES

更改匿名上传文件的所有权?

chown_username=username

被授予匿名上传文件所有权的用户。

local_enable=YES

允许本地用户登录吗?

chroot_local_user=YES

将本地用户放入他们的主目录中?

chroot_list_enable=YES

使用将放置在其主目录中的本地用户列表?

环境

描述

hide_ids=YES

目录列表中的所有用户和组信息将显示为“ftp”。

ls_recurse_enable=YES

允许使用递归列表。

在下面的示例中,我们可以看到,如果hide_ids=YES存在该设置,服务的 UID 和 GUID 表示将被覆盖,使我们更难以识别这些文件的写入和上传权限。

递归列表

下载文件

我们还可以立即下载我们有权访问的所有文件和文件夹。如果 FTP 服务器在较大的文件夹结构中包含许多不同的文件,这尤其有用。然而,这可能会引起警报,因为公司中没有人通常希望一次下载所有文件和内容。

下载所有可用文件

下载完所有文件后,wget将创建一个以目标 IP 地址为名称的目录。所有下载的文件都存储在那里,然后我们可以在本地检查。

上传一个文件

通过该PUT命令,我们可以将当前文件夹中的文件上传到FTP服务器上。

Nmap FTP 脚本

所有 NSE 脚本都位于 中的 Pwnbox 上/usr/share/nmap/scripts/,但在我们的系统上,我们可以使用系统上的简单命令找到它们。

我们已经知道,FTP服务器通常运行在标准TCP端口21上,我们可以使用Nmap对其进行扫描。我们还针对我们的目标10.129.14.136使用版本扫描 ( -sV)、主动扫描 ( -A) 和默认脚本扫描 (-sC ) 。

服务交互

如果 FTP 服务器使用 TLS/SSL 加密运行,则看起来略有不同。因为那时我们需要一个可以处理 TLS/SSL 的客户端。为此,我们可以使用客户端openssl并与FTP服务器进行通信。使用的好处openssl是我们可以看到SSL证书,这也很有帮助。

这是因为 SSL 证书允许我们识别hostname,并且在大多数情况下还email address可以识别组织或公司的 。另外,如果公司在全球有多个地点,也可以为特定地点创建证书,也可以使用SSL证书来识别。

最后更新于

这有帮助吗?