实验二 堆栈缓冲区溢出实验
一、 实验目的
了解堆栈缓冲区溢出原理
掌握vc++6.0使用方法
熟悉堆栈缓冲区溢出防范常用的方法
二、 实验原理
- 堆栈的概念
堆栈是一个在计算机科学中经常使用的抽象数据类型。堆栈中的物体具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先处(LIFO)队列。堆栈中定义了一些操作,两个最重要的是PUSH和POP。PUSH操作在堆栈的顶部加入一个元素。POP操作相反,在堆栈顶部移去一个元素,并将堆栈的大小减一。 - 堆栈缓冲区溢出原理
函数调用时,返回地址存放在堆栈中,局部变量也存放在堆栈中;如果局部变量中有一个字符数组,并且该程序使用了危险的函数来操纵该字符数组,那么就可以通过向该程序传递超长的字符串来使得该字符数组“溢出”,从而达到覆盖返回地址、执行恶意代码的目的。 - 防范措施:
引入新的安全的函数,取代旧的、有缺陷的函数。较新的c库中都带有 strncpy ,fgets , sscanf 等函数。
插入保护码,这些保护码被称为“金丝雀”。某些程序包可以与编译器配套使用,在返回地址与局部变量之间插入一些保护码,导致入侵者在覆盖返回地址的时候,首先覆盖了保护代码。程序运行时会检测这些保护码,如果这些代码被改变,程序就会马上终止。检测保护码的代码是编译器加进去的,程序员无需为此操心。
真正有威胁的攻击来自shell2 code,但shell2code通常要求在堆栈中植入一段代 码并执行,这就需要堆栈是可执行的。一些操作系统 (如新版的Solaris)可以将堆栈设置为不可执行的。Intel 的 Itanium 处理器采用了一种与众不同的途径来避免基于堆栈的缓冲区溢出攻击,即为返回地址设置了一个寄存器,使返回地址不再放到堆栈中,所以无论如何溢出,也不会影响返回地址的值。
三、 实验环境 - 操作系统
操作机:Windows_7
操作机默认用户名:administrator,密码:123456 - 实验工具
Microsoft Visual C++ 6.0
Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)是Microsoft公司推出的以C++语言为基础的开发Windows环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过的设置就可使其生成的程序框架支持数据库接口、OLE2.0,WinSock网络。
四、 实验步骤及内容
1.1打开目录D:\2、网络攻防\2、网络入侵\30系统漏洞攻击\2.堆栈缓冲区溢出实验\工具包,解压vc安装包,安装vc6。