缓冲区溢出攻击与防御

             缓冲区溢出攻击是一个技巧性非常强的攻击方法,面对的是一个漏洞.破坏的是程序的堆栈.
              在内存中,程序运行的时候,会动态分配大量内存给动态变量,如果分配完动态变量的内存,放入的却是超出分配给他的内存大小的时候,它就会溢出.可以这样说,溢出发生在缓冲区分配给变量的内存中.程序的数据段是产生溢出的根源,因为动态的数据是存在堆栈中的.数据段存放的是静态数据.还有一段是程序段.
               当发生溢出的时候,实际上动态数据照样分配内存单元,除自己的位置外,他开始侵站其他的位置,并覆盖了这些位置.如果返回地址也被覆盖,那么在执行的时候,返回地址已经改变,程序读取返回地址数据已经不是原来的正确的数据了,而是被覆盖后的,我们精心设计就是为了控制这个返回地址,和返回地址的执行代码,从而达到我们的目的.(也就是肯定要执行返回地址内容,那么我们把返回地址的内容修改成我们要得代码::这样就会控制这个系统了).
 
              缓冲区溢出攻击的步骤和制定方法:
1、准备一段可以调出一个SHELL的机器码形式的字符串。我想这是现成的。称之为SHELLCODE。
2、申请一个缓冲区,并将机器码填入缓冲区的低端。
3、估计机器码在堆栈中的起始位置,并将这个位置写入缓冲区的高端。
4、将这个缓冲区作为系统的一个有着缓冲区溢出错误的程序的入口参数,并执行这个有错误的程序。
 
                或许程序高手知道:1、可以调出一个SHELL的机器码形式的字符串。
2、如何申请缓冲区。
3、怎样把机器码填入缓冲区的低端。
4、怎样估计在堆栈中的位置。
5、怎样把数据写如缓冲区的高端。
6、入口参数。。。。。
 
 
                 我是文盲!!!!!!!!!!
缓冲区溢出攻击的防御措施。
 1、系统管理方面的。
关闭不需要的特权程序。
及时给系统漏洞打补丁。
2、软件开发过程中的策略。
发生三要素:数组没有边界检查而导致的缓冲区溢出。
函数的返回地址或函数指针被改变。
植入代码被成功执行。
编写正确的代码。
缓冲区不可执行。?????????
改进C语言函数库。
使堆栈向高地址增长。程序指针完整性检查。
利用编译器将静态数据段中的函数地址指针存放地址和其他数据的存放地址分离。

你可能感兴趣的:(网络,职场,休闲)