网站大量收购闲置独家精品文档,联系QQ:2885784924

网络安全实验三.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

3.1堆溢出实验

一、实验目的及任务

1、学习溢出工具的代码构成。

2、学习堆溢出的原理。

二、实验环境

1、本地主机或Windows实验台

2、实验工具:溢出演示工具、os命令行、C语言编译器

三、实验方案/过程

使用自己的笔记本完成的下面实验:

输入长度为30字节的字符串时,效果如下:

输入长度为32字节的字符串时,效果如下:buf2读到buf1的\0,报错

输入字符串的长度为大于32个字节和额外的字符串hostility,buf1一直读到hostility\0,buf2在遇到hostility\0就认为结束,覆盖了原来的文件名。

四、思考题

1、解读程序正常运行后的结果。

yingfile文件中成功写入输入的字符串,buf2正常显示文件名

2、解读发生了溢出的程序运行结果,分析原因。

输入字符串长度为32字节时,buf2读到buf1的\0,认为内容为空,无法正常打开文件。

输入字符串长度为32字节和hostility后,buf1在hostility后才找到\0,buf2读到buf1溢出的\0后文件名被修改。

五、实验总结及收获

本次实验我遇到的第一个问题是根据自己的代码没有正常模拟堆溢出的效果,在查阅资料并理解代码逻辑后,我发现大概率是由于自己笔记本中装的devc++的版本与代码中的使用不匹配导致无法正常溢出,通过在自己的笔记本中卸载32位并重装的64位的devc++版本重新运行后成功实现指导书中描述效果。

通过本次实验,我对堆溢出有了更深刻的理解,能够自己分析是否会溢出及溢出的结果,也对C语言中学习的知识进行了串接,换行符会被解析为\0而字符数组会在遇到\0时认为结束,这便是溢出会造成的原因。

3.2栈溢出实验

一、实验目的及任务

1、利用栈溢出修改变量值。

2、利用栈溢出修改函数返回地址,运行恶意代码。

二、实验环境

1、Linux实验台(CentOS)

2、gcc和gdb工具

三、实验方案/过程

1、修改变量值

(1)新建0134p1.c文件

(2) 编辑0134p1.c文件

(3) 查看编辑结果:

(4) 生成可执行文件:

(5)运行执行文件

(6)输入11个字符制造栈缓冲区溢出,以修改x所在地址空间的值

(7)利用perl命令输入适当的字符串,将x的值修改为任意指定的值,运行

2、修改函数返回地址,运行恶意代码。

(1)新建0134p2.c文件,输入示例程序2,生成可执行文件0134p1.c

(2)运行可执行文件并查看结果,bar的函数入口地址为0(3)随意输入多个字符制造栈溢出

(4)构造输入字符串,修改foo函数的返回地址为bar函数的入口地址

四、思考题

1、指出程序1的栈结构:重点是buf和x的存储方式,分析溢出原理。

从栈底到栈顶的布局依次为main函数调用、funtion函数调用、传入参数str字符指针、buf[0]~buf[9]、x、返回地址

由于c语言中没有边界检查,buf长度为10,若输入长度大于10的字符会把x的值覆盖,如果继续放更多的字符甚至会覆盖funtion函数的返回地址。

2、指出程序2的栈结构:重点是foo返回地址有关的情况,分析溢出原理(可借助gdb命令)。

从栈底到栈顶的布局依次为main函数调用、foo函数调用、传入参数input、buf[0]~buf[9]、返回地址。

buf数组长度为10,如果数组输入超过10个字符由于c语言不检查溢出会把返回地址覆盖掉,第一次由于是随意输入的长度超过10的字符,只是提示段错误,第二次因为将bar函数的入口地址放在了溢出位置刚好把返回地址覆盖为bar函数的入口,就对程序进行了攻击。

五、实验总结及收获

本次实验遇到的主要问题是对程序二的第二个应用的分析,尽管自己在实验室的电脑中按照步骤实现了该效果,但是自己并不明白为什么bar函数没有被任何函数调用,但却执行了。在询问同学后解决了该问题,正是由于溢出把foo函数的返回值修改成了bar函数的入口地址才导致程序可以进到bar函数里面实施攻击。而这都建立在执行./0134p2AAAAA这条指令获取bar函数的入口地址和foo函数的返回地址上。

通过本次实验,我对函数的返回地址有了更深的理解,也提醒我在编程时应该尽可能选择有溢出判断的方法,避免被恶意用户通过溢出替换返回地址恶意攻击的问题。

您可能关注的文档

文档评论(0)

青铜 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档