非常に単純なバッファオーバーフロー攻撃を実行しようとしています。私はこれにかなり初心者です。この質問は愚かであれば、バッファオーバーフロー攻撃
:-)コードを私に言い訳してください私は、関数のアドレスを取得するためにobjdumpは使用している場合
#include<stdio.h>
#include<stdlib.h>
int i, n;
void confused(int i)
{
printf("**Who called me? Why am I here?? *** %x\n ", i);
}
void shell_call(char *c)
{
printf(" ***Now calling \"%s\" shell command *** \n", c);
system(c);
}
void victim_func()
{
int a[4];
printf("Enter n: "); scanf("%d",&n);
printf("~~~~~~~~~~~~~ values and address of n locations ~~~~~~~~~~");
for (i = 0;i <n ;i++)
printf ("\n a[%d] = %x, address = %x", i, a[i], &a[i]);
printf("\nEnter %d HEX Values \n", n);
// Buffer Overflow vulnerability HERE!
for (i=0;i<n;i++) scanf("%x",&a[i]);
printf("Done reading junk numbers\n");
}
int main()
{
victim_func();
printf(“\n done”);
return 0;
}
、私は次のようしている:
main(): 0x804854d
Address of main() where printf() is called: 0x8048563
victim_func(): 0x8048455
confused(): 0x8048414
さて、私が望むのは、bufferをオーバーフローさせ、返りアドレスをconfused()のアドレスに上書きすることによって、victim_func()から関数 'confused()'にジャンプすることです。そして、私はconfused()からmainのprintf()ステートメントに戻り、正常に終了したいと思います。
は私が何をやっている:だから、私は、printf文から、それは(バックvictim_funcにジャンプさ)とプリントが「nを入力」「完了」のプログラムのプリント、が、次の入力
Enter n: 7
Enter 7 HEX values:
1
2
3
4
5
8048414 (This is to jump to confused)
8048563 (this is to jump to printf() in main)
を提供します違う?どんな助けでも大歓迎です!
PS:正しい質問をしてもわかりません。詳細が必要な場合はお知らせください。
実際、これは学校での課題です! – Ashwin
これが本当に宿題の場合は、そのようにタグ付けしてください。 – NPE
@VJoこれは素晴らしい教育的な仕事だと思います。私はそれを自分自身で試してみたいと思っています。コードのアセンブラ実装を深く理解し、直接実験する必要があります。白い帽子もこれらのアイデアを把握する必要があります。 – Elemental