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以降、このモジュールはデフォルトでインストールされていません。
phpプラグインがインストールされている必要があります (/modules/php にアクセスして、403が返される場合は、存在します。見つからない場合は、phpプラグインはインストールされていません)
モジュール -> (チェック) PHP Filter -> 設定を保存
次に、コンテンツを追加 -> _基本ページ_または_記事_を選択 -> 本文にphpシェルコードを書く -> テキスト形式_で PHPコード_を選択 -> _プレビュー_を選択
最後に、新しく作成したノードにアクセスします:
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。
バージョン8以降、 PHPフィルター モジュールはデフォルトでインストールされていません。この機能を利用するには、自分でモジュールをインストールする必要があります。
Drupalウェブサイトからモジュールの最新バージョンをダウンロードします。
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
ダウンロードが完了したら、管理
> レポート
> **利用可能な更新
**に移動します。
**参照
をクリックし、ダウンロードしたディレクトリからファイルを選択して、次にインストール
**をクリックします。
モジュールがインストールされたら、コンテンツ
をクリックし、Drupal 7の例と同様に新しい基本ページを作成します。再度、テキストフォーマット
のドロップダウンからPHPコード
を選択することを忘れないでください。
現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。
バックドア付きモジュールは、既存のモジュールにシェルを追加することによって作成できます。モジュールはdrupal.orgウェブサイトで見つけることができます。例えば、CAPTCHAのようなモジュールを選びましょう。下にスクロールして、tar.gz アーカイブのリンクをコピーします。
アーカイブをダウンロードし、その内容を抽出します。
PHPウェブシェルを次の内容で作成します:
次に、フォルダーへのアクセスを得るために .htaccess
ファイルを作成する必要があります。これは、Drupalが /modules
フォルダーへの直接アクセスを拒否するため、必要です。
上記の設定は、/modules内のファイルをリクエストしたときに/フォルダーにルールを適用します。これらのファイルを両方ともcaptchaフォルダーにコピーし、アーカイブを作成します。
ウェブサイトに管理者アクセスがあると仮定して、サイドバーの**管理
をクリックし、次に拡張
をクリックします。次に、新しいモジュールをインストール
ボタンをクリックすると、インストールページ(例: http://drupal-site.local/admin/modules/install
)に移動します。バックドア付きのCaptchaアーカイブを参照し、インストール
**をクリックします。
インストールが成功したら、**/modules/captcha/shell.php
**に移動してコマンドを実行します。
投稿者 Coiffeur0x90
_拡張_メニュー(/admin/modules)では、すでにインストールされていると思われるプラグインを有効化できます。デフォルトでは、プラグイン_メディア_と_メディアライブラリ_は有効化されていないようなので、有効化しましょう。
有効化前:
有効化後:
_設定同期_機能を利用して、Drupalの設定エントリをダンプ(エクスポート)し、アップロード(インポート)します:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
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サーバーにWebshell(LICENSE.txtと呼ぶ)をドロップすると、$_COOKIE
を介してコマンドを送信でき、Webサーバーログにはテキストファイルへの正当なGETリクエストとして表示されます。
なぜWebshellを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 とインタラクションし、任意のコマンドを実行できます。
ログに表示されているように、要求されたのはテキストファイルだけのようです。
この記事を読んでいただきありがとうございます。これがシェルを取得するのに役立つことを願っています。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)