# 21 - FTPのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
最も重要な脆弱性を見つけて、より速く修正できるようにしましょう。Intruderは、攻撃対象の範囲を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまで、技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。 {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} *** ## 基本情報 **ファイル転送プロトコル(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/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/) ### 接続のデバッグ **FTP**コマンド**`debug`**と**`trace`**を使用すると、**通信の方法**を確認できます。 ## 列挙 ### バナーグラビング ```bash nc -vn 21 openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any ``` ### Starttlsを使用してFTPに接続する To connect to an FTP server using Starttls, you can follow the steps below: 1. Open a terminal or command prompt and type the following command: ``` ftp ``` Replace `` with the hostname or IP address of the FTP server you want to connect to. 2. Once connected, you will see the FTP prompt. Type the following command to enable Starttls: ``` prot p ``` This command sets the data channel protection level to private. 3. Next, type the following command to initiate the Starttls negotiation: ``` ccc ``` This command switches the FTP control connection to plaintext. 4. Finally, type the following command to secure the control connection using Starttls: ``` auth tls ``` This command enables Starttls on the control connection. 5. You are now connected to the FTP server using Starttls. You can proceed with any FTP commands you need to execute. Note: Make sure the FTP server supports Starttls before attempting to connect using this method. ``` 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 [] lftp 10.10.10.208:~> login username Password ``` ### 非認証列挙 **nmap**を使用してください。 ```bash 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_ ```bash ftp >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 ``` ### [ブルートフォース](../../generic-methodologies-and-resources/brute-force.md#ftp) ここでは、デフォルトのFTPの資格情報の素敵なリストを見つけることができます: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt) ### 自動化 匿名ログインとバウンスFTPチェックは、nmapの**-sC**オプションまたは次のようにデフォルトで実行されます: ```bash nmap --script ftp-* -p 21 ``` ## ブラウザ接続 ブラウザ(例:Firefox)を使用して、次のようなURLを使用してFTPサーバーに接続することができます: ```bash ftp://anonymous:anonymous@10.10.10.98 ``` 注意してください、もし**ウェブアプリケーション**がユーザーによって制御されたデータを**直接FTPサーバー**に送信している場合、ダブルURLエンコード`%0d%0a`(ダブルURLエンコードでは`%250d%250a`)バイトを送信して**FTPサーバーに任意のアクションを実行**させることができます。この可能な任意のアクションの一つは、ユーザーが制御するサーバーからコンテンツをダウンロードしたり、ポートスキャンを実行したり、他のプレーンテキストベースのサービス(例えばhttp)と通信を試みることです。 ## FTPからすべてのファイルをダウンロードする ```bash wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all ``` ユーザー名/パスワードに特殊文字が含まれている場合、[次のコマンド](https://stackoverflow.com/a/113900/13647948)を使用できます: ```bash wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ ``` ## いくつかの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にアップロードします ![](<../../.gitbook/assets/image (227).png>) ## FTPBounce攻撃 一部のFTPサーバーでは、PORTコマンドを許可しています。このコマンドを使用して、FTPサーバーを介してホストのどのポートが開いているかをスキャンすることができます。 [**ここでFTPサーバーを悪用してポートをスキャンする方法を学びましょう。**](ftp-bounce-attack.md) また、この動作を悪用してFTPサーバーを他のプロトコルと対話させることもできます。HTTPリクエストを含むファイルをアップロードし、脆弱なFTPサーバーにそれを任意のHTTPサーバーに送信させる(たとえば新しい管理者ユーザーを追加する)か、FTPリクエストをアップロードし、脆弱なFTPサーバーに別のFTPサーバーからファイルをダウンロードさせることができます。\ 理論は簡単です: 1. **脆弱なサーバーにリクエスト(テキストファイル内)をアップロードします。**他のHTTPまたはFTPサーバーと通信する場合は、`0x0d 0x0a`で行を変更する必要があります。 2. **送信したくない文字を送信しないようにするために、`REST X`を使用します**(おそらくリクエストをファイルの先頭に画像ヘッダーを追加する必要がある場合など)。 3. **`PORT`を使用して任意のサーバーとサービスに接続します**。 4. **`RETR`を使用して保存されたリクエストをサーバーに送信します**。 これにより、**「ソケットが書き込み不可」**などのエラーが発生する可能性が非常に高いです**(`RETR`でデータを送信するための接続が十分に続かないため)**。それを回避しようとするための提案は次のとおりです: * HTTPリクエストを送信する場合は、**少なくとも\~0.5MBまで**同じリクエストを繰り返し送信します。次のように: {% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %} * プロトコルに関連する「ジャンク」データでリクエストを**埋める**(FTPに話しかける場合はジャンクコマンドだけまたは`RETR`命令を繰り返すことでファイルを取得する) * 単に**ヌル文字やその他の文字でリクエストを埋める**(行ごとに分割するかどうか) とにかく、ここには[古い例があります。FTPサーバーが別のFTPサーバーからファイルをダウンロードするようにするためにこれを悪用する方法について](ftp-bounce-download-2oftp-file.md)説明されています。 ## 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`
最も重要な脆弱性を見つけて修正を迅速に行いましょう。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリまでクラウドシステム全体にわたる問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm_source=referral&utm_campaign=hacktricks)。 {% 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 Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 * [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 * [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。** * **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。