Web安全 Buffer Overflow Attack实验

来源:互联网 发布:linux查看目录结构命令 编辑:程序博客网 时间:2024/06/05 05:33

Assignment 7 

Buffer Overflow Attack





一开始我直接复制粘贴了蔡老师的代码,结果一直得不到预期的输出,但是之后我再看了看蔡老师的课件,又去网上重新找了找资料,完成了这次实验。

核心思想:

当程序执行strcpy时,程序将char[]中的内容拷入buffer中,但是buffer只能容纳一定容量的Bytes。由于C语言不进行边界检查,所以结果是buffer后面的字节内容被覆盖掉了,其中包括了ebp, ret地址,在这个例子中就是i r命令查看到的地址,那么如果要使它变成我们想要跳转到的bug函数地址,则要把char[]内容改造——那么沿用蔡老师原来的代码自然就不行了,我们得自己更该char[]的内容,即更改为bug的函数地址。然后运行程序,自然就会跳转到程序内按规定不能到的地方。


实验步骤:


首先直接编译运行程序,注意调整random_va_space与-fno-stack-protector。运行第一次。 





使用disass main 命令反汇编main函数:(注意:esp的地址就是char[]的地址)



找到 copy下面一行(高亮的) 0x08048462,即是copy函数的入口地址。



使用命令i r 查看寄存器信息,找到esp(char[]的地址),查看该地址有那些内容。我们发现是正常的0x08048462,说明还是copy函数的入口地址(not yet overflowed) 




为了使我们能够顺利转到bug函数,我们使用disass bug来查看它的入口地址,如图: 

发现是0x08048439




为了顺利跳转到这个地址,我们更改代码如下(注意\x39\x84\x04\x08): 




为了方便查看buffer是如何溢出的,我给strcpy后一句打上了断点,见图:


打断点后运行程序: 




由于打上了断点,所以我们可以知道程序运行到这里已经执行了strcpy函数(把char[]的内容赋值到buffer,造成溢出),此时我们可以再次调用i r查看寄存器内容:(此时高亮部分已经被溢出赋值为bug的入口地址0x08048439) 




最终查看输出结果:

 



这就是buffer overflow如何造成攻击的。

0 0