「シェルコーダーハンドブック」に記載されているコードを試していましたが、バッファをオーバーフローさせて同じコードを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 回呼び出すためにバッファをオーバーフローさせるにはどうすればよいですか?