缓冲区溢出

时间:2015-09-19 04:54:15

标签: c buffer-overflow integer-overflow strlen

我一直在网上搜索了几天,但仍然无法弄清楚以下代码的漏洞是什么。 我的第一个想法是,我们可以为int' length'然后做缓冲区溢出漏洞来复制shell代码并将地址返回缓冲区。然而,'长度'代码中的大小阻止了缓冲区溢出。任何人都可以了解如何利用这个程序?非常感谢!

void copy_str(char *buffer2, int buffer2_l, char *input)
{
   int i, length;

   length = strlen(input);
   if (length > buffer2_l)
     length = buffer2_l;

   for (i = 0; i <= **length**; i++)
       buffer2[i] = input[i];
}

void vul2(char *arg)
{
  char buffer[109];

  copy_str(buffer, sizeof buffer, arg);
 }

void vul1(char *argv[])
{
   vul2(argv[1]);
}
int main(int argc, char *argv[])
{
  if (argc != 2)
    {
      fprintf(stderr, "program2: argc != 2\n");
      exit(EXIT_FAILURE);
    }
  vul1(argv);
  return 0;
}

1 个答案:

答案 0 :(得分:1)

如果argv[1]为109个字符或更长,则您将buffer超过1 char,因为您使用<=进行长度比较。