我试图在以下代码中找到漏洞,我只是猜测它可以通过缓冲区溢出来利用,但不幸的是我不知道从哪里开始。
#include <stdio.h>
#include <stdlib.h>
#define TABLELEN 7
int table[] = {2, 3, 5, 7, 11, 13, 17};
void loadTable(int *hashtable) {
int i;
for (i = 0; i < TABLELEN; i++) {
hashtable[i] = table[i];
}
}
int main(int argc, char *argv[])
{
int array[8];
int index;
int value;
if (argc < 3) {
fprintf(stderr, "Not enough args\n");
return -1;
}
loadTable(array);
index = (int) strtol(argv[1], NULL, 10);
value = (int) strtoul(argv[2], NULL, 16);
printf("Updating table value at index %d with %d: previous value was %d\n",
index, value, array[index]);
array[index] = value;
printf("The updated table is:\n");
for (index = 0; index < TABLELEN; index++) {
printf("%d: %d\n", index, array[index]);
}
return 0;
}
我试图找到方法来利用数组大小为 8 但只声明了 7 个元素的部分。我不是在寻找确切的解决方案,但任何帮助将不胜感激
最佳答案
在这种情况下可能会导致缓冲区溢出,因为您在将 index
变量转换为 long
后没有检查它的值。稍后您使用以下语句:
array[index] = value;
但您已将
array
声明为:int array[8];
这意味着您的
array's
索引将从 0
开始并达到 7
。因此,如果 index
大于 7
,则会导致缓冲区溢出。关于c - 关于缓冲区溢出的练习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39684445/