21 - Pentesting FTP
Try Hard Security Group
基本情報
**ファイル転送プロトコル(FTP)は、サーバーとクライアント間でコンピューターネットワークを介してファイルを転送するための標準プロトコルとして機能します。
プレーンテキストプロトコルであり、改行文字 0x0d 0x0a
を使用するため、telnet
またはnc -C
**を使用して接続する必要があることがあります。
デフォルトポート: 21
接続のアクティブとパッシブ
アクティブFTPでは、FTP クライアントは最初に制御接続をポートNからFTPサーバーのコマンドポート(ポート21)にイニシエートします。その後、クライアントはポートN+1でリッスンし、ポートN+1をFTPサーバーに送信します。FTP サーバーはその後、データ接続を、ポートMからFTPクライアントのポートN+1にイニシエートします。
ただし、FTPクライアントに外部からの着信データ接続を制御するファイアウォールが設定されている場合、アクティブFTPは問題になる可能性があります。そのための実現可能な解決策がパッシブFTPです。
パッシブFTPでは、クライアントは制御接続をポートNからFTPサーバーのポート21にイニシエートします。その後、クライアントはpassvコマンドを発行します。サーバーはその後、クライアントに自身のポート番号Mの1つを送信します。そして、クライアントはデータ接続を、ポートPからFTPサーバーのポートMにイニシエートします。
ソース: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/
接続のデバッグ
FTPコマンド**debug
とtrace
**を使用して、通信がどのように行われているかを確認できます。
列挙
バナーの取得
FTPをstarttlsを使用して接続する
認証なし列挙
nmapを使用して
次のコマンドHELP
とFEAT
を使用して、FTPサーバーの情報を取得できます:
匿名ログイン
anonymous : anonymous anonymous : ftp : ftp
ここでは、デフォルトのFTP資格情報の素敵なリストを見つけることができます: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt
Automated
匿名ログインとバウンスFTPチェックは、nmapの**-sC**オプションまたはデフォルトで実行されます。
ブラウザ接続
FTPサーバーには、次のようなURLを使用して、ブラウザ(たとえばFirefox)で接続できます:
注意してください。もしwebアプリケーションがユーザーによって制御されたデータを直接FTPサーバーに送信している場合、ダブルURLエンコード%0d%0a
(ダブルURLエンコードでは%250d%250a
となります)バイトを送信して、FTPサーバーに任意のアクションを実行させることができます。この可能な任意のアクションの1つは、ユーザーが制御するサーバーからコンテンツをダウンロードしたり、ポートスキャンを実行したり、他のプレーンテキストベースのサービス(例:http)と通信を試みることです。
FTPからすべてのファイルをダウンロード
特殊文字を含むユーザー/パスワードを使用している場合、次のコマンド を使用できます:
いくつかの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接続から受信したデータをファイルに保存するよう指示されます。ファイル名が存在する場合、データが追加されます。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
を使用します
これはおそらくSocket not writableのようなエラーをスローする可能性が高いです_RETR
でデータを送信するのに十分な接続がないため。それを回避しようとする提案は次のとおりです:
HTTPリクエストを送信している場合、少なくとも~0.5MBまで同じリクエストを繰り返します。次のように:
プロトコルに関連する「ジャンク」データでリクエストを埋めることを試みます(FTPに話しかける場合、ジャンクコマンドを使用するか、ファイルを取得するために
RETR
命令を繰り返します)リクエストを多くのヌル文字や他の文字で埋めます(行ごとに分割されているかどうか)
とにかく、ここにはFTPサーバーが異なるFTPサーバーからファイルをダウンロードするようにするためにこれを悪用する方法に関する古い例があります。
Filezillaサーバーの脆弱性
FileZillaは通常、FileZilla-Server(ポート14147)のローカル管理サービスにバインドされます。あなたのマシンからこのポートにアクセスするトンネルを作成できれば、空のパスワードを使用して接続し、FTPサービスのために新しいユーザーを作成できます。
設定ファイル
ポストエクスプロイテーション
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
Try Hard Security Group
HackTricks Automatic Commands
Last updated