1

「シェルコーダーハンドブック」に記載されているコードを試していましたが、バッファをオーバーフローさせて同じコードを2回実行させました...

void return_input (void)
{ char array[5]; 
  gets (array); 
  printf(“%s\n”, array); 
}
 main() 
 { 
  return_input();
  return 0; 
 } 

タスクは、入力された文字列が 2 回出力されるように、バッファーを上書きし、「return 0」のアドレスを「return_input()」のアドレスに置き換えることでした。

私は次のようにコンパイルしました

gcc -fno-stack-protector overflow.c

保護メカニズムをオーバーライドします。問題は、2回実行できないことです。この場合、関数 ri() のアドレスは 0x08048440 です。私は次のように入力を与えました

./a.out
aaaaaaaaaaaaa\x40\x84\x04\x08 

これにより、関数が2回呼び出されることはありませんか?? それはいつも戻ってくる

aaaaaaaaaaaaaaaa�� 
Segmentation fault (core dumped)

関数を 2 回呼び出すためにバッファをオーバーフローさせるにはどうすればよいですか?

4

3 に答える 3

1

\x40\x84\x04\x08はサポートされていません。16 進入力をバイトに変換するには、他のプログラムを使用する必要があります。

bash を使用している場合は、 を試すことができますecho -e '\x40\x84\x04\x08' | ./a.outLinux shell scripting: hex string to bytesでその解決策を見つけました

于 2013-06-01T11:23:03.243 に答える
0

マシンの種類によっては、調整が必要になる場合があります。 http://www.tenouk.com/Bufferoverflowc/Bufferoverflow4.html

于 2013-06-01T11:56:26.370 に答える
0

定義上、バッファ オーバーフローの動作は予測できません。同じコンパイラの同じバージョンを同じ OS で同じ設定で使用している場合にのみ、同じ動作が得られます。

于 2013-06-01T11:21:47.450 に答える