21 - Pentesting FTP
Try Hard Security Group

基本信息
文件传输协议(FTP) 用作服务器和客户端之间在计算机网络上进行文件传输的标准协议。
它是一种明文协议,使用换行字符 0x0d 0x0a,因此有时您需要使用 telnet 或 nc -C 进行连接。
默认端口: 21
连接活动和被动
在主动FTP中,FTP 客户端首先从其端口N向FTP服务器的命令端口 - 端口21发起控制连接。然后,客户端监听端口N+1并将端口N+1发送给FTP服务器。FTP 服务器然后从其端口M向FTP客户端的端口N+1发起数据连接。
但是,如果FTP客户端设置了控制外部数据连接的防火墙,则主动FTP可能会有问题。而对此的一个可行解决方案是被动FTP。
在被动FTP中,客户端从其端口N向FTP服务器的端口21发起控制连接。之后,客户端发出一个passv命令。服务器然后向客户端发送其端口号M。然后客户端从其端口P到FTP服务器的端口M发起数据连接。
来源:https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
连接调试
FTP命令**debug和trace可用于查看通信的发生方式**。
枚举
横幅抓取
使用starttls连接到FTP
未授权枚举
使用 nmap
你可以使用命令 HELP 和 FEAT 来获取FTP服务器的一些信息:
匿名登录
anonymous : anonymous anonymous : ftp : ftp
在这里,您可以找到一个包含默认ftp凭据的好列表:https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
自动化
默认情况下,nmap使用**-sC**选项执行匿名登录和反弹FTP检查:
浏览器连接
您可以使用浏览器(如Firefox)使用以下URL连接到FTP服务器:
注意,如果一个web应用程序直接将用户控制的数据发送到FTP服务器,你可以发送双重URL编码%0d%0a(在双重URL编码中为%250d%250a)字节,使FTP服务器执行任意操作。其中一种可能的任意操作是从用户控制的服务器下载内容,执行端口扫描或尝试与其他基于明文的服务(如http)通信。
从FTP下载所有文件
如果您的用户名/密码包含特殊字符,可以使用以下命令:
一些FTP命令
USER usernamePASS passwordHELP服务器指示支持哪些命令PORT 127,0,0,1,0,80这将指示FTP服务器与IP 127.0.0.1的80端口建立连接(需要将第5个字符设为"0",第6个字符设为十进制端口,或使用第5和第6个字符表示十六进制端口)。EPRT |2|127.0.0.1|80|这将指示FTP服务器与IP 127.0.0.1的80端口建立TCP连接(由"2"指示)。此命令支持IPv6。LIST这将发送当前文件夹中的文件列表LIST -R递归列出(如果服务器允许)APPE /path/something.txt这将指示FTP将从被动连接或PORT/EPRT连接接收的数据存储到文件中。如果文件名存在,将追加数据。STOR /path/something.txt类似于APPE,但会覆盖文件STOU /path/something.txt类似于APPE,但如果存在则不执行任何操作RETR /path/to/file必须建立一个被动或端口连接。然后,FTP服务器将通过该连接发送指定的文件REST 6这将指示服务器在下次使用RETR发送内容时从第6个字节开始。TYPE i设置传输为二进制PASV这将打开一个被动连接,并指示用户可以连接到哪里PUT /tmp/file.txt将指定文件上传到FTP

FTPBounce攻击
一些FTP服务器允许使用命令PORT。此命令可用于指示服务器您希望连接到其他FTP服务器的某个端口。然后,您可以使用此方法通过FTP服务器扫描主机的哪些端口是开放的。
您还可以滥用此行为使FTP服务器与其他协议交互。您可以上传包含HTTP请求的文件,并使易受攻击的FTP服务器将其发送到任意HTTP服务器(也许添加新的管理员用户?),或者上传FTP请求并使易受攻击的FTP服务器下载不同FTP服务器的文件。 理论很简单:
**将请求(放在文本文件中)上传到易受攻击的服务器。**请记住,如果要与另一个HTTP或FTP服务器通信,需要使用
0x0d 0x0a更改行。使用
REST X避免发送不想发送的字符(也许为了将请求上传到文件中,您需要在开头放一些图像标头)使用
PORT连接到任意服务器和服务使用
RETR将保存的请求发送到服务器。
这很可能会引发类似_Socket not writable_的错误,因为连接不足以使用RETR发送数据。尝试避免这种情况的建议包括:
如果要发送HTTP请求,重复相同请求直到至少**~0.5MB**。就像这样:
尝试使用与协议相关的“垃圾”数据填充请求(与FTP通信可能只是垃圾命令或重复
RETR指令以获取文件)只是使用大量空字符或其他字符填充请求(分行或不分行)
无论如何,这里有一个旧示例,说明如何滥用此功能使FTP服务器从不同FTP服务器下载文件。
Filezilla服务器漏洞
FileZilla通常将FileZilla-Server(端口14147)绑定到本地的管理服务。如果您可以从您的计算机创建一个隧道以访问此端口,您可以使用空密码连接到它,并为FTP服务创建一个新用户。
配置文件
后渗透
vsFTPd的默认配置可以在/etc/vsftpd.conf中找到。在这里,您可能会发现一些危险的设置:
anonymous_enable=YESanon_upload_enable=YESanon_mkdir_write_enable=YESanon_root=/home/username/ftp- 匿名用户的目录。chown_uploads=YES- 更改匿名上传文件的所有权chown_username=username- 被授予匿名上传文件所有权的用户local_enable=YES- 允许本地用户登录no_anon_password=YES- 不要求匿名用户输入密码write_enable=YES- 允许命令:STOR、DELE、RNFR、RNTO、MKD、RMD、APPE和SITE
Shodan
ftpport:21
Try Hard Security Group

HackTricks自动命令
最后更新于