您好,登錄后才能下訂單哦!
本文視頻:
????????? 如果文字過于枯燥,可觀看在線視頻:https://edu.51cto.com/sd/16514
基礎知識:
??????? 我們知道在32位操作系統上,主要是溢出棧緩沖區,覆蓋函數返回地址來達到劫持程序的木的,那么Linux為了防御該問題,使用了canary來保護函數的返回地址。
canary保護是Linux眾多保護機制的一種,主要的作用是防御溢出***。他的工作原理是在函數執行時,取gs:0x14的值放到某一位置中,我們假設叫A,那么在程序執行結束后,把A位置的值和gs:0x14的值進行異或如果結果為0說明沒有被修改,否則被修改了。
下面我們來通過代碼來查看效果
首先我們不使用canary防護:gcc -m32 -o0 canary.c -o canary
使用canary防護:gcc -fstack-protector-all -m32 -o0 canary.c -o canary
在截圖中標紅的是我們加入-fstack-protector-all帶來的效果,在開頭取gs:0x14的數據保存到ebp-exc的位置
第二個標紅的地方是講ebp-0xc位置的數據拿出來和gs:0x14的值進行比對,如果想要更改函數返回地址的值,必須要先覆蓋canary的值,而canary的值是隨機的,所以如果沒有辦法獲取到canary的值,是沒有辦法做到溢出***的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。