烏鴉喝水” 這個故事我想大家應該都知道,出自于伊索寓言這可算的上是我的啟蒙小說。
這個場景一直留存在我的腦海里。
故事是這樣子的,講的是一只烏鴉想要喝瓶子里的水,但是瓶子太長,嘴巴伸不進去,又沒辦法把瓶子弄倒,所以它往瓶子里扔石子兒,讓瓶子里的水的液面上升,使得水溢出,最后喝到了水。
告訴人們遇到困難要運用智慧、認真思考才能讓問題迎刃而解的道理。
那么我有個問題,為什么溢出就會喝到水呢?
以我180的智商,可以算出來,文字前的你們,一定有一個想法:
這TM不是廢話么,水滿自溢,聽過這個字眼木有?
抱歉,我打斷一下,首先水滿自溢,我聽說過,也知道什么意思,但是呢,我想問的是如果換在操作系統里面,合適不合適呢
緩沖區溢出,我想相關專業的朋友都或多或少的聽說過,為了防止不太了解的朋友看不太明白,我先簡單介紹一下,這個怎么回事。
緩沖區溢出
我還記得大學上的一門安全課程,當老師飆車吹牛時候,經常蹦出這么一個意思:你看看你們,緩沖區溢出都搞不出來,早就讓你們要好好學習數據結構,要是換我那會,不說博士階段,研究生階段就需要自己拿語言搞定。
緩沖區溢出(Buffer Overflow)是計算機安全領域內既經典而又古老的話題。
不過隨著安全性的大力普及,傳統的緩沖區溢出攻擊方式現在基本沒有什么涌出來,相應的介紹緩沖區溢出原理的資料也變得大眾化起來。
有本書建議可以看一下,雪的《0day安全:軟件漏洞分析技術》。
這一書我覺得已經將緩沖區溢出攻擊的原理,闡述得比較清晰明了,感興趣的朋友可以看一下。
這次不講解緩沖區溢出原理,這里面關鍵的兩個點,堆和棧。
咱們直接看下它的一個具體應用,或者說是危害吧。
第一個緩沖區溢出攻擊--Morris蠕蟲,發生在十多年前,它曾造成了全世界6000多臺網絡服務器癱瘓。
天,這么恐怖,我們公司服務器有沒有危險啊,里面有很多重要數據。
有危害,可以利用它編寫一些shellcode,去搞到服務器權限。
我們中培課堂有一個培訓課程就是關于這塊的,對于安全有些很深入的分析。
溢出代碼演示
前面鋪墊了那么多,就是讓大家知道有這么個事情,當中涉及到了數據結構,堆棧等一些知識點。
上一段簡單的代碼,簡潔明了的可以看出溢出是個什么情況。
有一點語言基礎的人就不難看出問題所在,在程序中我們要把變量name的值拷貝給變量buffer,但我們分配給變量的空間只有個字節,而name的長度遠遠大于個字節。
這就導致系統原本分配的空間不足而占用了本來用于存儲程序返回地址的空間,導致程序無法正常運行。
總結:
今天這個逼,是最近裝的最像的一個,估計你很想知道為什么!所以我就說一下。
因為短短一千來字,把很多個知識點做了介紹,既說了緩沖區溢出大概是怎么回事,還說了需要了解的關鍵點。
同時為了免受懂代碼的朋友給我鄙視,又寫上了代碼,解釋了溢出怎么個情況,然后呢還推薦了書籍,包括下次的更進一步的介紹,此時此景,讓我怎能不高興呢!
當然了,對應的必然有防護辦法,怎么防護呢?
這就需要更加深入的學習了。
今天知識點,緩沖區溢出,涉及到 堆 和 棧,shellcode的概念。
后期會更新具體的實際操作,本地怎么模擬搭建這種環境。
未完待續,下期繼續更新。