缓冲区溢出实践
20191331lyx
一、实验环境
实验楼 https://www.lanqiao.cn/courses/231
二、实验准备
关闭内存地址空间随机化
三、开始实践
进入32位linux环境
本次实验的shellcode
编写漏洞程序
关闭gcc编译保护
精确定位esp寄存器位置
在代码中插入esp寄存器地址
进行缓冲区溢出攻击
实验验证原理
-
缓冲区溢出:缓冲区溢出是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。
-
C语言编程中,一些不作边界检查的字符串拷贝函数(如strcpy)容易造成缓冲区溢出。
常见的缓冲区溢出防御手段
-
基于探测方法(canary)的防御。这包括 StackGuard(由 Immunix 所使用)、ProPolice(由 OpenBSD 所使用)和 Microsoft 的 /GS 选项。
-
非执行的堆栈防御。这包括 Solar Designer 的 non-exec 补丁(由 OpenWall 所使用)和 exec shield(由 Red Hat/Fedora 所使用)。
-
包括 libsafe(由 Mandrake 所使用)和堆栈分割方法。