Drupal RCE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
古いバージョンのDrupal (バージョン8以前)では、管理者としてログインし、PHP filter
モジュールを有効にすることが可能でした。このモジュールは「埋め込まれたPHPコード/スニペットを評価することを許可します。」しかし、バージョン8以降、このモジュールはデフォルトでインストールされていません。
/modules/phpに移動し、403エラーが返された場合は、PHPフィルタープラグインがインストールされており、続行できます
そうでない場合は、Modules
に移動し、PHP Filter
のボックスにチェックを入れてからSave configuration
をクリックします
次に、これを悪用するために、Add content
をクリックし、Basic Page
またはArticle
を選択し、PHPバックドアを書き込み、テキスト形式でPHP
コードを選択し、最後にPreview
を選択します
それをトリガーするには、新しく作成されたノードにアクセスするだけです:
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。
バージョン8以降、 PHPフィルター モジュールはデフォルトでインストールされていません。この機能を利用するには、自分でモジュールをインストールする必要があります。
Drupalウェブサイトからモジュールの最新バージョンをダウンロードします。
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
ダウンロードが完了したら、管理
> レポート
> **利用可能な更新
**に移動します。
**参照
をクリックし、ダウンロードしたディレクトリからファイルを選択し、次にインストール
**をクリックします。
モジュールがインストールされたら、コンテンツ
をクリックし、Drupal 7の例と同様に新しい基本ページを作成します。再度、テキストフォーマット
ドロップダウンからPHPコード
を選択することを忘れないでください。
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。
モジュールをダウンロードし、バックドアを追加してインストールすることが可能でした。例えば、Trurnstileモジュールを圧縮形式でダウンロードし、その中に新しいPHPバックドアファイルを作成し、.htaccess
ファイルを使用してPHPファイルにアクセスできるようにします:
そして、http://drupal.local/admin/modules/install
に移動して、バックドアが仕込まれたモジュールをインストールし、/modules/turnstile/back.php
にアクセスして実行します。
投稿者 Coiffeur0x90
Extend メニュー (/admin/modules) では、すでにインストールされていると思われるプラグインを有効化できます。デフォルトでは、プラグイン Media と Media Library は有効化されていないようなので、有効化しましょう。
有効化前:
有効化後:
私たちは Configuration synchronization 機能を利用して、Drupalの設定エントリをダンプ(エクスポート)し、アップロード(インポート)します:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Patch system.file.yml
最初のエントリ allow_insecure_uploads
をパッチすることから始めましょう:
ファイル: system.file.yml
に:
ファイル: system.file.yml
パッチ field.field.media.document.field_media_document.yml
次に、2番目のエントリ file_extensions
を以下のようにパッチします:
ファイル: field.field.media.document.field_media_document.yml
に:
ファイル: field.field.media.document.field_media_document.yml
このブログ投稿では使用していませんが、
file_directory
を任意の方法で定義でき、パス・トラバーサル攻撃に対して脆弱であることが指摘されています(これにより、Drupalファイルシステムツリー内で上に戻ることができます)。
最後のステップは最も簡単で、2つのサブステップに分かれています。最初は、Apacheディレクティブを活用し、.txtファイルがPHPエンジンによって解釈されるようにするために、.htaccess形式のファイルをアップロードします。2つ目は、ペイロードを含む.txtファイルをアップロードすることです。
ファイル: .htaccess
なぜこのトリックはクールなのか?
WebサーバーにWebシェル(LICENSE.txtと呼ぶ)をドロップすると、$_COOKIE
を介してコマンドを送信でき、Webサーバーログにはテキストファイルへの正当なGETリクエストとして表示されます。
なぜWebシェルをLICENSE.txtと名付けるのか?
単純に、例えばcore/LICENSE.txt(これはDrupalコアにすでに存在するファイル)を取ると、339行でサイズが17.6 KBのファイルがあり、真ん中に小さなPHPコードのスニペットを追加するのに最適です(ファイルが十分に大きいため)。
ファイル: パッチを当てたLICENSE.txt
まず、Add Document (/media/add/document) 機能を利用して、Apache ディレクティブを含むファイル (.htaccess) をアップロードします。
Part 3.2 (upload file LICENSE.txt)
次に、再度 Add Document (/media/add/document) 機能を利用して、ライセンスファイルに隠された Webshell をアップロードします。
最後の部分は、Webshell とのインタラクションで構成されています。
以下のスクリーンショットに示されているように、Webshell に期待されるクッキーが定義されていない場合、Web ブラウザを介してファイルを参照すると、次の結果が得られます。
攻撃者がクッキーを設定すると、Webshell とインタラクションし、任意のコマンドを実行できます。
ログに表示されているように、要求されたのは txt ファイルだけのようです。
この記事を読んでいただきありがとうございます。これがシェルを取得するのに役立つことを願っています。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)