缓冲区溢出漏洞实验
一、实验描述
缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
二、实验准备
- 系统用户名shiyanlou,密码shiyanlou
- 实验楼提供的是64位Ubuntu linux,而本次实验为了方便观察汇编语句,所以我们需要输入命令安装一些用于编译32位C程序的东西。
- 首先编写漏洞程序 stack.c
- 程序会读取一个名为“badfile”的文件,并将文件内容装入“buffer”。
- GCC编译器有一种栈保护机制来阻止缓冲区溢出,所以我们在编译代码时需要用
–fno-stack-protector
关闭这种机制。-z execstack
用于允许执行栈。
- 接着需要用gdb反汇编stack计算地址
- 但是从此处开始我得到的结果和实验楼开始有了不一样。
- 实验楼得到的地址为0xffffd1b0,经过计算得到0xffffd214。而我得到的结果为0xffffd250,经过计算得0xffffd2b4。
- 下一步是编写攻击程序exploit.c
- 这里要注意将 strcpy语句后四位改成你的地址。
- 然后用
gcc -m32 -o exploit exploit.c
命令编译攻击程序。
- 最后运行可执行的攻击程序,再运行可执行的漏洞程序得到结果。
- 但是我发现我得不出结果
- 应该是漏洞程序有问题,但是我反复对照了实验楼的源代码,并没有发现不一样的地方。又重新按步骤做了一遍,还是得不出结果。这里我会再询问其他同学。