从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家) ! 您在网络安全公司 工作吗? 想要看到您的公司在 HackTricks 中做广告 吗? 或者想要访问PEASS 的最新版本或下载 HackTricks 的 PDF 吗? 请查看订阅计划 !
Try Hard Security Group
基本信息
文件传输协议(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 < I P > 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
使用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...)
匿名登录
anonymous : anonymous
anonymous :
ftp : ftp
复制 ftp < I P >
> 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 < i p >
浏览器连接
您可以使用浏览器(如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命令
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 。
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个字节开始。
PASV
这将打开一个被动连接,并指示用户可以连接到哪里
PUT /tmp/file.txt
将指定文件上传到FTP
FTPBounce攻击
一些FTP服务器允许使用命令PORT。此命令可用于指示服务器您希望连接到其他FTP服务器的某个端口。然后,您可以使用此方法通过FTP服务器扫描主机的哪些端口是开放的。
在这里了解如何滥用FTP服务器来扫描端口。
您还可以滥用此行为使FTP服务器与其他协议交互。您可以上传包含HTTP请求的文件 ,并使易受攻击的FTP服务器将其发送到任意HTTP服务器 (也许添加新的管理员用户? ),或者上传FTP请求并使易受攻击的FTP服务器下载不同FTP服务器的文件。
理论很简单:
**将请求(放在文本文件中)上传到易受攻击的服务器。**请记住,如果要与另一个HTTP或FTP服务器通信,需要使用0x0d 0x0a
更改行。
使用 REST X
避免发送不想发送的字符 (也许为了将请求上传到文件中,您需要在开头放一些图像标头)
这很可能会引发类似_Socket not writable _的错误,因为连接不足以使用RETR
发送数据。尝试避免这种情况的建议包括:
如果要发送HTTP请求,重复相同请求 直到至少**~0.5MB**。就像这样:
尝试使用与协议相关的“垃圾”数据填充请求(与FTP通信可能只是垃圾命令或重复RETR
指令以获取文件)
只是使用大量空字符或其他字符填充请求(分行或不分行)
无论如何,这里有一个旧示例,说明如何滥用此功能使FTP服务器从不同FTP服务器下载文件。
Filezilla服务器漏洞
FileZilla 通常将FileZilla-Server (端口14147)绑定到本地 的管理服务 。如果您可以从您的计算机 创建一个隧道 以访问此端口,您可以使用空密码 连接到它 ,并为FTP服务创建 一个新用户 。
配置文件
复制 ftpusers
ftp.conf
proftpd.conf
vsftpd.conf
后渗透
vsFTPd的默认配置可以在/etc/vsftpd.conf
中找到。在这里,您可能会发现一些危险的设置:
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
Try Hard Security Group
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'
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert) ! 您在网络安全公司 工作吗?想要看到您的公司在HackTricks中宣传 吗?或者想要获取PEASS的最新版本或下载HackTricks的PDF 吗?请查看订阅计划 !