C4-1-2 緩沖區溢出漏洞-堆溢出_第1頁
C4-1-2 緩沖區溢出漏洞-堆溢出_第2頁
C4-1-2 緩沖區溢出漏洞-堆溢出_第3頁
C4-1-2 緩沖區溢出漏洞-堆溢出_第4頁
C4-1-2 緩沖區溢出漏洞-堆溢出_第5頁
已閱讀5頁,還剩19頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1軟件安全

C4典型軟件漏洞機理分析2提綱4.1緩沖區溢出漏洞緩沖區與內存分布棧溢出堆溢出格式化串漏洞4.2Web應用程序漏洞Web應用安全概述SQL注入漏洞34.1.3堆溢出

上一節介紹了棧溢出的原理及利用方法。但近年來,另一種基于緩沖區溢出的攻擊逐漸成為主流。這種新興的攻擊手法的目標從棧轉移到了Windows的堆管理器。盡管基于堆的攻擊要比棧攻擊困難很多,但是相對于棧上的攻擊更加難以防范,所以基于堆的攻擊仍然持續增長。程序在內存中的映像……文本(代碼)段數據段堆棧段內存低地址內存高地址內存遞增方向初始化數據段非初始化數據段(BSS)堆(Heap)棧(stack)堆的增長方向棧的增長方向內核數據代碼0x800000000x7FFFFFFFPEB&TEB系統DLL代碼段54.1.3.1堆的基本知識堆與棧的區別棧變量包含函數內部的普通變量、數組等。使用時不需額外的申請操作,由系統維護。堆是在程序運行時動態分配的內存。堆需要使用專有的函數進行申請。(如C語言中的malloc函數和C++中的new函數等)一般用一個堆指針來使用申請得到的內存。使用完畢后需要將堆指針傳給堆釋放函數回收這片內存,否則會造成內存泄露。64.1.3.1堆與棧的區別74.1.3.1堆的結構堆塊與堆表堆塊:堆區的內存按不同大小組織成塊,以堆塊為單位進行標識。一個堆塊包括兩個部分:塊首和塊身。塊首是一個堆塊頭部的幾個字節,用來標識這個堆塊自身的信息(大小、空閑或占用等)。塊身是緊跟在塊首后面的部分,也是最終分配給用戶使用的數據區。84.1.3.1堆的結構堆塊與堆表堆表:位于堆區的起始位置,用于索引堆區中所有堆塊的重要信息(包括位置、大小、空閑與否等)。堆表的數據結構決定了整個堆區的組織方式,是快速檢索空閑塊、保證堆分配效率的關鍵。堆表可能會采用平衡二叉樹等高級數據結構用于優化查找效率(往往不止一種數據結構)。94.1.3.1堆的結構堆塊空閑態:堆塊被鏈入空鏈表中,由系統管理。占有態:堆塊會返回一個由程序員定義的句柄,由程序員管理。104.1.3.1堆的結構空閑堆塊比占有堆塊多出了兩個4字節的指針,這兩個指針用于鏈接系統中的其他空閑堆塊。114.1.3.1堆的結構堆表在Windows中,占用態的堆塊被使用它的程序索引;而堆表只檢索所有空閑塊的堆塊。最重要的堆表有兩種:空閑雙向鏈表freelist(簡稱空表)快速單向鏈表lookaside(簡稱快表)124.1.3.1堆的結構空表空閑堆塊的塊首中包含一對重要的指針,這對指針用于將空閑堆塊組織成雙向鏈表。根據大小不同,空表總共被分成128條134.1.3.1堆的結構空表堆表區中有一個128項的數組,稱作空表索引(每項包含兩個指針,標識一條空表)空閑堆塊的大小=索引項×8(字節)144.1.3.1堆的結構快表Windows用來加速堆塊分配而采用的一種堆表。也有128條,組織結構與空表類似,只是其中的堆塊按照單鏈表組織。由于在堆溢出中一般不利用快表,故不作詳述。154.1.3.2堆溢出的利用基本原理與DWORDSHOOT堆管理系統的三類操作堆塊分配(將堆塊從空表中“卸下”)堆塊釋放(把堆塊“鏈入”空表)堆塊合并(將若干塊先從空表中“卸下”,修改塊首信息,把更新后的塊“鏈入”空表)這三類操作歸根到底都是對空表鏈的修改164.1.3.2堆溢出的利用堆溢出利用的精髓

用精心構造的數據去溢出覆蓋下一個堆塊的塊首,使其改寫塊首中的前向指針(flink)和后向指針(blink),然后在分配、釋放、合并等操作發生時伺機獲得一次向內存任意地址寫入任意數據的機會(ArbitraryDwordReset,又稱DwordShoot)。通過這個機會,可以控制設計的目標(任意地址),選擇適當的目標數據,從而劫持進程,運行shellcode。174.1.3.2堆溢出的利用舉例:如何通過節點的拆卸產生DwordShoot

拆卸節點node時發生如下操作:

node->blink->flink=node->flink;

node->flink->blink=node->blink;

當精心構造的數據淹沒前向指針和后向指針時,如果在flink放入4字節的任意惡意數據內容,在blink放入目標地址,當執行以上操作時,導致目標地址的內容被修改為該4字節的惡意數據。184.1.3.2堆溢出的利用舉例:如何通過節點的拆卸產生DwordShoot

194.1.3.2堆溢出的利用根據攻擊目標和4字節惡意數據內容的不同,常見的攻擊組合方式有以下幾種:

204.1.4格式化串漏洞格式化串漏洞并不算緩沖區溢出漏洞。為了能夠將字符串、變量、地址等數據按照指定格式輸出,通常使用包含格式化控制符的常量字符串作為格式化串,然后指定用相應變量來代替格式化串中的格式化控制符。printf(“a=%d,b=%d”,a,b);printf(“a=%d,b=%d”);214.1.4格式化串漏洞224.1.4格式化串漏洞格式符除了常見的d、f、u、o、x之外,還有一些指針型的格式符:s----參數對應的是指向字符串的指針;

n----參數對應的是一個整數型指針,將這個參數之前輸出的字符的數量寫入該格式符對應參數指向的地址中。inta=0;printf(”1234567890%n”,&a);234.1.4格式化串漏洞適當利用%p、%s、%n等格式符,一個精心構造的格式化串即可實現對程序內存數據的任意讀、任意寫,從而造成信息泄露、數據篡改和程序流程的非法控制這類威脅。該系列函數可能產生格式化串漏洞:printf,fprintf,sprintf,snprintf,v

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論