什麼是緩衝區溢位 (二)

2021-04-14 06:06:03 字數 1169 閱讀 5640

要知道什麼是緩衝區溢位,首先要知道什麼是緩衝區,緩衝區,簡單說來是一塊連續的計算機記憶體區域, 可以儲存相同資料型別的多個例項。

你一定用strcpy拷貝過字串吧?那,如果拷貝時目的字串的緩衝區的長度小於源字串的長度,會發生什麼呢?對,源字串中多餘的字元會覆蓋掉程序的其它資料。這種現象就叫緩衝區溢位。根據被覆蓋資料的位置的不同,緩衝區溢位分為靜態儲存區溢位、棧溢位和堆溢位三種。而發生溢位後,程序可能的表現也有三種:一是執行正常,這時,被覆蓋的是無用資料,並且沒有發生訪問違例;二是執行出錯,包括輸出錯誤和非法操作等;第三種就是受到攻擊,程式開始執行有害**,此時,哪些資料被覆蓋和用什麼資料來覆蓋都是攻擊者精心設計的。一般情況下,靜態儲存區和堆上的緩衝區溢位漏洞不大可能被攻擊者利用,而棧上的漏洞則具有極大的危險性。

緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程序之間,指令被臨時儲存在堆疊當中,堆疊也會出現緩衝區溢位。

當乙個超長的資料進入到緩衝區時,超出部分就會被寫入其他緩衝區,其他緩衝區存放的可能是資料、下一條指令的指標,或者是其他程式的輸出內容,這些內容都被覆蓋或者破壞掉。可見一小部分資料或者一套指令的溢位就可能導致乙個程式或者作業系統崩潰。

緩衝區溢位是由程式設計錯誤引起的。如果緩衝區被寫滿,而程式沒有去檢查緩衝區邊界,也沒有停止接收資料,這時緩衝區溢位就會發生。緩衝區邊界檢查被認為是不會有收益的管理支出,計算機資源不夠或者記憶體不足是程式設計者不編寫緩衝區邊界檢查語句的理由,然而摩爾定律已經使這一理由失去了存在的基礎,但是多數使用者仍然在主要應用中執行十年甚至二十年前的程式**。

緩衝區溢位之所以氾濫,是由於開放源**程式的本質決定的。一些程式語言對於緩衝區溢位是具有免疫力的,例如perl能夠自動調節位元組排列的大小,ada95能夠檢查和阻止緩衝區溢位。但是被廣泛使用的c語言卻沒有建立檢測機制。標準c語言具有許多複製和新增字串的函式,這使得標準c語言很難進行邊界檢查。c++略微好一些,但是仍然存在緩衝區溢位。一般情況下,覆蓋其他資料區的資料是沒有意義的,最多造成應用程式錯誤,但是,如果輸入的資料是經過「黑客」或者病毒精心設計的,覆蓋緩衝區的資料恰恰是「黑客」或者病毒的入侵程式**,一旦多餘位元組被編譯執行,「黑客」或者病毒就有可能為所欲為,獲取系統的控制權。

什麼是緩衝區溢位 C

緩衝區定義 緩衝區是程式執行的時候機器記憶體中的乙個連續塊,它儲存了給定型別的資料。緩衝區溢位定義 溢位原因 由於大多數程式都會假設資料長度總是與所分配的儲存資料相當,進而存在緩衝區溢位安全隱患,最好的情況是程式不允許輸入超過緩衝區長度的字元並檢查資料長度。攻擊方式 人為的緩衝區溢位一般是由於攻擊者...

緩衝區溢位

緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程...

緩衝區溢位

緩衝區溢位,簡單的說就是計算機對接收的輸入資料沒有進行有效的檢測 理想的情況是程式檢查資料長度並不允許輸入超過緩衝區長度的字元 向緩衝區內填充資料時超過了緩衝區本身的容量,而導致資料溢位到被分配空間之外的記憶體空間,使得溢位的資料覆蓋了其他記憶體空間的資料。通過往程式的緩衝區寫超出其長度的內容,造成...