乌鸦喝水” 这个故事我想大家应该都知道,出自于伊索寓言这可算的上是我的启蒙小说。
这个场景一直留存在我的脑海里。
故事是这样子的,讲的是一只乌鸦想要喝瓶子里的水,但是瓶子太长,嘴巴伸不进去,又没办法把瓶子弄倒,所以它往瓶子里扔石子儿,让瓶子里的水的液面上升,使得水溢出,最后喝到了水。
告诉人们遇到困难要运用智慧、认真思考才能让问题迎刃而解的道理。
那么我有个问题,为什么溢出就会喝到水呢?
以我180的智商,可以算出来,文字前的你们,一定有一个想法:
这TM不是废话么,水满自溢,听过这个字眼木有?
抱歉,我打断一下,首先水满自溢,我听说过,也知道什么意思,但是呢,我想问的是如果换在操作系统里面,合适不合适呢
缓冲区溢出,我想相关专业的朋友都或多或少的听说过,为了防止不太了解的朋友看不太明白,我先简单介绍一下,这个怎么回事。
缓冲区溢出
我还记得大学上的一门安全课程,当老师飙车吹牛时候,经常蹦出这么一个意思:你看看你们,缓冲区溢出都搞不出来,早就让你们要好好学习数据结构,要是换我那会,不说博士阶段,研究生阶段就需要自己拿语言搞定。
缓冲区溢出(Buffer Overflow)是计算机安全领域内既经典而又古老的话题。
不过随着安全性的大力普及,传统的缓冲区溢出攻击方式现在基本没有什么涌出来,相应的介绍缓冲区溢出原理的资料也变得大众化起来。
有本书建议可以看一下,雪的《0day安全:软件漏洞分析技术》。
这一书我觉得已经将缓冲区溢出攻击的原理,阐述得比较清晰明了,感兴趣的朋友可以看一下。
这次不讲解缓冲区溢出原理,这里面关键的两个点,堆和栈。
咱们直接看下它的一个具体应用,或者说是危害吧。
第一个缓冲区溢出攻击--Morris蠕虫,发生在十多年前,它曾造成了全世界6000多台网络服务器瘫痪。
天,这么恐怖,我们公司服务器有没有危险啊,里面有很多重要数据。
有危害,可以利用它编写一些shellcode,去搞到服务器权限。
我们中培课堂有一个培训课程就是关于这块的,对于安全有些很深入的分析。
溢出代码演示
前面铺垫了那么多,就是让大家知道有这么个事情,当中涉及到了数据结构,堆栈等一些知识点。
上一段简单的代码,简洁明了的可以看出溢出是个什么情况。
有一点语言基础的人就不难看出问题所在,在程序中我们要把变量name的值拷贝给变量buffer,但我们分配给变量的空间只有个字节,而name的长度远远大于个字节。
这就导致系统原本分配的空间不足而占用了本来用于存储程序返回地址的空间,导致程序无法正常运行。
总结:
今天这个逼,是最近装的最像的一个,估计你很想知道为什么!所以我就说一下。
因为短短一千来字,把很多个知识点做了介绍,既说了缓冲区溢出大概是怎么回事,还说了需要了解的关键点。
同时为了免受懂代码的朋友给我鄙视,又写上了代码,解释了溢出怎么个情况,然后呢还推荐了书籍,包括下次的更进一步的介绍,此时此景,让我怎能不高兴呢!
当然了,对应的必然有防护办法,怎么防护呢?
这就需要更加深入的学习了。
今天知识点,缓冲区溢出,涉及到 堆 和 栈,shellcode的概念。
后期会更新具体的实际操作,本地怎么模拟搭建这种环境。
未完待续,下期继续更新。