阅读下列说明,回答问题1至问题4,将解答写在答题纸的对应栏内。 【说明】 基于Windows 32位系统分析下列代码,回答相关问题。 void Challenge(char*str) { char temp[9]={

admin2018-05-26  78

问题 阅读下列说明,回答问题1至问题4,将解答写在答题纸的对应栏内。
【说明】
    基于Windows 32位系统分析下列代码,回答相关问题。
    void Challenge(char*str)
    {
        char temp[9]={0};
        strncpy(temp,str,8);
        printf("temp=%s\n",temp);
        if(strcmp(temp,"Please!@")==0){
           printf("KEY:******");
        }
    }
    int main(int argc,char*argv[])
    {
        char buf2[16];
        int check=1;
        char buf[8];
        strcpy(buf2,"Give me Key!!");
        strcpy(buf,argv[1]);
        if(check==65)    {
            Challenge(buf);
        }
        else {
            printf("Check is not 65(%d)\n Program terminated!!\n",check);
        }
        return 0;
    }
上述代码所存在的漏洞名字是什么,针对本例代码,请简要说明如何修正上述代码以修补此漏洞。

选项

答案缓存溢出或者栈溢出。 对输入参数的长度进行检查。

解析 上述代码是典型的对输入的变量没有进行长度检测,导致数据越界存储,也就是缓冲区溢出或者堆栈溢出。针对本例代码,只要限定拷贝进入buf数组的长度即修补此漏洞。
转载请注明原文地址:https://kaotiyun.com/show/1uTZ777K
0

最新回复(0)