.. | ||
ftp-bounce-attack.md | ||
ftp-bounce-download-2oftp-file.md | ||
README.md |
21 - FTPのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- **ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリ**にPRを提出してください。
基本情報
ファイル転送プロトコル(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 サーバーは、FTPクライアントのポートN+1へのデータ接続を開始します。
ただし、FTPクライアントに外部からの着信データ接続を制御するファイアウォールが設定されている場合、アクティブFTPは問題となる場合があります。そのため、パッシブFTPは実現可能な解決策です。
パッシブFTPでは、クライアントはポートNからFTPサーバーのポート21への制御接続を開始します。その後、クライアントはpassvコマンドを発行します。サーバーはクライアントに自身のポート番号Mのいずれかを送信します。そして、クライアントは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 Starttls, 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
- Enter your FTP username and password when prompted.
- Once connected, use the
quote
command to send theAUTH TLS
command to the server. This will initiate the Starttls negotiation. For example:quote AUTH TLS
- If the server supports Starttls, it will respond with a message indicating that the TLS negotiation was successful.
- After the TLS negotiation, you can use the usual FTP commands to interact with the server.
Note: Some FTP clients may have a specific command or option to enable Starttls. Refer to the documentation of your FTP client for more information.
Starttlsを使用してFTPに接続する方法
Starttlsを使用してFTPサーバーに接続するには、以下の手順に従ってください。
- ターミナルまたはコマンドプロンプトを開きます。
ftp
コマンドの後に接続したいFTPサーバーのIPアドレスまたはドメイン名を入力します。例:ftp 192.168.0.1
- プロンプトが表示されたら、FTPのユーザー名とパスワードを入力します。
- 接続が確立したら、
quote
コマンドを使用してAUTH TLS
コマンドをサーバーに送信します。これにより、Starttlsの交渉が開始されます。例:quote AUTH TLS
- サーバーがStarttlsをサポートしている場合、TLSの交渉が成功したことを示すメッセージが返されます。
- TLSの交渉後、通常のFTPコマンドを使用してサーバーとやり取りすることができます。
注意:一部の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
非認証列挙
nmapを使用してください。
sudo nmap -sV -p21 -sC -A 10.10.10.10
FTPサーバーの情報を取得するために、HELP
とFEAT
コマンドを使用することができます。
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 <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
自動化
匿名ログインとバウンスFTPチェックは、nmapの**-sC**オプションまたは次のコマンドでデフォルトで実行されます:
nmap --script ftp-* -p 21 <ip>
ブラウザ接続
ブラウザ(Firefoxなど)を使用して、次のようなURLを使用してFTPサーバーに接続することができます。
ftp://anonymous:anonymous@10.10.10.98
注意してください、もしウェブアプリケーションがユーザーによって制御されたデータを直接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 ユーザー名
PASS パスワード
HELP
サーバーはサポートされているコマンドを示しますPORT 127,0,0,1,0,80
これにより、FTPサーバーにIPアドレス127.0.0.1のポート80で接続するよう指示します(5番目の文字を「0」、6番目を10進数でポートを表すか、5番目と6番目を使用してポートを16進数で表す)。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接続から受信したデータをファイルに保存するようFTPに指示します。ファイル名が存在する場合、データを追加します。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にアップロードします
FTPBounce攻撃
一部のFTPサーバーでは、PORTコマンドを許可しています。このコマンドを使用して、FTPサーバーを介してホストのどのポートが開いているかをスキャンすることができます。
ここでFTPサーバーを悪用してポートをスキャンする方法を学びます。
また、この動作を悪用してFTPサーバーを他のプロトコルと対話させることもできます。HTTPリクエストを含むファイルをアップロードし、脆弱なFTPサーバーにそれを任意のHTTPサーバーに送信させる(新しい管理者ユーザーを追加するために?)か、FTPリクエストをアップロードし、脆弱なFTPサーバーに別のFTPサーバーからファイルをダウンロードさせることができます。
理論は簡単です:
- 脆弱なサーバーにリクエスト(テキストファイル内)をアップロードします。 別のHTTPまたはFTPサーバーと通信する場合は、
0x0d 0x0a
で行を変更する必要があります。 - 送信したくない文字を送信しないようにするために、
REST X
を使用します(おそらくリクエストをファイル内にアップロードするために、最初にいくつかのイメージヘッダを追加する必要があるかもしれません)。 PORT
を使用して任意のサーバーとサービスに接続します。RETR
を使用して保存されたリクエストをサーバーに送信します。
これにより、「ソケットが書き込み不可」などのエラーが発生する可能性が非常に高いです(RETR
でデータを送信するための接続が十分に続かないため)。それを回避しようとするための提案は次のとおりです:
- HTTPリクエストを送信している場合は、少なくとも~0.5MBまで同じリクエストを繰り返し送信します。次のように:
{% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %}
- プロトコルに関連する**「ジャンク」データでリクエストを埋め込む**(FTPに話しかける場合は、ジャンクコマンドだけまたは
RETR
命令を繰り返してファイルを取得する) - 単にヌル文字やその他の文字でリクエストを埋める(行ごとに分割されているかどうか)
とにかく、ここには古い例があります。これにより、FTPサーバーが別のFTPサーバーからファイルをダウンロードするようになります。
Filezilla Serverの脆弱性
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
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 Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはテレグラムグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- **ハッキングのトリックを共有するには、hacktricksリポジトリとhacktricks-cloudリポジトリ**にPRを提出してください。