我一直在网上搜索了几天,但仍然无法弄清楚以下代码的漏洞是什么。 我的第一个想法是,我们可以为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;
}
答案 0 :(得分:1)
如果argv[1]
为109个字符或更长,则您将buffer
超过1 char
,因为您使用<=
进行长度比较。