buffer overflow的应用
讲讲buffer overflow在逆向中的应用
在使用c中的scanf时,错误的使用%s会导致内存中的覆写,因为%s用于读取所有的非空格字符,并没有长度的限制,它不知道buffer的大小,因此若输入的字符超出buffer,则会覆写buffer外的内存,造成buffer overflow
比如
int check()
{
char input[8];
int is_verified;
is_verified = 0;
printf("Enter password: ");
__isoc99_scanf("%s", input);
verify_input(input, &is_verified);
if ( is_verified == 1 )
return puts("Access Granted!");
else
return puts("Authentication Failed");
}
在这个例子中,stack frame是这样的
return address of check()
saved registers
is_verified (int) <- 4 bytes
input[8] (char array) <- 8 bytes
若输入大于8bytes,比如10bytes,大于的部分就会写到is_verified里面
比如input输入 AAAAAAAA\x01,\x01 就会写到is_verified里