缓冲区溢出笔记(2006年6月8日)

时间:2022-04-18 11:47:58
   1988年11月2日,伴随着一种叫做“Morris Worm”的蠕虫病毒的诞生,一种新形式的计算机以及网络威胁出现了,这就是缓冲区溢出。之后,缓冲区溢出漏洞在许多地方被发现,包括各种服务程序以及应用程序。众多的含有漏洞的程序以及对这些漏洞的各种利用方式让人们意识到缓冲区溢出的巨大危害。通常,利用缓冲区溢出的漏洞,可以使得攻击者获得一个远程主机的shell,或者活得超级管理员的权限。总之,缓冲区溢出被普遍应用于远程以及本地的攻击。
 
第一章  缓冲区溢出的概述

   大部分基于缓冲区漏洞的利用,都有一个共同的目的,就是迫使恶意的代码被运行。原理很简单,将恶意指令存放于溢出的缓冲区中,从而改变部分内存单元的内容,最终导致程序执行期待之外的功能。
   现在,让我们来了解一下程序是如何被加载到内存的,并且熟悉一下缓冲区的概念。随后,我们将聚焦两种溢出的利用,栈溢出和堆溢出。

1.1关于内存加载的问题

  
当一个程序被执行的时候,这个程序的各种元素(指令、变量...)会以一种特定的结构加载到内存里。
   在内存的最高区域,存放者程序的环境参数:env strings、arg strings、env pointer。接下来的一部分内存分成两个小区域,一个是栈,一个是堆,它们都是在运行时动态分配的。