2023年11月信息安全工程师(模拟题二) 下午试卷之三
摘要:对于【信息安全工程师】软考考试而言,试题无疑是最重要的学习资料之一。在软考备考过程中,吃透试题、掌握试题所考知识点、熟悉试题的出题思路,对我们提升分数的效果是最明显的,通过对试题的反复练习,还可以查漏补缺。今天,给大家带来【2023年11月信息安全工程师(模拟题二) 下午试卷】部分试题的详解,一起来看看吧~1、【问题3】(8分)王工调阅了系统部分后台处理代码,发现密码验
1、【问题3】(8分)王工调阅了系统部分后台处理代码,发现密码验证阶段存在安全漏洞,代码如下:#define PASSWORD "1234567"
int verify_password (char *password)
{
int authenticated;
char buffer[8];
authenticated=strcmp(password,PASSWORD);
strcpy(buffer,password);
return authenticated;
}
main()
{
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;
}
}
}(1)请问上述代码存在哪种漏洞?(2)为了进一步验证自己的判断,王工在密码输入时输入对应密码,发起测试。请问王工最有可能输入的密码是什么?备选项A. 1234567 B. 12345678C. 2345678 D. 7654321(3)该类型漏洞带来的危害有哪些?(4)预防该类型漏洞带来危害的手段有哪些?
答案:(1)缓冲区溢出
(2)B
(3)程序崩溃导致拒绝服务、跳转并且执行一段恶意代码
(4)利用编译器的边界检查,来实现缓冲区的保护、在程序指针失效前进行完整性检查、通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码、强制写正确的代码的方法等等。
答题解析:
该漏洞是缓冲区溢出攻击漏洞。
执行到函数verify_password时栈帧状态如下图:
因此只需要让buffer数组越界,buffer[8],buffer[9],buffer[10],buffer[11]写入authenticated中。authenticated为0时验证成功,反之失败,因此只需输入的密码超过7个字符,那么越界的ASCII码就会修改authenticated的值。如果恰好可以使authenticated值变为0,那么就可以通过验证。B选项输入了是8位ASCII码,字符串数据后面有NULL(0)作为结尾,因此加入输入“12345678”的时候,就可以填满buffer并且把null写入int authentication中的地位中,从而将0x00000001修改为0x00000000,这样,在主函数判断authentication时,时钟判定为验证通过。
缓冲区溢出攻击,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。而缓冲区溢出中,最为危险的是“堆栈溢出”,因为入侵者可以利用“堆栈溢出”,在函数返回时,改变返回程序的地址,让其跳转到任意地址。这带来的危害,一种是程序崩溃导致拒绝服务;另外一种就是跳转并且执行一段恶意代码,比如:得到shell,然后为所欲为。
查看完整试题>>>
软考资料: 2024年软考论文范文> 软考考试核心重点难点汇总> 查看更多>
备考刷题:章节练习+每日一练> 软考历年试题+模拟题>查看更多>