Атака переполнения буфера

Я пытаюсь выполнить очень простой атаку переполнения буфера. Я почти новичок для этого. Итак, если этот вопрос глупо, пожалуйста, извините: -)

Код:

#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; 
}

Когда я использую objdump, чтобы получить функциональные адреса, у меня есть следующее:

main(): 0x804854d
Address of main() where printf() is called: 0x8048563
victim_func(): 0x8048455
confused(): 0x8048414

Теперь, что я хочу, чтобы перейти к Функция «Confused ()» от hifty_func () путем переполнения буфера там и перезаписать обратный адрес к адресу confused (). И я хочу вернуться назад от confused () к заявлению printf () в основном, и выходите нормально. Итак, я предоставляю следующий ввод

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)

, хотя программа печатает «сделано» из этого оператора PrintF, он переходит назад к hifty_func () и печатаю "Введите n:"

Что я делаю не так? Любая помощь была бы очень ценится!

PS: Я не уверен, если у меня есть вопрос справа. Пожалуйста, дайте мне знать, если нужна дополнительная информация.

19
задан jww 12 September 2014 в 13:03
поделиться