20181317缓冲区溢出漏洞实验
20181317都家林缓冲区溢出实验
缓冲区溢出原理
• 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。
实验内容
- 在自己的电脑中完成https://www.shiyanlou.com/courses/231缓冲区溢出漏洞实验
实验步骤
- 实验楼提供的是 64 位 Ubuntu linux,而本次实验为了方便观察汇编语句,我们需要在 32 位环境下作操作,因此实验之前需要做一些准备。输入命令安装一些用于编译 32 位 C 程序的软件包:
2.首先利用sudo sysctl -w kernel.randomize_va_space=0指令关闭地址空间的初始化,利用rm sh和 ln -s zsh sh让zsh代替bash,进入linux32系统。在 /tmp
目录下新建一个 stack.c
文件,输入代码,并编译。
3.在 /tmp
目录下新建一个 exploit.c
文件,输入攻击程序,并用gdb调试,esp 中就是 str 的起始地址,我们在地址 0x080484ee
处设置断点,最后获得的这个 0xffffcfb0
就是 str 的地址。根据语句 strcpy(buffer + 100,shellcode);
我们计算 shellcode
的地址为 0xffffcfb0
+ 0x64
= 0xffffd014
源代码: 修改后代码:
gdb调试1:蓝色为??str起始地址 gdb调试2:蓝色为x??修改的地址
4.再次编译exploit.c,并运行攻击程序exploit和漏洞程序stack,查看自己的权限为root权限。