如何执行此缓冲区溢出?在Ubuntu

时间:2015-12-12 04:34:11

标签: c ubuntu buffer overflow

#include <stdio.h>

int myprint(char* argv1) {
    printf("%s", argv1); 
}

void foo(char* argv1, char* argv2) {
int (*fptr)(char*) = myprint; 
char buf[12];
strcpy(buf, argv1); 
fptr(argv2); }

int main(int argc, char **argv) { 
if (argc < 3) 
{ 
printf("error\n"); 
return; 
} 
foo(argv[1], argv[2]); }

这是我要溢出的c代码。我已经禁用了aslr。我接下来该怎么办?

1 个答案:

答案 0 :(得分:1)

1 ======= =======

在函数foo中,下一个代码将导致缓冲区溢出

strcpy(buf, argv1); 

因为buf的长度只有12(char buf[12]

strcpy会将源地址arg1中的值复制到buf,直到遇到arg1中的'\ 0'。

因此,如果你给一个长度大于12的arg1,你将得到一个缓冲区溢出。

======= 2 =======

int main(int argc, char **argv)

参数int argc是命令行参数的数量,下一个参数char **argv是指向这些参数的指针,argv [0]是程序的名称。 所以,像这样编译你的代码(比如源文件是test.c):

gcc test.c -o test

然后像这样运行:

./test this_is_argv1_its_length_larget_han_12 this_is_argv2