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服务的。在以下示例中,用户guest、john、 和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 状态
有些命令应该偶尔使用,因为这些命令将使服务器向我们显示更多可用于我们目的的信息。这些命令包括debug和trace。
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证书来识别。
最后更新于
这有帮助吗?