本篇文章将专注于详细介绍在网络安全渗透领域需要学习的网络协议内容,以及这些网络协议的脆弱点。
FTP
File Transfer Protocol (FTP) 是Internet上最古老的协议之一,在TCP/IP协议栈的应用层中运行,与HTTP和POP处于同一层。这些协议还在浏览器或电子邮件客户端的程序下工作,以执行其服务。文件传输协议也有特殊的FTP程序。
假设我们希望将本地文件上传到服务器,并使用FTP协议下载其他文件。在FTP连接中,打开两个通道。首先,客户端和服务器通过 `TCP port 21` 建立控制通道。客户端向服务器发送命令,服务器返回状态码。然后通信双方可以通过 `TCP port 20` 建立数据通道。该通道专门用于数据传输,协议在此过程中监视错误。如果在传输过程中断开了连接,则可以在重新建立联系后恢复传输。
FTP中有两种模式,active和passive。在传输数据中,客户端通过TCP端口21建立连接,从而通知服务器服务器可以通过哪个客户端端口传输其响应。但是,如果防火墙保护客户端,则服务器无法响应,因为所有外部连接都被阻塞。为此,开发了 `passive mode` 。在这里,服务器宣布一个端口,客户机可以通过该端口建立数据通道。由于客户端以这种方式发起连接,因此防火墙不会阻止传输。
FTP可以识别不同的命令和状态码。并非所有这些命令都在服务器上一致地实现。例如,客户端指示服务器端上传或下载文件、组织目录或删除文件。在每种情况下,服务器都会响应一个状态码,该状态码指示命令是否成功实现。
TFTP
`Trivial File Transfer Protocol (TFTP) 比FTP更简单,用于在客户端和服务端进程之间传输文件。但是这个协议不提供FTP所支持的用户身份验证和其他类型的功能。此外,FTP使用的是TCP,而TFTP使用的是UDP,这使得它是一个不可靠的协议,因此 TFTP 需要在应用层实现额外的恢复机制(如超时重传、ACK)来保证文件传输的完整性和可靠性。
例如,与FTP不同,TFTP不需要用户的身份验证,这就反映了这一点。它不支持通过密码保护登录,并且仅根据操作系统中文件的读写权限设置访问限制。实际上,这会导致TFTP只在目录和已与所有用户共享的文件中运行,并且可以全局读写。由于缺乏安全性,TFTP与FTP不同,只能在本地和受保护的网络中使用。
`TFTP` 的几个命令:
- `connect`:为文件传输设置远程主机和可选端口
- `get`:将一个或一组文件从远程主机传输到本地主机
- `put`:将一个或一组文件从本地主机传输到远程主机
- `quit`:推出tftp
- `status`:显示tftp的当前状态,包括当前传输状态(ascii或二进制)、连接状态、超时值等。
- `verbose`:打开或关闭详细模式,该模式在文件传输过程中显示附加信息。
与FTP客户端不同,TFTP没有目录列表功能。
默认配置
在基于linux的发行版中最常用的FTP服务器之一是vsFTPd。vsFTPd的默认配置可以在 `/etc/vsftpd.conf` 中找到,并且默认情况下已经预定义了一些设置。强烈建议在VM上安装vsFTPd服务器,并仔细查看此配置。
查看vsFTPd配置文件 cat /etc/vsftpd.conf | grep -v "#"
┌──(kali㉿kali)-[~]
└─$ sudo apt install vsftpd
...
...
...
┌──(kali㉿kali)-[~]
└─$ cat /etc/vsftpd.conf | grep -v "#"
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
设置 | 描述 |
---|---|
listen=NO | 如果设置为 如果设置为 |
listen_ipv6=YES | 表示 FTP 服务器是否将监听 IPv6 地址,并接受来自 IPv6 客户端的连接。 |
dirmessage_enable=YES | 是否启用目录消息文件的选项 启用目录消息功能,当用户进入某个目录时,FTP 服务器会自动读取该目录下的特殊消息文件(如 禁用此功能,用户进入目录时不会收到任何目录消息。 |
anonymous_enable=NO | 是否允许匿名访问 |
local_enable=YES | 是否允许本地用户登陆 |
use_localtime=YES | 是否使用当地时间 |
xferlog_enable=YES | 用于启用传输日志功能。当此选项设置为 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 |
当提到 PAM 服务器 时,通常是指一个服务器配置了 PAM,用于管理对其服务(如 FTP、SSH、系统登录等)的认证过程。PAM 本身并不是一个独立的服务器软件,而是一个认证框架,负责调用各种认证模块。
PAM 服务器的认证可以结合以下方式:
- 本地认证:检查本地文件(如
/etc/passwd
和/etc/shadow
)来验证用户身份。 - 远程认证:通过 LDAP、Kerberos、RADIUS 等协议向外部服务器验证用户。
- 多因子认证(MFA):结合硬件令牌、短信验证、Google Authenticator 等模块。
Inetd模式 与 独立守护进程模式
-
inetd
模式:inetd
是一个超级守护进程,负责监听多个服务的端口并按需启动对应的服务程序。- 当有 FTP 请求时,
inetd
会启动 FTP 服务程序来处理请求。 - 这种模式适用于低流量的场景,因为服务程序在没有请求时不会常驻内存。
-
独立守护进程模式:
- 当设置为
listen=YES
,FTP 服务会作为独立的后台进程运行。 - 它自己监听特定端口(例如 21 端口)并处理所有的 FTP 请求。
- 这种模式适用于高流量的场景,因为服务一直在运行,响应更快。
- 当设置为
此外,还有一个名为 `/etc/ftpusers` 的文件,我们也需要注意,因为这个文件用于拒绝某些用户访问FTP服务。以“ `guest` ”、“ `john` ”、“ `kevin` ”用户为例,说明该用户在Linux系统中存在,但不允许登录FTP服务。
┌──(kali㉿kali)-[~]
└─$ cat /etc/ftpusers
# /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).
root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
nobody
高危的设置
我们可以在每个FTP服务器上进行许多不同的安全相关设置。这些测试可以有各种用途,例如测试通过防火墙的连接、测试路由和身份验证机制。其中一种身份验证机制是 `anonymous` 用户。这通常用于允许内部网络上的每个人共享文件和数据,而无需访问彼此的计算机。使用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命令:STOP、DELE、RNFR、RNTO、MKD、RMD、APPE、SITE |
使用标准FTP客户端( ftp ),如果使用了上面所示的设置,我们可以相应地访问FTP服务器并使用匿名用户登录。匿名帐户的使用可以发生在参与者都是已知的内部环境和基础设施中。对这类服务的访问可以临时设置,也可以通过设置加速文件交换。
只要我们连接到vsFTPd服务器,就会显示 `response code 220` ,并显示FTP服务器的横幅。通常这个横幅包含 `service` 甚至 `version` 的描述。它还告诉我们FTP服务器是什么类型的系统。FTP服务器最常见的配置之一是允许 `anonymous` 访问,这不需要合法凭据,但提供对某些文件的访问。即使我们不能下载它们,有时仅仅列出内容就足以产生进一步的想法,并记录下将在另一种途径中帮助我们的信息。