试题五 阅读下列说明和代码,回答问题1和问题2,将解答写在答题纸的对应栏内。 [说明] 某一本地口令验证函数(C语言环境,X8632指令集)包含如下关键代码:某用户的口令保存在字符数组origPassword中,用户输入的口令保存在字符数组userPass

admin2017-11-28  23

问题 试题五
阅读下列说明和代码,回答问题1和问题2,将解答写在答题纸的对应栏内。
[说明]
某一本地口令验证函数(C语言环境,X8632指令集)包含如下关键代码:某用户的口令保存在字符数组origPassword中,用户输入的口令保存在字符数组userPassword中,如果两个数组中的内容相同则允许进入系统。
…………………………………………………………………………
[…]
charorigPassword[12]="Secret";
charuserPassword[12];
[…]
gets(userPassword);/*读取用户输入的口令*/
[…]
if(Strncmp(origPassword,userPassword,12)!=0)
{
printf("Passworddoesn’tmatch!\n");
exit(-1);
}
[…]
/*口令认证通过时允许用户访问*/
[…]
…………………………………………………………………………
[问题2]
上述代码存在什么类型的安全隐患?请给出消除该安全隐患的思路。

选项

答案存在缓冲区溢出攻击的安全隐患。解决思路是检查用户输入的口令的长度信息。

解析 随着软件安全问题的日益突出,各类安全漏洞层出不穷,本题旨在表明安全开发和代码安全的重要性。本题针对C程序设计中最常见的数据越界导致溢出攻击进行知识点的设置,本题考点也是最基础的堆栈溢出漏洞。
[问题1]
根据变量origPassword和userPassword两个变量在堆栈中的布局,可知一旦给origPassword数组提供超过12个字符的内容即可覆盖到userPassword变量,再加上后续的比较函数采用定长的12个字符来比较,因此只要通过gets函数给origPassword和userPassword两个数组提供一样的内容即可。
[问题2]
上述代码的安全问题是典型的堆栈溢出漏洞,可以对数组提供的内容进行长度检验,避免数组越界写入,防止安全漏洞。
转载请注明原文地址:https://jikaoti.com/ti/YPx7FFFM
0

相关试题推荐
最新回复(0)