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