基于缓冲区溢出的攻击

基于缓冲区溢出的攻击

ID:37730394

大小:1.45 MB

页数:15页

时间:2019-05-29

基于缓冲区溢出的攻击_第1页
基于缓冲区溢出的攻击_第2页
基于缓冲区溢出的攻击_第3页
基于缓冲区溢出的攻击_第4页
基于缓冲区溢出的攻击_第5页
资源描述:

《基于缓冲区溢出的攻击》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验题目:基于缓冲区溢出的攻击实验目的:1.掌握缓冲区溢出的原理;2.理解汇编语言,通过汇编语言防范缓冲区溢出的漏洞。实验环境:个人电脑、linux发行版本、ubuntu环境实验内容及操作步骤:1.开始时对于本次实验的内容并不清楚,通过查找资料了解,这个实验主要是模拟缓冲区溢出。实验中涉及到3个可执行的二进制文件bufbomb,hex2raw,makecookie。bufbomb是进行缓冲区实验的目标程序,既然是缓冲区溢出实验,肯定得有一个导致缓冲区溢出的条件,这个实验是通过类似于c语言中的gets函数的Gets读取一行数据到固定大小的缓冲区,而当

2、我们的输入超过了缓冲区的大小时,Gets没有任何的边界检查,超过缓冲区的数据就会覆盖内存中用作其它用途的数据,从而改变程序的行为,而如果gets从终端读取时,无法输入一些不可打印的数据,比如想输入控制字符0x09,于是就有了hex2raw这个程序,这个程序将16进制表示的字节转换成二进制字节数据。makecookie主要是为了防止学生直接copy别人答案用的,每个学生有一个唯一的提交作业的userid,makecookie为不同的userid计算出不同的cookie值。userid要通过命令行参数传给bufbomb,实验中我们在内存某个区域中用自己

3、的cookie值覆盖原来的数据,bufbomb中会有一个validate函数的调用来比对传入的cookie值与命令行传入的userid计算得出的cookie是否相等,如果相等,作业是有效的,否则作业是无效的。 (参考资料:http://my.oschina.net/gallant/blog?disp=2&p=1&catalog=271778)2.因为对缓冲区溢出不了解上网查找资料。首先要介绍函数调用过程及栈的相关操作。我们称调用其他函数的函数为Caller,被调用的函数为Callee。图中紫色部分为Caller的栈区,浅蓝色部分为Callee的栈区

4、。A和B两个函数,A调用B,那么A就是Caller,B就是Callee。图中紫色部分即为A的栈区, A在调用B之前,需要将参数和返回地址压栈,图中“Arguments”对应的就是2(因为i=2);“Returnaddress”是函数B运行之后的返回地址,即调用函数B后执行的下一条指令,这里应当是printf("thisisfunca.")这条指令的地址。浅蓝色部分是B的栈区,字符串s就在“Localvariables”中维护,因为s是函数B的局部变量。缓冲区溢出就是说输入的s过长,长度超出了s本身的容量,覆盖掉了“Returnaddress”,

5、导致程序不能正常执行,甚至转为执行其他命令。3.通过函数名以及阅读buflab.pdf文件,此次试验过程类似于LAB3的拆弹过程。在命令终端窗口查看汇编代码并进行输入等处理不方便,使用objdump–dbufbomb>2.txt将汇编代码输出到当前文件夹中一个自动生成的2.txt的文件中。(此方法借鉴了LAB3中的方法)1.开始“拆弹”:(根据buflab.pdf文件提示和网上资料http://my.oschina.net/gallant/blog?disp=2&p=1&catalog=271778)Level0:Level0是要让getbuf函数

6、完成后直接进入smoke函数,而由实验原理可知我们只要输入44字节的无用字符再在最后输入smoke的入口地址就可以了,运用gdb反汇编查看编代码,我们可以看到smoke的入口地址为0x08048e0a(由于服务器系统是小端规则我们输入的顺序为0b8e0408)注:0a是回车,我们输入这个字符不会得到正确的结果)建立文档lijia.txt,所以输入的字符串是:00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b8e0408输

7、入命令./hex2raw

8、./bufbomb–ulijia结果如图:测试通过!在这一关中if(val==cookie)的语句在调用getbuf函数的后面,因此实际上没有用到我们的userid来计算cookie比对。Level1:本关要求我们进入函数fizz。通过makecookie计算出userid的cookie值.cookie值为4169155f。查看fizz的代码在这一关中通过getbuf函数输入参数val,参数val应当与cookie相同,然后传递给fizz函数。由fizz的汇编代码可得,push%ebp之后,%esp与%

9、ebp指向同一个位置,而此时用%ebp+8表示输入的参数。而我们由上面fizz函数的代码可得,要使cookie值等于参数值

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

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

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