软件漏洞及缓冲区溢出

本文详细探讨了缓冲区溢出的发展历史、软件漏洞分类、原理及成因,以及如何利用和防范缓冲区溢出。重点介绍了栈溢出和堆溢出的利用方法,包括汇编语言、调试技术、Windows结构化异常处理(SEH)在漏洞利用中的作用,同时讲解了如何编写shellcode。最后,提到了缓冲区溢出的检测和防止措施。
摘要由CSDN通过智能技术生成

文章作者:davy_yan[E.S.T]
信息来源:邪恶八进制 中国 http://www.eviloctal.com/forum/

本文是我做溢出的一点心得,希望大家提出宝贵的修改意见,也希望对大家有一定的帮助:)

软件漏洞及缓冲区溢出

一、 缓冲区溢出的发展简史
1、 基础知识
(1) 汇编语言
(2) 反汇编原理及Intel机器指令编码体系
(3) 调试器原理
(4) 异常处理(SEH)
(5) 调试技术
(6) Windows API 开发
2、 软件漏洞分类
逻辑漏洞:如条件竟争。
编码漏洞:如缓冲区溢出漏洞,格式化字符串漏洞等

3、 缓冲区溢出漏洞利用历史
在国外,早在80年代初就有人开始讨论溢出攻击。
1989 年,Spafford提交了一份关于运行在VAX机上的BSD版UNIX的fingerd的缓冲区溢出程序的技术细节的分析报告,这引起了一部分安全人士对这个研究领域的重视,但毕竟仅有少数人从事研究工作,对于公众而言,没有太多具有学术价值的可用资料。来自L0pht heavy Industries的Mudge写了一篇如何利用BSDI上的libc/syslog缓冲区溢出漏洞的文章。
然而真正有教育意义的第一篇文章诞生在1996年,Aleph One在Underground发表的论文详细描述了Linux系统中栈的结构和如何利用基于栈的缓冲区溢出。Aleph One的贡献还在于给出了如何写开一个shell的Exploit的方法,并给这段代码赋予shellcode的名称,而这个称呼沿用至今,虽然已经部分失去了它原有的含义。我们现在对这样的方法耳熟能详--编译一段使用系统调用的简单的C程序,通过调试器抽取汇编代码,并根据需要修改这段汇编代码。他所给出的代码可以在x86/Linux,SPARC/Solaris和Sparc/SunOS系统正确的工作。受到Aleph One的文章的启发,Internet上出现了大量的文章讲述如何利用缓冲区溢出和如何写一段所需的Exploit。
1997年,Smith综合以前的文章,提供了如何在各种Unix变种中写缓冲区溢出Exploit更详细的指导原则。Smith还收集了各种处理器体系结构下的 shellcode,包括Aleph One公布的和AIX和HPUX的。他在文章中还谈到了*nix操作系统的一些安全属性,例如SUID程序,Linux栈结构和功能性等,并对安全编程进行了讨论,附带了一些有问题的函数的列表,并告诉人们如何用一些相比更安全的代码替代它们。
1998年来自"Cult of the Dead Cow"的Dildog在Bugtrq邮件列表中以Microsoft Netmeeting为例子详细介绍了如何利用Windows的溢出,这篇文章最大的贡献在于提出了利用栈指针的方法来完成跳转,返回地址固定地指向地址,不论是在出问题的程序中还是在动态链接库中,该固定地址包含了用来利用栈指针完成跳转的汇编指令。Dildog提供的方法避免了由于进程线程的区别而造成栈位置不固定。Dildog还有另外一片经典之作The Tao of Windows Buffer Overflows。
集大成者是 dark spyrit,在99年Phrack 55上总提出使用系统核心DLL中的指令来完成控制的想法,将Windows下的溢出Exploit推进了实质性的一步。Litchfield在1999 年为Windows NT平台创建了一个简单的shellcode。他详细讨论了Windows NT的进程内存和栈结构,以及基于栈的缓冲区溢出,并以rasman.exe作为研究的实例,给出了提升权限创建一个本地shell的汇编代码。
1999年w00w00安全小组的Conover写了基于堆的缓冲区溢出的教程,开头写道:"基于Heap/BSS的溢出在当今的应用程序中已经相当普遍,但很少有被报道"。他注意到当时的保护方法,例如非执行栈,不能防止基于堆的溢出。并给出了大量的例子。
(以上资料来自xfocus)
4、 缓冲区溢出漏洞分类
(1)栈溢出
堆溢出
(2)远程溢出
本地溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值