Melaton's Blog

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里