DWORDSHOOT的攻擊方法

2021-08-14 06:08:01 字數 1434 閱讀 5093

本文由《0day安全軟體漏洞分析》中的章節總結形成,作為乙個筆記。

其實我開始看著書的時候沒做啥筆記,但後來除錯過程覺得堆塊這塊挺重要的就返回去把這一章的內容單獨摘出來,並把乙個叫做dwordshoot的攻擊方法作為深入理解的例子記了下來。

堆在記憶體中的資料結構形式如圖,占用態和空閒狀態可以由flag標誌清楚的分辨。其中大小和前後指標的位置更是一目了然。可以說我們在堆溢位的分析就會由於如此清晰的結構圖而變得簡單不少。

下面我們來看一下攻擊過程

核心原理就是通過堆疊的釋放和分配過程溢位堆前後指標,從而控制任意記憶體位址未任意資料(前提是位址本身可以寫)

如圖中setp1.2所示。堆發生溢位,攻擊者淹沒了第二個堆塊的塊首,從而控制了其前後向指標的值。其實這裡的有一點不形象了,因為前後向的指標都在塊首,而不是像圖里的畫的一前一後。

最後 int remove(listnode * node)

通過如上結構的函式在分配堆的過程中出發**。

當時學的時候,老覺得是似而非。怪怪的,後來看到乙個仁兄的文字解釋,很形象。如下:

1、雙向鍊錶上有a、b、c一共3個連續的堆塊,a、b、c三者之間的實際實體地址可能相差很大,但是絕對不會三者之間無其他位元組,如果無其他位元組,那表示他們三個可以合併成乙個物理連線起來的大塊,堆管理系統很快會讓他們三者搞基成乙個大個子堆塊,拆下來重新按照其尺寸重新鏈結到該去的鍊錶位置去。。。而不會放縱其在鍊錶上實體地址緊密鏈結的同時還分成3個堆塊串聯在鍊錶上。

2、返回正題,拆下其中乙個堆塊b時,會產生a、c之間的空缺,導致a、c無法相互知曉。所以堆管理系統會在拆b時,把a和c縫縫補補,連在一起,成為新鍊錶,等待下次拆分、合併等等。

而這個斷掉塊b過程之前,我們先通過字串變數溢位,將字串從其他塊溢位到塊b中,即覆蓋了他的第9~16位元組資料,效果就是改了他身上所保管的左、右鄰居門牌號位址,一般就是右鄰門牌號覆蓋為shellcode入口位址,左鄰門牌號覆蓋為各種特殊位址,比如重要函式呼叫位址,棧幀中函式返回位址,棧幀中seh的控制代碼。這樣,在塊b斷下來時,他會把shellcode位址賦值到某個經常呼叫的函式的位址上,或棧幀中當前函式返回位址上,或棧幀中距離當前棧最近的seh異常處理最近的那個控制代碼。

個人感覺這樣清楚多了。

電磁攻擊方法與能量攻擊方法的對比

近年來,一種新的密碼攻擊方法旁道攻擊方法受到了密碼界的關注。人們已經用旁道攻擊完全推導出執行在8 bcmos微控制器上的特殊密碼演算法的全部秘密金鑰。這種攻擊方法避開了複雜的密碼演算法,利用密碼演算法在軟硬體實現中洩露出的各種資訊進行攻擊,就像攻城繞開正門,專打旁門一樣,被稱為旁道攻擊。在旁道攻擊中...

電磁攻擊方法與能量攻擊方法的對比

近年來,一種新的密碼攻擊方法旁道攻擊方法受到了密碼界的關注。人們已經用旁道攻擊完全推導出執行在8 bcmos微控制器上的特殊密碼演算法的全部秘密金鑰。這種攻擊方法避開了複雜的密碼演算法,利用密碼演算法在軟硬體實現中洩露出的各種資訊進行攻擊,就像攻城繞開正門,專打旁門一樣,被稱為旁道攻擊。在旁道攻擊中...

防 ddos 攻擊的方法

不知道身為網路管理員的你是否遇到過伺服器因為拒絕服務攻擊都癱瘓的情況呢?就網路安全而言目前最讓人擔心和害怕的入侵攻擊就要算是拒絕服務攻擊了。他和傳統的攻擊不同,採取的是 多個客戶端來連線伺服器,造成伺服器無法完成如此多的客戶端連線,從而無法提供服務。一,拒絕服務攻擊的發展 從拒絕服務攻擊誕生到現在已...