代码安全机制与实现技术(C)---答案.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
代码安全机制与实现技术(C)---答案.doc

东华大学2008 ~ 2009 学年第 二 学期期终试题 踏实学习,弘扬正气;诚信做人,诚实考试;作弊可耻,后果自负。 课程名称 代码安全机制与实现技术㈠ 简答题(每题10分,共20分) ⒈请简述缓冲区溢出的原理(3分)“缓冲区溢出”。 (4分)缓冲区溢出(3分)边界检查来实现缓冲区的保护,使得缓冲区溢出不可能出现⒉ 请简述shellcode在注入到被攻击代码后,主要有哪两种内存布局方式?这两种布局方式的各自特点是什么?如果shellcode的长度小于被其溢出的缓冲区,适于采用哪种布局方式? 答:(4分)(4分)(2分)㈡ 按要求回答问题(共80分) ⒈ 答: (5分)000012345678 (5分)The number of bytes formatted in the previous printf statement was 12 ⒉ 答:(1) (2)程序的输出为: aaaa 1 2 解释:第一个%s输出第一个参数buf所指向的地址中字符串,所以输出aaaa 第二个%d输出第二个参数i的值,所以输出1 第三个%d输出第三个参数j的值,所以输出2 第四个%x没有对应的输出参数,所以将buf数组的前四个字节作为整数输出, 所以输出616161 ⒊ 答:(1)在登录模块的用户名和口令输入框中分别输入字符串: OR = 即:一个单引号、一个空白、OR、一个空白、两单引号、=、一个单引号 (2) 按(1)中的输入,这个SQL语句是: select * from member where username= OR = and password= OR = 在where子句中,因为=的结果为true,所以username= OR =的结果为true,同理,password= OR =的结果为true,这样,SQL语句等同于select * from member where true and true,这样SQL语句不会验证用户名和密码文本框所输入的值,而是直接查询member数据表内的所有记录。 ⒋ 答:(1) (2)设计的输入数据是任意八个字节的字符串,例如: aaaaaaaa (3)输入的字符串加上尾部添加的\0字符共是九个字节,而password数组的长度是八个字节,所以,输入的八个字节的字符串保存到password数组中,而尾部的\0则溢出保存到valid_flag变量,使其值变为0。 ⒌ 答:(1) …………………… buf[12] 12字节字节字节…. n buff[1024] 前栈帧的EBP main的返回地址 (2)test函数中的for(i=0; in; i++) buf[i]=s[i];语句存在缓冲区溢出漏洞;如果传入test函数的s数组长度超过buf数组的长度,则发生数组越界,越界的数组元素就有可能破坏test函数栈中相邻变量的值(如yy、xx),甚至破坏栈中所保存的EBP值、返回地址等重要数据。 如果攻击者精心设计一段攻击代码作为输入,则这段恶意代码便会被植入到buf数组中;如果恶意代码的利用缓冲区溢出漏洞修改test的返回地址,使其指向buf数组的首地址,则当test函数返回时计算机便会去执行buf数组中保存的恶意代码。 (3)因为输入数据是从buf[0]开始存放的,从buf[ [0]到test函数的“前栈帧的EBP”共有12+4+4+4=24个字节,所以设计的攻击字符串由三部分组成: 前导是24个字节的填充数据(如24个字符a,\x61\x61。。。\x61);然后是jmp esp的地址0最后是shellcode代码:\x61 \xe4 \x52 \x2f \xa1\x75\xcd \x31 (4)在复制s数组元素到buf数组时,检查是否会发生数组越界。例如,作如下修改: 将 for(i=0; in; i++) buf[i]=s[i]; 改为 for(i=0; ini12; i++) buf[i]=s[i]; ⒍ (1) 程序输出是bbbbtest。 因为printf(bbbb %s);语句首先输出bbbb,然后再根据%s指示输出相应的字符串。但是由于printf(bbbb %s);语句缺少与%s相对应的输出参数,于是printf函数将栈中str首地址参数后的四个字节内容(str[0]-str[3])作为与%s对应的输出字符串的首地址,由于str[0]-str[3]中保存的是bbbb,其对应的十六进制是0x626

文档评论(0)

aiwendang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档