我試圖執行一個非常簡單的緩衝區溢出攻擊。我幾乎是這個新手。因此,如果這個問題是愚蠢的,請原諒我:-)緩衝區溢出攻擊
代碼:
#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
現在,我想要的是從victim_func()跳到函數'confused()',通過溢出緩衝區,並覆蓋返回地址到confused()的地址。我想從confused()返回到main中的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語句的程序打印,它跳回到victim_func(),並打印「輸入n:」
我在做什麼錯誤?任何幫助將不勝感激! PS:我不確定我是否把問題提出來了。請讓我知道,如果需要更多的信息。
其實,這是在學校的任務! – Ashwin
如果這真的是功課,請標記爲這樣。 – NPE
@VJo我認爲這是一項偉大的教育任務 - 我很想親自嘗試:它需要深入理解並直接試驗代碼的彙編器實現。白帽子也需要掌握這些想法。 – Elemental