hacktricks/network-services-pentesting/pentesting-ftp
2023-11-05 15:05:07 +00:00
..
ftp-bounce-attack.md Translated to Chinese 2023-08-03 19:12:22 +00:00
ftp-bounce-download-2oftp-file.md Translated to Chinese 2023-08-03 19:12:22 +00:00
README.md Translated ['network-services-pentesting/pentesting-ftp/README.md'] to c 2023-11-05 15:05:07 +00:00

21 - FTP渗透测试

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥

找到最重要的漏洞以便更快地修复它们。Intruder跟踪您的攻击面运行主动威胁扫描发现整个技术堆栈中的问题从API到Web应用程序和云系统。立即免费试用

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


基本信息

文件传输协议FTP是一种用于在计算机网络上在客户端和服务器之间传输计算机文件的标准网络协议。
它是一种
明文
协议,使用换行字符0x0d 0x0a,因此有时需要使用**telnetnc -C**进行连接。

**默认端口:**21

PORT   STATE SERVICE
21/tcp open  ftp

主动连接和被动连接

主动FTPFTP 客户端首先从其端口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命令**debugtrace来查看通信的进行方式**。

枚举

横幅抓取

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:

  1. Open a terminal or command prompt.
  2. 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 or ftp ftp.example.com.
  3. Enter your FTP username and password when prompted.
  4. Once connected, use the quote command to send the AUTH TLS command to the server. This command enables the TLS encryption.
  5. After sending the AUTH TLS command, use the quote command again to send the PBSZ 0 command. This command sets the protection buffer size to 0.
  6. Finally, use the quote command to send the PROT P command. This command sets the data channel protection level to private.
  7. You are now connected to the FTP server using the STARTTLS command.

使用 starttls 连接到 FTP

要使用 STARTTLS 命令连接到 FTP 服务器,请按照以下步骤操作:

  1. 打开终端或命令提示符。
  2. 使用 ftp 命令,后跟您要连接的 FTP 服务器的 IP 地址或域名。例如:ftp 192.168.0.1ftp ftp.example.com
  3. 在提示时输入您的 FTP 用户名和密码。
  4. 连接成功后,使用 quote 命令向服务器发送 AUTH TLS 命令。此命令启用 TLS 加密。
  5. 发送 AUTH TLS 命令后,再次使用 quote 命令发送 PBSZ 0 命令。此命令将保护缓冲区大小设置为 0。
  6. 最后,使用 quote 命令发送 PROT P 命令。此命令将数据通道保护级别设置为私有。
  7. 现在,您已经使用 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

您可以使用HELPFEAT命令来获取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

如果您的用户名/密码包含特殊字符,可以使用以下命令

wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/

一些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服务器以扫描端口。

您还可以滥用此行为使FTP服务器与其他协议交互。您可以上传包含HTTP请求的文件并使易受攻击的FTP服务器将其发送到任意HTTP服务器也许是为了添加新的管理员用户?甚至上传FTP请求并使易受攻击的FTP服务器从不同的FTP服务器下载文件。
理论很简单:

  1. **将请求(在文本文件中)上传到易受攻击的服务器。**请记住如果您想与其他HTTP或FTP服务器通信您需要更改带有0x0d 0x0a的行。
  2. 使用REST X避免发送不想发送的字符(也许要上传请求到文件中,您需要在开头放置一些图像头部)
  3. 使用PORT连接到任意服务器和服务
  4. 使用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 🎥