16 KiB
21 - FTP渗透测试
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
- 你在一家网络安全公司工作吗?想要在HackTricks中宣传你的公司吗?或者你想要获取PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或者关注我在推特上的🐦@carlospolopm。
- 通过向hacktricks仓库和hacktricks-cloud仓库提交PR来分享你的黑客技巧。
找到最重要的漏洞,以便更快地修复它们。Intruder跟踪您的攻击面,运行主动威胁扫描,发现整个技术堆栈中的问题,从API到Web应用程序和云系统。立即免费试用。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
基本信息
文件传输协议(FTP)是一种用于在计算机网络上在客户端和服务器之间传输计算机文件的标准网络协议。
它是一种明文协议,使用换行字符0x0d 0x0a
,因此有时需要使用**telnet
或nc -C
**进行连接。
**默认端口:**21
PORT STATE SERVICE
21/tcp open ftp
主动连接和被动连接
在主动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
来查看通信的进行方式**。
枚举
横幅抓取
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
使用 starttls 连接到 FTP
To connect to an FTP server using the STARTTLS command, follow these steps:
- Open a terminal or command prompt.
- Use the
ftp
command followed by the IP address or domain name of the FTP server you want to connect to. For example:ftp 192.168.0.1
orftp ftp.example.com
. - Enter your FTP username and password when prompted.
- Once connected, use the
quote
command to send theAUTH TLS
command to the server. This command enables the TLS encryption. - After sending the
AUTH TLS
command, use thequote
command again to send thePBSZ 0
command. This command sets the protection buffer size to 0. - Finally, use the
quote
command to send thePROT P
command. This command sets the data channel protection level to private. - You are now connected to the FTP server using the STARTTLS command.
使用 starttls 连接到 FTP
要使用 STARTTLS 命令连接到 FTP 服务器,请按照以下步骤操作:
- 打开终端或命令提示符。
- 使用
ftp
命令,后跟您要连接的 FTP 服务器的 IP 地址或域名。例如:ftp 192.168.0.1
或ftp ftp.example.com
。 - 在提示时输入您的 FTP 用户名和密码。
- 连接成功后,使用
quote
命令向服务器发送AUTH TLS
命令。此命令启用 TLS 加密。 - 发送
AUTH TLS
命令后,再次使用quote
命令发送PBSZ 0
命令。此命令将保护缓冲区大小设置为 0。 - 最后,使用
quote
命令发送PROT P
命令。此命令将数据通道保护级别设置为私有。 - 现在,您已经使用 STARTTLS 命令成功连接到 FTP 服务器。
lftp
lftp :~> set ftp:ssl-force true
lftp :~> set ssl:verify-certificate no
lftp :~> connect 10.10.10.208
lftp 10.10.10.208:~> login
Usage: login <user|URL> [<pass>]
lftp 10.10.10.208:~> login username Password
未授权枚举
使用 nmap
sudo nmap -sV -p21 -sC -A 10.10.10.10
您可以使用HELP
和FEAT
命令来获取FTP服务器的一些信息:
HELP
214-The following commands are recognized (* =>'s unimplemented):
214-CWD XCWD CDUP XCUP SMNT* QUIT PORT PASV
214-EPRT EPSV ALLO* RNFR RNTO DELE MDTM RMD
214-XRMD MKD XMKD PWD XPWD SIZE SYST HELP
214-NOOP FEAT OPTS AUTH CCC* CONF* ENC* MIC*
214-PBSZ PROT TYPE STRU MODE RETR STOR STOU
214-APPE REST ABOR USER PASS ACCT* REIN* LIST
214-NLST STAT SITE MLSD MLST
214 Direct comments to root@drei.work
FEAT
211-Features:
PROT
CCC
PBSZ
AUTH TLS
MFF modify;UNIX.group;UNIX.mode;
REST STREAM
MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
UTF8
EPRT
EPSV
LANG en-US
MDTM
SSCN
TVFS
MFMT
SIZE
211 End
STAT
#Info about the FTP server (version, configs, status...)
匿名登录
匿名 : 匿名
匿名 :
ftp : ftp
ftp <IP>
>anonymous
>anonymous
>ls -a # List all files (even hidden) (yes, they could be hidden)
>binary #Set transmission to binary instead of ascii
>ascii #Set transmission to ascii instead of binary
>bye #exit
暴力破解
在这里,您可以找到一个很好的默认ftp凭据列表:https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
自动化
nmap默认使用**-sC**选项或以下命令执行匿名登录和反弹FTP检查:
nmap --script ftp-* -p 21 <ip>
浏览器连接
您可以使用浏览器(如Firefox)使用类似以下URL的方式连接到FTP服务器:
ftp://anonymous:anonymous@10.10.10.98
请注意,如果一个Web应用程序直接将用户控制的数据发送到FTP服务器,您可以发送双重URL编码%0d%0a
(在双重URL编码中为%250d%250a
)字节,并使FTP服务器执行任意操作。其中一个可能的任意操作是从用户控制的服务器下载内容,执行端口扫描或尝试与其他基于明文的服务(如HTTP)进行通信。
从FTP下载所有文件
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
一些FTP命令
USER username
PASS password
HELP
服务器指示支持的命令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
FTP反弹攻击
一些FTP服务器允许使用PORT命令。该命令可用于指示服务器您希望连接到其他FTP服务器的某个端口。然后,您可以使用此功能通过FTP服务器扫描主机的哪些端口是开放的。
您还可以滥用此行为使FTP服务器与其他协议交互。您可以上传包含HTTP请求的文件,并使易受攻击的FTP服务器将其发送到任意HTTP服务器(也许是为了添加新的管理员用户?),甚至上传FTP请求并使易受攻击的FTP服务器从不同的FTP服务器下载文件。
理论很简单:
- **将请求(在文本文件中)上传到易受攻击的服务器。**请记住,如果您想与其他HTTP或FTP服务器通信,您需要更改带有
0x0d 0x0a
的行 - 使用
REST X
避免发送您不想发送的字符(也许要上传请求到文件中,您需要在开头放置一些图像头) - 使用
PORT
连接到任意服务器和服务 - 使用
RETR
将保存的请求发送到服务器。
由于连接不足以使用RETR
发送数据,这很可能会引发类似Socket not writable的错误。尝试避免此错误的建议是:
- 如果要发送HTTP请求,请将相同的请求连续发送一次,直到至少达到**~0.5MB**。像这样:
{% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %}
- 尝试使用与协议相关的“垃圾”数据填充请求(与FTP通信时,可能只是垃圾命令或重复
RETR
指令以获取文件) - 只是使用大量空字符或其他字符填充请求(分行或不分行)
无论如何,这里有一个关于如何滥用此功能使FTP服务器从不同的FTP服务器下载文件的旧示例。
Filezilla服务器漏洞
FileZilla通常会将FileZilla-Server(端口14147)的管理服务绑定到本地。如果您可以从您的计算机创建一个隧道以访问此端口,您可以使用空密码连接到它,并为FTP服务创建一个新用户。
配置文件
ftpusers
ftp.conf
proftpd.conf
vsftpd.conf
后渗透
vsFTPd的默认配置可以在/etc/vsftpd.conf
中找到。在这里,你可以找到一些危险的设置:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_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
ftp
port:21
找到最重要的漏洞,以便更快地修复它们。Intruder跟踪你的攻击面,运行主动威胁扫描,发现整个技术栈中的问题,从API到Web应用和云系统。立即免费试用。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
HackTricks自动命令
Protocol_Name: FTP #Protocol Abbreviation if there is one.
Port_Number: 21 #Comma separated if there is more than one.
Protocol_Description: File Transfer Protocol #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for FTP
Note: |
Anonymous Login
-bi <<< so that your put is done via binary
wget --mirror 'ftp://ftp_user:UTDRSCH53c"$6hys@10.10.10.59'
^^to download all dirs and files
wget --no-passive-ftp --mirror 'ftp://anonymous:anonymous@10.10.10.98'
if PASV transfer is disabled
https://book.hacktricks.xyz/pentesting/pentesting-ftp
Entry_2:
Name: Banner Grab
Description: Grab FTP Banner via telnet
Command: telnet -n {IP} 21
Entry_3:
Name: Cert Grab
Description: Grab FTP Certificate if existing
Command: openssl s_client -connect {IP}:21 -starttls ftp
Entry_4:
Name: nmap ftp
Description: Anon login and bounce FTP checks are performed
Command: nmap --script ftp-* -p 21 {IP}
Entry_5:
Name: Browser Connection
Description: Connect with Browser
Note: ftp://anonymous:anonymous@{IP}
Entry_6:
Name: Hydra Brute Force
Description: Need Username
Command: hydra -t 1 -l {Username} -P {Big_Passwordlist} -vV {IP} ftp
Entry_7:
Name: consolesless mfs enumeration ftp
Description: FTP enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit'
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在 HackTricks 中宣传你的公司吗?或者你想要获取最新版本的 PEASS 或下载 HackTricks 的 PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获取官方 PEASS & HackTricks 商品
- 加入 💬 Discord 群组 或 Telegram 群组,或者关注我在推特上的🐦@carlospolopm。
- 通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。