Drupal RCE
PHPフィルターモジュールを使用して
古いバージョンのDrupal (バージョン8以前) では、管理者としてログインし、PHP filter
モジュールを有効にすることが可能でした。このモジュールは「埋め込まれたPHPコード/スニペットを評価することを許可します。」しかし、バージョン8以降、このモジュールはデフォルトでインストールされていません。
phpプラグインがインストールされている必要があります (/modules/php にアクセスして、403が返される場合は、存在します。見つからない場合は、phpプラグインはインストールされていません)
モジュール -> (チェック) PHPフィルター -> 設定を保存
次に、コンテンツを追加 -> _基本ページ_または_記事_を選択 -> 本文にphpシェルコードを書く -> _テキスト形式_で_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
**に移動してコマンドを実行します。
設定同期によるDrupalのバックドア
投稿者 Coiffeur0x90
パート1(_メディア_と_メディアライブラリ_の有効化)
_拡張_メニュー(/admin/modules)では、すでにインストールされていると思われるプラグインを有効化できます。デフォルトでは、プラグイン_メディア_と_メディアライブラリ_は有効化されていないようなので、有効化しましょう。
有効化前:
有効化後:
パート2(機能_設定同期_の活用)
_設定同期_機能を活用して、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ファイルシステムツリー内で上に戻ることができます)。
パート 3 (機能 Add Document の活用)
最後のステップは最も簡単で、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
Part 3.1 (upload file .htaccess)
まず、Add Document (/media/add/document) 機能を利用して、Apache ディレクティブを含むファイル (.htaccess) をアップロードします。
Part 3.2 (upload file LICENSE.txt)
次に、再度 Add Document (/media/add/document) 機能を利用して、ライセンスファイルに隠された Webshell をアップロードします。
Part 4 (interaction with the Webshell)
最後の部分は、Webshell と対話することです。
以下のスクリーンショットに示されているように、Webshell に期待されるクッキーが定義されていない場合、Web ブラウザを介してファイルを参照すると、次の結果が得られます。
攻撃者がクッキーを設定すると、Webshell と対話し、任意のコマンドを実行できます。
ログに示されているように、要求されたのはテキストファイルだけのようです。
この記事を読んでいただきありがとうございます。これがシェルを取得するのに役立つことを願っています。
Last updated