图3.5.4
地址依次为0x55683c28、0x55683c78、0x55683bb8、0x55683c38、0x55683ba8,选择其中的最小值0x55683c28,测试发现第二次失败,如图3.5.5:
图3.5.5
适当的修改地址值,修改为0x55683c80时,符合要求,故总的攻击字符串如图3.5.6所示:
图3.5.6
4. 实验结果:如图3.5.7所示,阶段五成功!
图3.5.7
3.3实验小结
通过本次实验对函数调用之间的堆栈关系有了一个更加直观的理解,在函数之间不断调用的过程中相应的堆栈也可以看作一个嵌套的过程,不断的保存上一层函数的ebp和返回地址。同时,对于溢出带来的后果也有了体会,虽然平时缓冲区不会那么简单就被溢出攻击,但是通过这个例子可以让我们初步了解溢出的危害。所以以后写代码的时候对这种字符串的输入输出要尽量避免这种情况的发
生。由于现代的系统都有随机的栈桢保护,保证每次运行程序的栈桢都不同,所以就算是第五阶段的缓冲区攻击也是不能运用到实际上的,不能简单的将这次的实验就当做实际的程序运行情况。
实验总结
这学期计算机系统的实验是几个实验中耗时最长也是最有趣有意义的的实验,与其他实验编写代码的形式不一样,体会和收获也就有很大的不同。
第一个实验要求我们是实现简单函数,但是只能使用限定的操作符。通过这个实验,对应数据的存放方式,位运算,补码运算,浮点数表示等都有了一个更深入的理解。这个实验逻辑的要求比较大,有时候经常一个很简单的运算在限制了操作符数以及操作符种类之后实现起来有了一定的难度。当然其中最困难的可能就是奇偶校验的函数了,苦思冥想都没有先出来好的方法,最后还是Google一下才发现了很好的思路。最后的一个浮点数函数更是让我深入的理解了IEEE754的标准。
第二个实验二进制炸弹就是简单的逆向工程了,由于之前有做过在Windows平台下的PE文件的逆向,所以分析起来还是比较简单的,但是由于OD不能支持ELF文件的逆向,而且实验要求必须在Linux下用gdb来实现。刚开始用gdb感觉很不友好,既不能直接看见源代码也不能看见各寄存器的值,但是后来Google发现了layout命令,于是后来效率越来越高。
第三个实验是缓冲区溢出攻击实验。我们利用一个缓冲区的溢出漏洞,来修改一个二进制可执行文件的运行时的行为。虽然没有具体的实用性,但是还是让我在函数调用时有了更深的理解,同时也意识到了缓冲区溢出的危险。
整体来说,整个实验处于一个在有趣中进行的,完成起来没有做别的实验一样的赶任务的感觉,有一种不破开这个炸弹我就不吃饭的想法,从来激发了我对实验的兴趣,在兴趣中完成实验让我对其中的知识点掌握更加牢固,达到了这次实验的目的。
相关推荐: