當前位置:
首頁 > 新聞 > 網路安全基礎,緩衝區溢出漏洞解析

網路安全基礎,緩衝區溢出漏洞解析

現在的網路安全領域由各種各樣的門派,最火的莫屬web領域的網路安全,還有物聯網安全等等。緩衝區溢出安全漏洞有一種忽視的感覺,起始最開始的、最有威力的還是緩衝區溢出漏洞,很多零日漏洞也是基於緩衝區漏洞的,最具破壞力的也是緩衝區漏洞。這篇文章簡單講解一下緩衝區漏洞的原理知識,後期結合metasploit和靶機系統,推出實戰方面的課程。

黑客


1 內存攻防技術

很多學習網路安全的人員由這樣的一種感覺,對於緩衝區溢出、棧溢出、堆溢出、shellcode等有一定的了解,模模糊糊的了解術語和概念,但是如果實踐編寫一些滲透代碼時,總感覺無從下手,也許是沒有邁過技術門檻。

內存攻擊指的是利用軟體的安全漏洞,構造惡意的輸入導致軟體在處理輸入數據是出現非預期的錯誤,導致數據被寫到特定的位置,改變了軟體的控制流程,轉而執行外部輸入的指令,造成目標系統被遠程控制或者拒絕服務。

內存攻擊的3個重點:

軟體存在安全漏洞

惡意的輸入觸發安全漏洞

改變軟體的控制流程


2 緩衝區溢出漏洞機制

緩衝區溢出漏洞是由於程序沒有對緩衝區的邊界條件進行檢查,導致引發的異常行為,向緩衝區寫入數據,內容超過了程序員設定的緩衝區邊界,覆蓋了相鄰的內存區域,覆蓋了其他變數還有可能影響程序的控制流程。

這裡舉個例子,如下圖所示,內存中存在兩個相鄰的變數,A是char[]類型的,用於接收外部的數據,輸入為8個位元組,B是短整型的,B的初始值是65535(0xffff)。如果用戶輸入的是"abcdefghi",9個位元組,那麼B就被修改為0x0069,如下圖所示

根據緩衝區位置的不同,可以分為:

棧溢出(Stack Overflow)

堆溢出(Heap Overflow)


3 棧溢出漏洞原理

棧是由操作系統創建和維護的,支持程序內的函數調用功能。

函數調用時,程序會將返回地址壓入棧中,執行換被調用函數的代碼後,通過ret命令從棧中彈出返回地址,放入eip寄存器,繼續程序的運行。

棧溢出的原理:程序向棧中寫入數據時,當寫入的數據長度超過棧分配的緩衝區空間時,就造成了棧溢出。

棧溢出最常見的利用方式有:

覆蓋函數返回地址

覆蓋異常處理結構

這裡舉個例子,說明覆蓋函數返回地址的情況,一般發生在函數調用時,程序將主程序的下一條指令地址保存到棧中,子函數執行結束後,從棧中彈出主程序的指令地址,繼續執行。這樣程序的返回地址、函數的調用參數、局部變數均位於同一個棧中,就給棧溢出改寫程序流程提供了機會。看下面一段代碼

#include

void foo(char *bar)

{

char c[8];

strcpy(c,bar);

}

int main()

{

char array[]="abcdabcdabcdx18xffx18x00";

foo(array);

return 0;

}

注意上述代碼中的strcpy(c,bar)並沒有進行邊界檢查,這段代碼執行結束前後的堆棧空間的分配情況如下圖所示。源字元串array的16個字元複製到C中,最後的4個字元覆蓋了棧的返回地址,改為0x0018ef18,當函數foo返回之後,程序就會跳轉到0x0018ef18這個地址執行相關指令。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 威客安全 的精彩文章:

資深黑客教python小白攻破一個網站!超詳細的教學教程!太牛逼了
10個值得推薦的學習編程的網站

TAG:威客安全 |