×

缓冲区溢出教程 缓冲区 缓冲区溢出

学习缓冲区溢出需要掌握什么?如何理解缓冲区溢出攻击

admin admin 发表于2022-05-03 03:55:35 浏览112 评论0

抢沙发发表评论

学习缓冲区溢出需要掌握什么

第一要会一门高级编程语言,最好是c语言。第二要会汇编语言。在会c语言和汇编的基础上,反汇编看看编译器怎么把c语言转成汇编的。如果有这个能力,不仅对学缓冲区溢出有帮助,对其它的例如破解,修改程序都很大的帮助。这个阶段我推荐王爽的汇编做为入门,加一些反汇编资料例如:天书夜读(反汇编)第三我想你能把第二个做到,实际你已经不仅是学了c语言,汇编。更多的是操作系统原理等。有了前两个基础,可以开始专注的学下缓冲区溢出了。我推荐你个入门的书籍,Q版缓冲区溢出教程按照以上步骤假以时日,必定学有所成。

如何理解缓冲区溢出攻击

缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。由于C语言本身缺乏边界检查,同时很多编程人员更注重程序运行时的性能(边界检查会降低性能),因此利用C语言等开发工具开发的软件系统普遍存在着缓冲区溢出漏洞。最早的缓冲区溢出攻击是著名的Robert Morris的因特网蠕虫。1988年,Morris利用fingered程序不限制长度的漏洞使缓冲区溢出,成功地获得了一个脆弱系统的存取权限,获得权限后Morris的程序会在机器上自动安装,并且千方百计去感染其他机器。结果造成互联网上6000余台服务器瘫痪,占当时联网总数的10%。虽然人们认识到了缓冲区溢出的严重危害,但由于一些不好的编程习惯,新的缓冲区溢出漏洞仍然层出不穷。

缓冲区溢出的原理

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序:void function(char *str) { char buffer; strcpy(buffer,str);}上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf()等。当然,随便往缓冲区中填东西造成它溢出一般只会出现“分段错误”(Segmentation fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。

缓冲区溢出攻击之所以成为一种常见的安全攻击手段其原因在于缓冲区溢出漏洞太普遍了,并且易于实现。而且,缓冲区溢出漏洞给予了攻击者想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。缓冲区溢出攻击有很多种形式,相应的防卫手段也随着攻击方法的不同而不同,下面将介绍这两方面的内容。-缓冲区

udp Socket 发送缓冲区 最大可以为多大

internet上的标准mtu值为576字节,所以我建议在进行internet的udp编程时.最好将udp的数据长度控件在548字节(576-8-20)以内.  ipv4协议规定ip层的最小重组缓冲区大小为576!所以,建议udp包不要超过这个大小,而不是因为internet的标准mtu是576!