嗨,
我有此C代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int ssp(char * str)
{
char buffer[100];
strcpy(buffer,str);
return 1;
}
int main(int argc, char **argv)
{
char str[400];
FILE * afile;
afile = fopen("afile", "r");
fread(str, sizeof(char), 400, afile);
ssp(str);
printf("Returned Properly\n");
return 1;
}
提供的程序读取一个名为str
的字符数组的文件的内容,该文件最多可容纳400个字符。然后,它调用ssp
函数并将str
作为参数传递。
ssp
函数将str
字符数组的内容复制到称为buffer的局部字符阵列中。用于复制字符串数据的strcpy
函数不会执行任何界限检查,如果输入字符串长于缓冲区大小,则可能导致缓冲区溢出漏洞。
但是,如果在较大的程序中或具有不信任的输入数据的环境中使用,则ssp
函数中strcpy
函数中缺乏界限可能会导致缓冲区溢出漏洞。
任何人都可以在“ afile”末端协助使用壳牌码,然后将shellcode存储在堆栈上以运行?请...