Metasploit で効率化のためにグローバル変数を使用する

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

はじめに

Metasploit Framework を使用していると、LHOST(リッスンするローカルホスト)や LPORT(ローカルポート)など、さまざまなモジュールに対して様々なオプションを設定する必要が生じます。各モジュールに対してこれらのオプションを繰り返し設定するのは時間がかかります。Metasploit は、この問題に対処するためにグローバル変数という機能を提供しています。変数をグローバルに設定すると、そのオプションを使用するどのモジュールにも自動的に適用され、ワークフローの効率が大幅に向上します。

この実験(Lab)では、Metasploit コンソール内でグローバル変数を設定、使用、および解除する方法を学びます。

setg コマンドを使用してグローバル LHOST を設定する

このステップでは、Metasploit コンソールを起動し、LHOST のグローバル変数を設定します。setg コマンドは、同じ msfconsole セッション内の異なるモジュール間で永続する変数を設定するために使用されます。

まず、実験(Lab)環境の IP アドレスを見つけましょう。この IP が LHOST の値として使用されます。

hostname -I | awk '{print $1}'

以下のような出力が表示されます(IP アドレスは異なります)。

192.168.3.123

この IP アドレスを覚えておいてください。次に、Metasploit Framework コンソールを起動します。-q フラグは「quiet」モードに使用され、起動時のバナーを抑制します。

msfconsole -q

プロンプトが msf6 > に変わります。次に、LHOST 変数をグローバルに設定しましょう。setg コマンドの後に変数名と、先ほど見つけた IP アドレスを指定します。

注意:YOUR_IP_ADDRESS は、hostname -I コマンドで取得した実際の IP アドレスに置き換えてください。

setg LHOST YOUR_IP_ADDRESS

以下のような確認メッセージが表示されるはずです。

LHOST => YOUR_IP_ADDRESS

このコマンドにより、このセッションのグローバルな LHOST 値として IP アドレスが保存されました。これを検証するには、-g フラグ付きの show コマンドを使用します。これにより、グローバルに設定されたすべての変数が表示されます。

show -g

出力にはすべてのグローバル変数がリストされます。

Global
=======

  Name   Value
  ----   -----
  LHOST  YOUR_IP_ADDRESS

新しいエクスプロイトモジュールを選択する

このステップでは、グローバル変数がどのように自動的に適用されるかを確認するために、エクスプロイトモジュールを選択します。最初の例として、汎用ペイロードハンドラである exploit/multi/handler を使用します。このモジュールは、着信接続をリッスンするためによく使用されます。

msfconsole プロンプト内で、use コマンドを使用してモジュールを選択します。

use exploit/multi/handler

コマンドを実行すると、現在選択されているモジュールを反映するようにプロンプトが変更されます。

msf6 exploit(multi/handler) >

これは、現在 exploit/multi/handler モジュールのコンテキストにいることを示しています。ここで設定または表示するオプションは、このモジュールに固有のものですが、関連するグローバル変数も継承されます。

LHOST 値が既に設定されていることを確認する

モジュールがロードされたので、そのオプションを確認して、グローバルな LHOST 変数が適用されているか見てみましょう。

このステップでは、show options コマンドを使用して現在のモジュールの設定を表示します。

msf6 exploit(multi/handler) > プロンプトから、次のコマンドを実行します。

show options

このモジュールのオプションの表が表示されます。LHOST 変数を探してください。その値は、最初のステップでグローバルに設定した IP アドレスに既に設定されていることに気づくでしょう。

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (generic/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  YOUR_IP_ADDRESS  yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

ご覧のとおり、このモジュールでは set LHOST コマンドを使用する必要はありませんでした。グローバル値が自動的に継承されたためです。これがグローバル変数を使用する強力な点です。

unsetg コマンドを使用してグローバル変数を削除する

このステップでは、グローバル変数を削除する方法を学びます。変数をグローバルに適用する必要がなくなった場合は、unsetg コマンドを使用できます。これは、モジュールごとにオプションを設定するように戻したい場合や、セッションの設定をクリーンアップしたい場合に便利です。

Metasploit プロンプトから、unsetg コマンドに続けて削除したい変数の名前を実行します。

unsetg LHOST

このコマンドは、LHOST 変数をグローバルスコープから削除します。確認メッセージが表示されます。

Unsetting LHOST...

これで、同じモジュールに対して再度 show options を実行すると、LHOST の値が空になっていることがわかります。

show options

出力には、LHOST に値が設定されていないことが表示されます。

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------


Payload options (generic/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

これ以降、このモジュールを使用したい場合は、set コマンドを使用してローカルで LHOST を設定する必要があります。

グローバルオプションとローカルオプションの使用時期について議論する

最終ステップでは、ローカル変数とグローバル変数を設定する際の実際的な違いと、それぞれの使用時期について議論します。これを理解することで、Metasploit でより効果的に作業できるようになります。

ローカル変数 (set を使用)

  • スコープ: set コマンドで設定された変数(例:set RHOSTS 10.10.10.1)は、現在ロードされているモジュールに ローカル です。
  • 動作: use コマンドを使用して新しいモジュールに切り替えると、このローカル変数は破棄されます。新しいモジュールはそのオプションに対して独自のデフォルト値または空の値を持つことになります。
  • 使用時期: 単一のターゲットまたはモジュールに固有のオプションには set を使用します。最も一般的な例は RHOSTS(リモートホスト/ターゲットの IP アドレス)であり、これは使用するエクスプロイトごとにほぼ必ず変更されます。その他の例としては、TARGETURI や特定の USERNAME などがあります。

グローバル変数 (setg を使用)

  • スコープ: setg コマンドで設定された変数(例:setg LHOST 192.168.3.123)は、msfconsole セッション全体に グローバル です。
  • 動作: 変数とその値は、そのオプション名を使用するすべてのモジュールによって自動的に継承されます。モジュールを切り替えても保持されます。
  • 使用時期: セッション全体で変更されない可能性が高いオプションには setg を使用します。攻撃マシン の IP アドレスは通常変更されないため、LHOST はその完璧な例です。一貫して同じリスニングポートを使用する場合、LPORT もグローバル変数の候補として適しています。

コマンドの概要:

  • set <VARIABLE> <VALUE>: 現在のモジュールに対してのみ変数を設定します。
  • setg <VARIABLE> <VALUE>: セッション内のすべてのモジュールに対して変数をグローバルに設定します。
  • unset <VARIABLE>: 現在のモジュールでローカル変数をクリアします。
  • unsetg <VARIABLE>: グローバル変数をクリアします。

ターゲット固有のオプションには set を、セッション全体のオプションには setg を戦略的に使用することで、繰り返し行う設定を最小限に抑え、エクスプロイトプロセスにより集中できます。

これで Metasploit コンソールを終了できます。

exit

まとめ

この実験では、Metasploit Framework でグローバル変数を効果的に使用してワークフローを効率化する方法を学びました。setg コマンドを使用してグローバルな LHOST を定義し、それが異なるモジュール間で自動的に設定される様子を観察し、unsetg コマンドを使用してそれを削除する練習をしました。また、ローカル変数 (set) とグローバル変数 (setg) の主な違いを学び、ペネトレーションテスト中に、より効率的な設定の選択を行えるようになりました。この単純な概念を習得することで、複雑なシナリオにおいて大幅な時間を節約し、エラーを減らすことができます。