- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- GBT5680-2023 奥氏体锰钢铸件.pdf VIP
- 从课堂到奥数7年级.pdf VIP
- 2025年南通市第一人民医院医护人员招聘参考题库含答案解析.docx VIP
- 2025年西湖区专职社区工作者及两新专职党务工作者招聘62人笔试备考试题及答案解析.docx VIP
- CECS69-2011 拔出法检测混凝土强度技术规程.pdf VIP
- 广东省水利水电工程设计概(估)算编制规定_广东省水利厅 发布_2017_1.pdf
- SN_T 5417-2024 进口再生铜合金原料检验规程.docx
- 一汽丰田爱车养护课堂-空调滤芯-3.14.pptx VIP
- 消防安全培训记录.doc VIP
- 高级钳工技师实操试题.docx VIP
文档评论(0)