简体   繁体   English

缓冲区溢出

[英]Buffer Overflow

I have been searching online for a few days but still cannot figure out what is the vulnerability for below code. 我已经在网上搜索了几天,但仍然无法确定以下代码的漏洞是什么。 My first thought is that we can do overflow for int 'length' and then do buffer overflow exploit to copy shell code and return address to buffer. 我首先想到的是,我们可以为int'length'进行溢出,然后进行缓冲区溢出利用以复制shell代码并将地址返回到缓冲区。 However the 'length' size in the code is preventing a buffer overflow. 但是,代码中的“长度”大小可防止缓冲区溢出。 Can anyone shed some lights on how to exploit this program? 谁能阐明如何利用此程序? thanks much! 非常感谢!

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;
}

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM