文件傳輸協議(FTP)是一種標準的網絡協議,用於在計算機網絡上的客戶端和服務器之間傳輸計算機文件。 它是一個純文本協議,使用**新行字符 ** 0x0d0x0a 所以我們有時候需要使用 ** 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。
在Passive FTP中,客戶端發起從它的N 端口到FTP Server 的21 端口的控制連接。在此之後,客戶端發出一個passv 命令。服務器然後向客戶端發送其端口號 M 之一。客戶端啟動從其端口 P 到FTP 服務器的端口 M的數據連接。
來源: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
連接調試FTP命令 debug和 trace 可以用來查看通信是如何發生的。
枚舉Banner 抓取nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -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
#FTP服務器的信息(版本,配置,狀態…)
anonymous : anonymous**anonymous : ftp : ftp
ftp <IP>
>anonymous
>anonymous
>ls -a # 列出所有文件(甚至隱藏)(是的,它們可能被隱藏)
>binary #將傳輸方式設置為二進制而不是Ascii
>ascii #將傳輸設置為Ascii而不是二進制
>bye #退出
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 #下載全部
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #下載全部
USER username
PASS password
HELP服務器顯示支持哪些命令
**PORT127,0,0,1,0,80**這將指示FTP服務器與端口80中的IP 127.0.0.1建立連接(您需要將第5個字符設為「0」,第6個字符設為十進制端口,或者使用第5和第6個字符表示十六進制端口)。
**EPRT|2|127.0.0.1|80|**這將指示FTP服務器與端口80中的IP 127.0.0.1建立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 服務器將通過該連接發送指示的文件
REST6這將指示服務器下次使用它發送RETR內容時應該從第 6 個字節開始。
TYPE i設置傳輸為二進制
PASV這將打開一個被動連接,並指示用戶可以連接
PUT/tmp/file.txt將指定的文件上傳到 FTP
[
]
FTP反彈 attack有些FTP服務器允許使用PORT命令。此命令可用於向服務器指示您希望通過某些端口連接到其他FTP服務器。然後,您可以使用該命令通過FTP服務器掃描主機的哪些端口是開放的。
您還可以濫用此行為使 FTP 服務器與其他協議交互。您可以上傳一個包含 HTTP 請求的文件,*並讓易受攻擊的 FTP 服務器將其發送到任意 HTTP 服務器(也許是為了添加一個新的管理員用戶?*),或者甚至上傳一個 FTP 請求,並讓易受攻擊的 FTP 服務器下載一個不同的文件FTP服務器。 理論很簡單:
將請求(在文本文件中)上傳到易受攻擊的服務器。請記住,如果您想與另一個 HTTP 或 FTP 服務器通信,您需要更改行0x0d0x0a
用於避免發送您不想發送的字符(也許將請求上傳到您需要在開頭放置一些圖像標題的文件中)REST X
用於連接到任意服務器和服務**PORT**
用於將保存的請求發送到服務器。RETR
這很可能會引發類似Socket not writable*的錯誤,因為連接持續時間不足以發送數據 。儘量避免的建議是: RETR
如果您要發送 HTTP 請求,**請一個接一個地發送相同的請求,直到至少\~0.5MB
嘗試用相對於協議的「垃圾」數據填充請求(與FTP通信可能只是垃圾命令或重複'RETR'指令來獲取文件)
用大量空字符或其他字符填充請求
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
ftp
port:21
Protocol_Name: FTP #協議縮寫(如果有的話)。
Port_Number: 21 #如果有多個,則用逗號分隔。
Protocol_Description: File Transfer Protocol #協議縮寫
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
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'
![](https://imageproxy.pixnet.cc/imgproxy?url=https://drbanana.ml/img/68747470733a2f2f6d6d62697a2e717069632e636e2f6d6d62697a5f6769662f50446454506963736d68346759574c316f6576434f5a4950364e767769636f44794e4e344e6f5345675149726536684f5056776d76426d4677474559413057636e64794a717547435372494a45776c556e46494a4b526c672f3634303f77785f666d743d676966.webp)
推薦一個靶場,靶場地址:https://yunjing.ichunqiu.com/ranking/summary?id=BzMFNFpvUDU 從web到內網再到域的靶場環境都全,且出題的思路很好,感興趣的可以去玩玩