实验二栈溢出实验实验内容】利用栈溢出修改变量值利用栈溢出修改函数返回地址,运行恶意代码【实验类型】验证型实验【实验学时】3 学时【实验原理】如果向栈上声明的缓冲区中复制数据,但是复制到数据量又比缓冲区大的时候,就会发生栈溢出。在栈上声明的各种变量的位置紧临函数调用程序的返回地址。若用户输入的数据未经验证就传递给 strcpy 这样的函数,则会导致变量值被攻击者指定的值所改写或调用函数的返回地址将被攻击者选择的地址所覆盖,打乱程序正常运行流程,转而执行恶意代码。防范栈溢出的有效方法有:禁止栈执行,从而阻止攻击者植入恶意代码;编写安全可靠的代码,始终对输入的内容进行验证;利用编译器的边界检查实现栈保护。【实验环境】Linux 实验台(CentOS)gcc 和 gdb 工具【实验步骤】打开 Linux 实验台,输入用户名和口令,进入系统。一、修改变量值(1) 新建 stackoverl.c 文件:touchstackoverl.c;(2) 编辑 stackoverl.c 文件:vimstackoverl.c,按 i 键进如编辑模式,输入示例程序 1,按 Esc 键退出编辑模式,进入命令行,输入:wq 保存并退出文件编辑,上述过程如图 3.5.3-7 和图 3.5.3-8 所示;CentOSre1ease5.2(Final)Kerne12.6.18-9Z.E15onani6B6匚alhostlogin:rootPassword:Lastlogin:Ued.Ju12118:46:19onttyl[rrs^t(?locaIhf.ist.~]fttouchstack^ver1.c[rootPlocalhost~lauiMstackouerl.c“ci 瓷funct\on(char*str)!tincludevoidfunction(char*;stri)(chartiiif[181;intx=10:strcpy(bufjstr):■;printf('px=xd\n'p,買工;}intmain(intarg'cPchar*argu[J)funciion(argv[1JZ;:return0;(4)生成可执行文件:gccstackoverl.c-ostackoverl;⑸ 运行执行文件:./stackoverlABCDE,执行结果如图 3.5.3-10 所示;[root@localhost"]Sgjccstackoverl.c-Dstackcuer1[root@loc^lhost'"]#.^stackoverlABCDEx=10⑹ 在内存中 x 紧邻 buf,所以输入 11 个字符制造栈缓冲区溢出,以修改 x 所在地址空间的值:./stackover1ABCDEFGHIJK,运行结果如图 3.5.3-11 所示;[roo 七@lociilhciw 七~Jit./xta 匚kovurlHBCDEFGHIJ...