棧遷移原理圖示


主要用的就是利用 leave;ret; 這樣的gadgets

 

image.png

 

假設,我們有一個程序,存在棧溢出漏洞,我們把內容覆蓋成了下面這樣子,當然此時 bss 段或者 data 段還沒有內容,待會會通過 read 函數輸入:

 

image.png

 

而實際上在程序調用完成 call 返回的時候,就會有這樣的 mov esp,ebp pop ebp ret 指令

 

image.png

 

當我們挨個去執行的時候會出現這樣的情況

首先是 mov esp,ebp 執行完以后變成了這個樣子:

 

image.png

 

然后 pop ebp 執行完后就是

別忘了,pop 指令是把棧頂的值彈到 指定的寄存器,也就是說 esp 會自動的減一個單位

 

image.png

 

這時候就到 ret 了,我們可以通過 read 函數來把內容輸入到 fake ebp1 的地址處

構造的內容主要是把fake ebp1 處寫成 fake ebp2 的地址

 

image.png

 

read 函數執行完成以后程序返回到了 leave_ret,這樣就會在執行一遍上面說的那樣

首先是 mov esp,ebp 執行完成后效果如下:

 

image.png

 

然后是 pop ebp 執行完成后:

 

image.png

 

此時在執行 ret 命令,他就會執行我們構造在 bss 段后者 data 段的那個函數

 

image.png

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM