1. 程式人生 > >緩沖區溢出攻擊

緩沖區溢出攻擊

棧幀 變量 圖片 位置 全局 使用 c語言 百度百科 隨機化

圖片來源:http://blog.csdn.net/u010651541/article/details/49849557

技術分享

主要根據此圖給出一些程序變量的分配情況,以及緩沖區溢出攻擊的簡單原理。

上述圖主要描述進程虛擬地址空間,即用戶空間內容,進程內核地址空間為所有進程共用(Linux內核中)

棧區:理解為函數棧幀的存儲位置,在應用層可以通過回溯棧區得到函數調用地址,即棧回溯;

堆區:程序運行過程中動態分配的內存,malloc和new;

靜態數據區:static變量,全局變量。

函數棧幀示意圖(圖片源自百度百科):

技術分享

這裏主要是關註返回地址和參數部分。參數部分保存了當前函數中聲明的變量,比如char buffer[100],其在函數棧幀中將會通過將esp指針向下移動100個字節為其分配內存區域。而在C語言中,使用strcpy函數填充buffer,由於該函數不會對字符邊界進行檢查,如果strcpy內容長度大於100個字節,則將會覆蓋其上的返回地址信息,通過構造合適地址的shellcode,則可以引起緩沖區溢出攻擊。Linux操作系統中提供了數據執行保護和地址隨機化安全特性來防止這樣一種初級利用方法。

緩沖區溢出攻擊