hacktricks/network-services-pentesting/pentesting-ftp
2024-02-07 05:47:12 +00:00
..
ftp-bounce-attack.md Translated ['network-services-pentesting/1521-1522-1529-pentesting-oracl 2024-01-05 23:40:55 +00:00
ftp-bounce-download-2oftp-file.md Translated ['forensics/basic-forensic-methodology/partitions-file-system 2024-02-05 02:58:30 +00:00
README.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-07 05:47:12 +00:00

21 - FTPのペンテスト

☁️ HackTricks Cloud ☁️ - 🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

重要な脆弱性を見つけて修正を迅速化します。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまでの技術スタック全体で問題を見つけます。無料でお試しください

{% 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 サーバーはその後、ポートMからFTPクライアントのポートN+1へのデータ接続初期化します。

ただし、FTPクライアントに外部からの着信データ接続を制御するファイアウォールが設定されている場合、アクティブFTPは問題となる可能性があります。そのための実現可能な解決策がパッシブFTPです。

パッシブFTPでは、クライアントはポートNからFTPサーバーのポート21への制御接続を初期化します。その後、クライアントはpassvコマンドを発行します。サーバーはクライアントに自身のポート番号Mのいずれかを送信します。そして、クライアントポートPからFTPサーバーのポートMへのデータ接続初期化します。

ソース: https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/

接続のデバッグ

FTPコマンド**debugtrace**を使用して、通信がどのように行われているかを確認できます。

列挙

バナーの取得

nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any

FTPをstarttlsを使用して接続する

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

Brute force

ここでは、デフォルトのFTP資格情報の素敵なリストを見つけることができます: https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt

Automated

匿名ログインとバウンスFTPチェックは、nmapが**-sC**オプションまたはデフォルトで実行します。

nmap --script ftp-* -p 21 <ip>

ブラウザ接続

FTPサーバーには、Firefoxなどのブラウザを使用して次のようなURLを使用して接続できます

ftp://anonymous:anonymous@10.10.10.98

注意してください。Webアプリケーションがユーザーによって制御されたデータを直接FTPサーバーに送信している場合、ダブルURLエンコード%0d%0aダブルURLエンコードでは%250d%250aとなります)バイトを送信して、FTPサーバーに任意のアクションを実行させることができます。これらの任意のアクションの1つは、ユーザーが制御するサーバーからコンテンツをダウンロードしたり、ポートスキャンを実行したり、他のプレーンテキストベースのサービス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

もしユーザー名/パスワードに特殊文字が含まれている場合、次のコマンド を使用できます:

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接続から受信したデータをファイルに保存するよう指示されます。ファイル名が存在する場合、データが追加されます。
  • 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サーバーからファイルをダウンロードさせたりできます。
理論は簡単です:

  1. リクエスト(テキストファイル内)を脆弱なサーバーにアップロードします。 別のHTTPまたはFTPサーバーと通信する場合は、0x0d 0x0aで行を変更する必要があります
  2. 送信したくない文字を送信しないようにするためにREST Xを使用します(たとえば、ファイル内にリクエストをアップロードするために、最初に画像ヘッダーを配置する必要があるかもしれません)
  3. 任意のサーバーとサービスに接続するためにPORTを使用します
  4. 保存されたリクエストをサーバーに送信するためにRETRを使用します

これはおそらく**「Socket not writable」のようなエラーを発生させる可能性が高いです。RETRでデータを送信するのに十分な接続がない**ためです。これを回避するための提案は次のとおりです:

  • HTTPリクエストを送信している場合は、少なくとも~0.5MBまで同じリクエストを繰り返します。次のように:

{% file src="../../.gitbook/assets/posts (1).txt" %} posts.txt {% endfile %}

  • プロトコルに関連する「ジャンク」データでリクエストを埋めるようにしますFTPに話しかける場合は、ジャンクコマンドまたはRETR命令を繰り返してファイルを取得する)
  • リクエストを多くのヌル文字や他の文字で埋めるようにします(行ごとに分割されているかどうか)

とにかく、こちらにはFTPサーバーが異なるFTPサーバーからファイルをダウンロードするようにするためにこれを悪用する方法に関する古い例があります。

Filezillaサーバーの脆弱性

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アプリケーション、クラウドシステムまで、技術スタック全体で問題を見つけます。無料でお試しください 今すぐ。

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


HackTricks Automatic Commands

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 🎥