close
基本信息

文件傳輸協議(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 #獲取證書(如有)

使用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

Unauth枚舉

使用 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 #下載全部

一些FTP命令

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通常綁定到FileZilla-Server (端口 14147)的本地管理服務。如果您可以從您的機器創建一個隧道來訪問此端口,您可以使用空白密碼*連接到它並為 FTP 服務創建一個新用戶。

配置文件

ftpusers

ftp.conf

proftpd.conf

vsftpd.conf

Post-Exploitation

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

自動化

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://yunjing.ichunqiu.com/ranking/summary?id=BzMFNFpvUDU 從web到內網再到域的靶場環境都全,且出題的思路很好,感興趣的可以去玩玩

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()