缓冲区溢出漏洞实验
一、实验目的:
-
什么是缓冲区溢出?
- 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。
-
缓冲区溢出的后果?
- 这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。
-
缓冲区溢出的原因?
- 这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
二、实验步骤:
- 安装用于编译 32 位 C 程序的软件包
- 初始设置
- shellcode
- 漏洞程序
- 攻击程序
- 攻击结果
三、实验内容:
- 打开云虚拟机,进入终端页面:
在 /tmp 目录下新建一个 exploit.c 文件:
建议直接下载代码wget http://labfile.oss.aliyuncs.com/courses/231/exploit.c
-
注意:x??x??x??x?? 处需要添上 shellcode 保存在内存中的地址,因为发生溢出后这个位置刚好可以覆盖返回地址。
-
计算方法: strcpy(buffer+100,shellcode) 这一句告诉我们,shellcode 保存在 buffer + 100 的位置。
-
gdb调试
gdb stack
disass main
-
设置断点
# 设置断点 b *0x080484ee r i r $esp
-
编译 exploit.c 程序
gcc -m32 -o exploit exploit.c
- 观察攻击结果
-
先运行攻击程序 exploit,再运行漏洞程序 stack,观察结果!
-
攻击成功:
-
攻击失败——“段错误”:
注意:如果不能攻击成功,提示”段错误“,那么请重新使用 gdb 反汇编,计算内存地址。
四、实验心得体会:
-
已经初步懂得缓冲区溢出攻击的基本原理和步骤,在编程中应该养成良好的编程习惯,降低被攻击的风险。
-
实验难度较高,虽然有步骤教学,但还是进行了长达四个小时的三次实验进行,遇到了各种各样的问题,在查阅大量资料和询问同学后才将实验做完。
-
只要愿意花费时间,愿意下功夫,就能把实验做完、做好。
-
在学习过程中要擅于询问老师和同学,更要学会如何查阅相关资料,帮助自己更好地解决问题。
-
不足之处,欢迎评论!!!
-
另外:建议多准备两块钱做实验......