緩沖區溢出使用說明書
前言
本文主要說明緩沖區溢出及其發生方式。
緩沖區溢出是通過覆蓋進程或程序的內存片段而發生的。
覆蓋進程的某些指針和寄存器的值會導致分段錯誤,從而導致多個錯誤,從而導致以異常方式終止程序執行。
緩沖區溢出的定義
緩沖區是一種易丟失的內存配置,它們當數據從一個位置轉移到另一個位置時臨時性的保存這些數據。當正在處理的數據超過內存緩沖區的存儲容量時,會發生緩沖區溢出。
項目中這種結果會造成溢出數據覆蓋到相鄰內存位置,從而導致緩沖區溢出。當我們對 char 類型的緩沖區進行操作時,會發生緩沖區溢出。
我們將嘗試用幾個例子來理解這個概念。
例如,一個緩沖區設定為只能接受8字節的數據,在這種情況下,如果用戶輸入的數據超過8字節,則超過8字節的數據部分將覆蓋相鄰內存從而超過已分配緩沖區的邊界。這最終會產生分段錯誤,之后引發許多其他錯誤,導致程序執行被終止。

如上所述,分配的內存是8個字節,而用戶輸入的數據是10個字節,超過了緩沖區邊界,而那些額外的2個字節的數據(E&R)覆蓋了相鄰的內存位置。現在我們已經大致了解了緩沖區溢出,是時候對緩沖區溢出的類型進行一些了解了。
緩沖區溢出類型
緩沖區溢出有兩種類型,一種是棧緩沖區溢出,一種是堆緩沖區溢出。
我們來對其總結一下。
棧緩沖區溢出
當一個程序覆蓋到一個內存地址,但該地址在一個固定長度的程序所調用緩沖區邊界以外的位置,就會發生這種情況。
在棧緩沖區溢出中,額外的數據被寫入堆棧上的相鄰緩沖區中。這通常會導致應用程序崩潰,因為這種堆棧上溢出會導致內存損壞方面的錯誤。
堆緩沖區溢出
堆是一種用于動態內存分配管理的內存結構。它通常用于分配在編譯時大小未知的內存,其中所需的內存量太大以至于無法安裝在堆棧上。
堆溢出或堆噴是堆數據區域中發生的一種緩沖區溢出。
基于堆的溢出的利用不同于基于棧的溢出利用。堆上的內存是在運行時動態分配的且通常包含程序數據。
利用堆緩沖區溢出漏洞是通過以特定方式損壞此數據來完成的,從而導致應用程序覆蓋內部結構(例如鏈表指針)。
緩沖區溢出攻擊
最常見的緩沖區溢出攻擊稱為基于堆棧的緩沖區溢出或普通緩沖區溢出攻擊,該堆棧通常為空,直到程序需要用戶輸入(如用戶名或密碼)。否則該堆棧通常為空。
然后,程序將返回內存地址寫入堆棧,然后將用戶的輸入存儲在堆棧之上。在處理堆棧時,用戶的輸入將發送到程序指定的返回地址。
-但是,堆棧的特定內存量在開始時分配,這使得它有限。如果用戶輸入的數據大于堆棧中分配的內存量,并且程序沒有任何輸入驗證,可以驗證提供的數據是否適合分配的內存,則將導致溢出。
如果堆棧緩沖區中充滿了不受信任的用戶提供的數據,則用戶可以以將惡意可執行代碼注入正在運行的程序并控制進程的方式損壞堆棧。
棧緩沖區溢出原理
借助示例可以理解基于堆棧的緩沖區溢出事件。我們將使用一個非常簡單的C++程序來演示基于堆棧的緩沖區溢出。
#include using namespace std;int main(){char buffer[8];cout<<“Input data : ";cin>>buffer;return 0;}
在上面的代碼中,我們使用了一個字符型變量,并創建了一個名為"buffer"的數組,該數組最多可以存儲8個字節的數據。
此程序在執行時等待用戶輸入。用戶將數據放入輸入字段后,應用程序會將值存儲在分配的 8 個字節的內存中。如果用戶提供的數據大于 8 個字節,則會覆蓋相鄰的內存位置,從而導致進程終止。
您可以使用任何C++編譯器來執行上述給定的程序。為此,我們使用了一個在線編譯器。只需將上述源代碼復制粘貼到編譯器中,然后點擊運行按鈕即可。

編譯后,程序被執行。
在第一次執行時,我們提供了"bufferov"作為輸入數據。

正如我們在上圖中看到的那樣,程序正常退出,退出代碼為0。退出代碼 0 表示進程的成功執行。
這是因為用戶提供的數據輸入僅為 8 個字節。
隨后,我們通過在輸入字段中提供"bufferoverflow"作為輸入數據來測試程序,并檢查了結果。

正如我們在上圖中看到的,它說檢測到堆棧粉碎,并且程序退出,退出代碼為134。退出代碼 134 表示程序已中止(收到 SIGABRT),這可能是由于斷言失敗的結果。
檢測到的堆棧粉碎錯誤是由編譯器生成的,以響應其針對緩沖區溢出的防御機制。此處發生緩沖區溢出,因為分配的緩沖區設計為僅保存 8 個字節,而用戶提供的輸入數據為 14 個字節。
這額外的 6 個字節超過了緩沖區邊界,覆蓋了堆棧中存在的相鄰內存位置。這創建了分段錯誤,導致堆棧粉碎錯誤。
結束語
本文主要說明了棧緩沖區溢出和堆緩沖區溢出攻擊的基本概念。
并且通過具體的程序演示說明了緩沖區溢出的原理。
【火線Zone云安全社區群】
進群可以與技術大佬互相交流
進群有機會免費領取節假日禮品
進群可以免費觀看技術分享直播
識別二維碼回復【社區群】進群

【火線zone社區周激勵】
2022.4.18~ 2022.4.24公告

【相關精選文章】



火線Zone是[火線安全平臺]運營的云安全社區,內容涵蓋云計算、云安全、漏洞分析、攻防等熱門主題,研究討論云安全相關技術,助力所有云上用戶實現全面的安全防護。歡迎具備分享和探索精神的云上用戶加入火線Zone社區,共建一個云安全優質社區!
如需轉載火線Zone公眾號內的文章請聯系火線小助手:hxanquan(微信)

// 火線Zone //
微信號 : huoxian_zone

點擊閱讀原文,加入社區,共建一個有技術氛圍的優質社區!