第三讲缓冲区溢出
n1 缓冲区溢出问题简介n2 几种典型的缓冲区溢出n3 防范措施
缓冲区溢出php 数组字符串转数组
1 缓冲区溢出问题简介
缓冲区溢出是一种常见的漏洞.
据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上.
这种错误的状态发生在写入内存的数据超过了分配给缓冲区的大小的时候,就像一个杯子只能盛一定量的水,如果放到杯子中的水太多,多余的水就会一出到别的地方。由于缓冲区溢出,相邻的内存地址空间被覆盖,造成软件出错或崩溃。如果没有采取限制措施,可以使用精心设计的输入数据使缓冲区溢出,从而导致安全问题。
缓冲区溢出
缓冲区溢出问题的历史
很长一段时间以来,缓冲区溢出都是一个众所周知的安全问题, C程序的缓冲区溢出问题早在70年代初就被认为是C语言数据完整性模型的一个可能的后果。这是因为在初始化、拷贝或移动数据时,C语言并不自动地支持内在的数组边界检查。虽然这提高了语言的执行效率,但其带来的影响及后果却是深远和严重的。
•1988年Robert T. Morris的finger蠕虫程序.这种缓冲区溢出的问题使得Internet几乎限于停滞,许多系统管理员都将他们的网络断开,来处理所遇到的问题. •1989年Spafford提交了一份关于运行在VAX机上的BSD版UNIX的fingerd的缓冲区溢出程序的技术细节的分析报告,引起了部分安全人士对这个研究领
域的重视
•1996年出现了真正有教育意义的第一篇文章, Aleph One在Underground发表的论文详细描述了Linux系统中栈的结构和如何利用基于栈的缓冲区溢出。
缓冲区溢出
Aleph One的贡献还在于给出了如何写开一个shell的Exploit的方法,并给这段代码赋予shellcode的名称,而这个称呼沿用至今,我们现在对这样的方法耳熟能
详--编译一段使用系统调用的简单的C程序,通过调试器抽取汇编代码,并根据需要修改这段汇编代码。
•1997年Smith综合以前的文章,提供了如何在各种Unix变种中写缓冲区溢出Exploit更详细的指导原则。
•1998年来自“Cult of the Dead Cow”的Dildog在Bugtrq邮件列表中以Microsoft Netmeeting为例子详细介绍了如何利用Windows的溢出,这篇文章最大
的贡献在于提出了利用栈指针的方法来完成跳转,返回地址固定地指向
地址,将Windows下的溢出Exploit推进了实质性的一步。
缓冲区溢出
缓冲区溢出发生的原因
•不良的编程习惯,比如忽略检查用户输入参数,以及对数组边界进行检测等等.
•C语言包括C++语言为程序设计人员提供许多”搬起石头砸自己的脚”的方法,缺乏安全可靠,简便易行的字符串处理函数,要知道,BASIC, Java, Perl, C#以及其他的某些高级语言会在运行时对数组边界进行检测,而且他们还具有方便的内置字符串数据类型

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。