C 随机大小缓冲区的缓冲区溢出?(获取)
我正试图了解更多关于如何在我的程序中利用/防止缓冲区溢出的方法。我知道如果大小不变,下面的代码很容易受到攻击,但是如果每次的大小都是随机的呢?是否仍然有办法从堆栈中获取它,并以某种方式动态更改溢出字符的数量C 随机大小缓冲区的缓冲区溢出?(获取),c,security,buffer,buffer-overflow,C,Security,Buffer,Buffer Overflow,我正试图了解更多关于如何在我的程序中利用/防止缓冲区溢出的方法。我知道如果大小不变,下面的代码很容易受到攻击,但是如果每次的大小都是随机的呢?是否仍然有办法从堆栈中获取它,并以某种方式动态更改溢出字符的数量 void vulnFunc(int size){ char buffer[size]; gets(buffer); // Arbitrary code } 考虑 fgets(buf,sizeof(buf)-1,stdin) 使用stdin和与缓冲区匹配的大小。这将是
void vulnFunc(int size){
char buffer[size];
gets(buffer);
// Arbitrary code
}
考虑
fgets(buf,sizeof(buf)-1,stdin)
使用stdin和与缓冲区匹配的大小。这将是安全的。还有其他的可能性,比如getc(stdin)循环:当数据大于
缓冲区可以是realloc()。它取决于用于表示数组的变量,如果其类型为char[]或char*。让我解释一下原因:
sizeof
运算符返回内存中数组的大小(单元格数*sizeof(type)),因此基本上可以使用以下调用获取单元格数:
sizeof(数组)/sizeof(数组[0])如果您还动态分配,则可以使用
sizeof
运算符获取大小,并相应地更改内容。可能很难控制溢出覆盖的位置/内容,但通过提供比传递给函数的随机数更大的输入,仍有可能在缓冲区后占用内存。你还是。