阅读下列说明和图,回答问题,将解答填入答题纸的对应栏内。 【说明】 信息系统安全开发生命周期(security Development Life Cycle,SDLC)是微软提出的从安全角度指导软件开发过程的管理模式,它将安全纳入信息系统开发生命周期的所有

admin2021-03-13  38

问题 阅读下列说明和图,回答问题,将解答填入答题纸的对应栏内。
【说明】
信息系统安全开发生命周期(security Development Life Cycle,SDLC)是微软提出的从安全角度指导软件开发过程的管理模式,它将安全纳入信息系统开发生命周期的所有阶段,各阶段的安全措施与步骤如图5.1所示。

有下述口令验证代码:
    #define PASSWORD"1234567"
    int verify_password(char *password)
    {
      int authenticated;
      char buffer[8];
      authenticated=strcmp(password,PASSWORD);
      strcpy(buffer,password);
      return authenticated;
    }
    int main(int argc,char *argv[])
    {
      int valid flag=0;
      char password[1024];
      while(1)
      {
        printf("please input password:");
        scanf(“%s”,password);
        valid_flag=verify password(password);//验证口令
        if(valid flag)//口令无效
        {
          printf(“incorrect password!\n\n”);
        }
        else//口令有效
        {
          printf(“Congratulation!  You have passed the verification!\n”);
          break;
        }
      }
其中main函数在调用verify_password函数进行口令验证时,堆栈的布局如图5.2所示。

请问调用verify_password函数的参数满足什么条件,就可以在不知道真实口令的情况下绕过口令验证功能?

选项

答案完整8个字符即可。

解析 题目中的图5.2己经给出了变量buff和authenticated在堆栈中的布局,由于图中地址是上低下高,strcpy函数在完成拷贝操作时,会从buff数组的第一个元素开始向authenticated变量方向写入拷贝的内容,因此只要写入完整的8个字符再加上拷贝结束自动加入的字符串结束标志“\0”,即可导致变量authenticated等于0,从而影响最终判断。
转载请注明原文地址:https://kaotiyun.com/show/YuTZ777K
0

最新回复(0)