缓冲区溢出实践 缓冲区溢出实践

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 所使用)和堆栈分割方法。