Drupal RCE
PHPフィルターモジュールを使用する
Drupalの古いバージョン(バージョン8より前)では、管理者としてログインしてPHPフィルター
モジュールを有効にすることが可能でした。これにより、「埋め込みPHPコード/スニペットを評価できる」ようになります。ただし、バージョン8からはこのモジュールがデフォルトでインストールされていません。
プラグインphpがインストールされている必要があります(_/modules/php にアクセスして403が返された場合は、存在します。見つからない場合は、プラグインphpがインストールされていません)
_Modules_に移動 -> (チェックを入れる)PHP Filter -> Save configuration
その後、_Add content_をクリック -> _Basic Page_または_Article_を選択 -> 本文にphpシェルコードを記述 -> _Text format_で_PHP code_を選択 -> _Preview_を選択
最後に、新しく作成したノードにアクセスしてください:
PHP Filterモジュールのインストール
現在のバージョンでは、デフォルトのインストール後にウェブへのアクセスだけでプラグインをインストールすることはできなくなりました。
バージョン8以降では、PHP Filterモジュールはデフォルトでインストールされません。この機能を利用するには、モジュールを自分でインストールする必要があります。
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内のファイルをリクエストしたときに/folderにルールを適用します。これらのファイルをcaptchaフォルダにコピーしてアーカイブを作成してください。
ウェブサイトに管理アクセスがあると仮定し、**
Manage
をクリックして、サイドバーでExtend
をクリックします。次に、+ Install new module
ボタンをクリックして、http://drupal-site.local/admin/modules/install
のようなインストールページに移動します。バックドア付きのCaptchaアーカイブを参照してInstall
**をクリックします。インストールが成功したら、**
/modules/captcha/shell.php
**に移動してコマンドを実行します。
Drupalの設定同期を使用したバックドア設置
投稿者 Coiffeur0x90
パート1(_Media_と_Media Library_の有効化)
_Extend_メニュー(/admin/modules)では、すでにインストールされているプラグインのように見えるものを有効化できます。デフォルトでは、_Media_と_Media Library_プラグインは有効になっていないようですので、有効にしてみましょう。
有効化前:
有効化後:
パート2(機能_設定同期_の活用)
Drupalの設定エントリをダンプ(エクスポート)してアップロード(インポート)するために、_Configuration synchronization_機能を活用します:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
system.file.ymlをパッチ
最初のエントリallow_insecure_uploads
を以下のようにパッチしましょう:
ファイル: system.file.yml
To:
ファイル: system.file.yml
field.field.media.document.field_media_document.yml
をパッチします
次に、2番目のエントリ file_extensions
を以下のようにパッチします:
ファイル: field.field.media.document.field_media_document.yml
To:
ファイル: field.field.media.document.field_media_document.yml
このブログ投稿では使用しませんが、エントリ
file_directory
を任意の方法で定義し、パストラバーサル攻撃の対象となる可能性があることが指摘されています(したがって、Drupalファイルシステムツリー内で上に戻ることができます)。
パート3(機能「ドキュメントの追加」を活用)
最後のステップは最も簡単で、2つのサブステップに分かれています。最初のステップは、.htaccess形式のファイルをアップロードしてApacheディレクティブを活用し、.txtファイルをPHPエンジンで解釈できるようにすることです。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 (ファイル.htaccessをアップロード)
まず、Apacheディレクティブを含むファイルをアップロードするために、Add Document (/media/add/document) 機能を利用します。
Part 3.2 (ファイルLICENSE.txtをアップロード)
次に、ライセンスファイルに隠されたWebshellをアップロードするために、再び_Add Document_ (/media/add/document) 機能を利用します。
Part 4 (Webshellとのやり取り)
最後の部分は、Webshellとのやり取りです。
以下のスクリーンショットに示されているように、Webshellが期待するクッキーが定義されていない場合、Webブラウザを介してファイルを参照すると、次の結果が得られます。
攻撃者がクッキーを設定すると、Webshellとやり取りし、任意のコマンドを実行できます。
ログを見ると、txtファイルのみがリクエストされたようです。
この記事を読んでいただき、ありがとうございます。シェルを手に入れるのに役立つことを願っています。
Last updated